<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thipwaree Aunruean</title>
    <description>The latest articles on DEV Community by Thipwaree Aunruean (@thipwaree_aunruean_3).</description>
    <link>https://dev.to/thipwaree_aunruean_3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3034477%2F29a3b792-289e-4051-a693-5b4a7208311a.jpeg</url>
      <title>DEV Community: Thipwaree Aunruean</title>
      <link>https://dev.to/thipwaree_aunruean_3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thipwaree_aunruean_3"/>
    <language>en</language>
    <item>
      <title>AI ตรวจจับใบหน้าด้วย OpenCV แบบเรียลไทม์: เริ่มต้นง่าย ๆ ด้วย Python</title>
      <dc:creator>Thipwaree Aunruean</dc:creator>
      <pubDate>Thu, 10 Apr 2025 16:09:44 +0000</pubDate>
      <link>https://dev.to/thipwaree_aunruean_3/ai-trwcchcchabaibhnaadwy-opencv-aebberiiylaithm-erimtnngaay-dwy-python-3fnh</link>
      <guid>https://dev.to/thipwaree_aunruean_3/ai-trwcchcchabaibhnaadwy-opencv-aebberiiylaithm-erimtnngaay-dwy-python-3fnh</guid>
      <description>&lt;p&gt;สวัสดีค่ะ ! &lt;br&gt;
   บทความนี้เราจะพาไปรู้จักกับการใช้ OpenCV (Open Source Computer Vision Library) เพื่อใช้ในการตรวจจับใบหน้าแบบเรียลไทม์ผ่านกล้องเว็บแคมกัน&lt;/p&gt;

&lt;p&gt;โดยเราจะใช้เทคนิค Haar Cascade Classifier ซึ่งเป็นหนึ่งในโมเดลคลาสสิกของ Computer Vision ที่สามารถใช้ได้รวดเร็วและเบาเครื่อง เหมาะสำหรับผู้เริ่มต้น AI และ Deep Learningมากๆเลยค่ะ เพราะทั้งสะดวกและไม่ซับซ้อนด้วย&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;ตัวอย่างCODE&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import cv2


face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')


cap = cv2.VideoCapture(0)

while True:

    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # แปลงภาพเป็นขาวดำ


    faces = face_cascade.detectMultiScale(gray, 1.1, 4)


    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)


    cv2.imshow('Face Detection', frame)


    if cv2.waitKey(1) &amp;amp; 0xFF == ord('q'):
        break


cap.release()
cv2.destroyAllWindows()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔍 โค้ดนี้เราใช้ทำอะไร ทำงานอย่างไร?&lt;/p&gt;

&lt;p&gt;อันดับแรกนะคะโปรแกรมจะใช้กล้องเว็บแคมเพื่อจับภาพ&lt;/p&gt;

&lt;p&gt;จากนั้นจึงตรวจสอบว่ามี “หน้า” ปรากฏอยู่หรือไม่&lt;/p&gt;

&lt;p&gt;และสุดท้ายถ้ามีหน้าก็วาดกรอบสีเขียวรอบใบหน้าแบบเรียลไทม์นั่นเองค่ะ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;ตัวอย่างภาพ&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fln6h5md3f6cl18bbdtxw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fln6h5md3f6cl18bbdtxw.jpeg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;โค้ดนี้คือการใช้ OpenCV ตรวจจับใบหน้า (Face Detection) แบบเรียลไทม์จาก กล้องเว็บแคม โดยใช้ Haar Cascade Classifier&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import cv2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;นำเข้าไลบรารี OpenCV ซึ่งใช้ในการประมวลผลภาพและวิดีโอ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โหลดโมเดลสำหรับตรวจจับใบหน้าที่ชื่อว่า Haar Cascade Frontal Face&lt;/p&gt;

&lt;p&gt;โมเดลนี้คือ .xml ไฟล์ที่ฝึกมาแล้วให้รู้ว่า "ใบหน้า" มีลักษณะอย่างไร&lt;/p&gt;

&lt;p&gt;มันทำงานโดยการ สแกนภาพทีละกรอบเล็ก ๆ แล้วประเมินว่าเป็นหน้าคนไหม&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cap = cv2.VideoCapture(0)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เปิดกล้องเว็บแคม (อุปกรณ์ที่ index = 0 คือกล้องหลักของเครื่อง)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;while True:
    ret, frame = cap.read()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เริ่มลูปไม่รู้จบ เพื่ออ่านวิดีโอทีละเฟรม&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ret&lt;/em&gt; = ผลลัพธ์ว่าอ่านสำเร็จหรือไม่ (True/False)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;frame&lt;/em&gt; = ภาพจากกล้องในขณะนั้น&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;แปลงภาพจากสี (BGR) เป็นขาวดำ (Grayscale)&lt;br&gt;
→ เพื่อให้โมเดลทำงานเร็วขึ้น เพราะมันไม่ต้องประมวลผลสี&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    faces = face_cascade.detectMultiScale(gray, 1.1, 4)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตรวจจับ "ใบหน้า" บนภาพ grayscale&lt;/p&gt;

&lt;p&gt;1.1 = scale factor → ขยายภาพทีละนิด (ช่วยหาใบหน้าในหลายขนาด)&lt;/p&gt;

&lt;p&gt;4 = minNeighbors → ยิ่งมากยิ่งลด false positive (ค่าแนะนำ 3-6)&lt;/p&gt;

&lt;p&gt;ผลลัพธ์คือ ลิสต์ของกรอบใบหน้า ที่เจอในภาพ (x, y, w, h)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;วาดกรอบสีเขียว (RGB = (0, 255, 0)) รอบใบหน้าที่ตรวจเจอ&lt;/p&gt;

&lt;p&gt;(x, y) คือมุมบนซ้ายของกรอบ&lt;/p&gt;

&lt;p&gt;(x+w, y+h) คือมุมล่างขวาของกรอบ&lt;/p&gt;

&lt;p&gt;2 คือความหนาของเส้น&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    cv2.imshow('Face Detection', frame)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;แสดงผลวิดีโอที่วาดกรอบใบหน้าแล้ว ผ่านหน้าต่างชื่อว่า Face Detection&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    if cv2.waitKey(1) &amp;amp; 0xFF == ord('q'):
        break
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ถ้าผู้ใช้กดปุ่ม q จะ หยุดการทำงานของลูป&lt;/p&gt;

&lt;p&gt;waitKey(1) = รอ 1 มิลลิวินาทีต่อเฟรมเพื่อดูว่ามี key ถูกกดไหม&lt;/p&gt;

&lt;p&gt;ord('q') = เช็คว่าเป็นตัว q รึเปล่า&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cap.release()
cv2.destroyAllWindows()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หลังจบการทำงาน:&lt;/p&gt;

&lt;p&gt;cap.release() ปิดการเชื่อมต่อกับกล้อง&lt;/p&gt;

&lt;p&gt;cv2.destroyAllWindows() ปิดหน้าต่างที่เปิดโดย OpenCV&lt;/p&gt;

&lt;p&gt;นี่เป็นพื้นฐานของการตรวจจับใบหน้าง่ายๆค่ะ นอกจากนี้เราสามารถนำพื้นฐานเหล่านี้ไปประยุกต์ได้หลากหลาย เช่นการตรวจจับอารมณ์หรือรอยยิ้ม ก็ทำได้อย่างง่าย เพียงแค่เพิ่มโค้ด&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; # วาดกรอบใบหน้า
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

        # ตรวจจับรอยยิ้ม
        smiles = smile_cascade.detectMultiScale(roi_gray, scaleFactor=1.7, minNeighbors=20)
        for (sx, sy, sw, sh) in smiles:
            cv2.putText(frame, "Smile 😊", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 200, 0), 2)
            break 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;แต่ว่าทุกคนต้องติดตั้งเวอร์ชัน Advanced (Face + Smile + Age/Gender + Emotion) สำหรับ0penCVกันก่อนนะคะ !&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install opencv-python opencv-contrib-python deepface

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;ตัวอย่างการใช้งานจริง&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;สถานการณ์ตัวอย่าง:&lt;/p&gt;

&lt;p&gt;นำไปใช้ในระบบความปลอดภัย เช่น กล้องวงจรปิด&lt;/p&gt;

&lt;p&gt;สร้างระบบเช็คชื่อด้วยใบหน้าในห้องเรียน&lt;/p&gt;

&lt;p&gt;ใช้ตรวจจับใบหน้าในแอปพลิเคชันเพื่อทำ Face Filter หรือวัดอารมณ์ &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqfkb6zf3k01fxcxsord.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqfkb6zf3k01fxcxsord.png" alt="Image description" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;หวังว่าทุกคนจะได้รับความรู้และประสบการณ์ที่ดีจากบทความนี้นะคะ หวังว่าแนวทางแนะนำการใช้ OpenCV และ Haar Cascade เพื่อทำ Face Detection แบบเรียลไทม์ ด้วยโค้ดเพียงไม่กี่บรรทัด จะเป็นจุดเริ่มต้นสู่การพัฒนาแอปพลิเคชันด้าน AI และ Computer Vision ที่นำไปใช้งานจริงได้หลากหลายให้กับทุกๆคน  และสุดท้ายนี้เราสามารถเพิ่มลูกเล่นเช่น ตรวจจับรอยยิ้ม, ดวงตา หรือแม้แต่ใส่ filter แบบ IG ก็ได้นะ ถ้าทุกคนอยาก level up ต่อไป 🤖✨&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;References&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenCV Website : &lt;a href="https://opencv.org/" rel="noopener noreferrer"&gt;OpenCV&lt;/a&gt;&lt;br&gt;
Haar Cascade XML Classifiers : &lt;a href="https://github.com/opencv/opencv/tree/master/data/haarcascades" rel="noopener noreferrer"&gt;github&lt;/a&gt;&lt;br&gt;
(ชุดโมเดลสำหรับตรวจจับใบหน้า รอยยิ้ม ดวงตา และยังมีโมเดลตัวอื่นๆให้ลองศึกษาและใช้ฟรีด้วยนะ)&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
