flowchart LR
A["1 นับวัตถุด้วย AI<br/>ได้ผลเร็ว แต่อธิบายไม่ได้"] --> B["2 กล้องในฐานะเซนเซอร์<br/>ห่วงโซ่การวัด"]
B --> C["3 แสง เวลา<br/>และการรับภาพ"]
C --> D["4 ตรวจสอบชิ้นงาน<br/>OK/NG"]
D --> E["5 วัดขนาด<br/>และสถานีตรวจ"]
CV for Beginners
Computer vision สำหรับงานตรวจสอบในอุตสาหกรรม ด้วย Python และ OpenCV ใน 5 ใบงาน
เว็บนี้ใช้ทำอะไร
โรงงานใช้กล้องทำงาน 4 แบบ คือ หาตำแหน่ง ชิ้นงาน วัดขนาด ตรวจสอบ ว่าดีหรือเสีย และ อ่านรหัส ทั้งหมดต้องทำทันความเร็วของสายการผลิตและตัดสินผิดให้น้อยที่สุด
ชุดใบงานนี้เริ่มจากโจทย์จริงตั้งแต่ชั่วโมงแรก ใบงาน 1 ใช้ AI นับรถจากวิดีโอได้ด้วยโค้ดไม่ถึง 30 บรรทัด จากนั้นใบงาน 2–5 ค่อย ๆ เปิดกล่องดำ ว่าภาพกลายเป็นตัวเลขที่เชื่อถือได้อย่างไร จนจบที่สถานีตรวจที่วัดขนาดชิ้นงานแล้วสั่งไฟ OK/NG บนบอร์ด Arduino
ห่วงโซ่การวัด: แกนของทุกใบงาน
ทุกใบงานมองกล้องเป็น เซนเซอร์ ตัวหนึ่ง สัญญาณดิบคือภาพ ซึ่งต้องผ่านหลายขั้นก่อนจะได้ค่าที่วัดได้ หัวของแต่ละใบงานจะเน้นขั้นที่ใบงานนั้นฝึก
Scene -> Camera -> Pixels -> Features -> Measurand -> Calibration -> Value + Uncertainty -> Decision (OK/NG)
| ขั้น | ความหมาย | ตัวอย่าง |
|---|---|---|
| Scene + Camera | ชิ้นงาน แสง และกล้องที่แปลงแสงเป็นสัญญาณ | แสง backlight, exposure ที่ล็อกไว้ |
| Pixels | สัญญาณดิบ เป็น NumPy array | 480 x 640 x 3 ค่า |
| Features | ลักษณะเด่นที่ดึงจากภาพ | mask, contour, Bounding Box |
| Measurand | ปริมาณที่ต้องการ | จำนวน, ขนาด, มี/ไม่มี |
| Calibration | ความสัมพันธ์กับหน่วยจริง | pixel → mm |
| Uncertainty | ความเชื่อถือได้ของค่า | error, S.D., FRR/FAR |
| Decision | ผลที่ส่งต่อให้สายการผลิต | OK/NG, ไฟเขียว/แดง |
ใบงาน
| ใบงาน | เรื่อง | คำถามที่ตอบ | ทักษะอุตสาหกรรม |
|---|---|---|---|
| 0 | เตรียมเครื่องมือ | ติดตั้ง Python, OpenCV, ต่อกล้อง | |
| 1 | นับวัตถุด้วย AI | AI นับได้ถูกต้องแค่ไหน | detection, เส้นนับ, error |
| 2 | กล้องในฐานะเซนเซอร์ | จากภาพเป็นค่าที่วัดได้ต้องผ่านอะไร | สี HSV, contour, pixel → mm |
| 3 | แสง เวลา และการรับภาพ | ตั้งกล้องและแสงอย่างไรให้ตรวจได้ทันการผลิต | การจัดแสง, threshold, fps, latency, motion blur |
| 4 | ตรวจสอบชิ้นงาน OK/NG | เครื่องตรวจตัดสินผิดบ่อยแค่ไหน | หาตำแหน่งด้วย ArUco, presence/absence, FRR/FAR |
| 5 | วัดขนาดและสถานีตรวจ | ระบบนี้ใช้ตรวจตาม tolerance ได้หรือไม่ | สอบเทียบกล้อง, %GRR, ส่งผลไปบอร์ด |
แต่ละใบงานใช้เวลาประมาณ 3 ชั่วโมง และมีรูปแบบเดียวกัน คือ โจทย์ → ทำให้ใช้ได้ → เปิดดู pixel ว่าทำไมได้หรือไม่ได้ → ปรับ → วัดผลเทียบค่าอ้างอิง ทุกใบงานเริ่มด้วย โค้ดตั้งต้น ที่รันได้ด้วยตัวเอง และมี ใบบันทึกผล PDF ให้เขียนผลบน tablet แล้วส่ง แนวคิดพื้นฐานที่ใช้ในแต่ละใบงานรวมไว้ที่หน้า แนวคิดพื้นฐาน สำหรับค้นย้อนหลัง
อุปกรณ์ (กลุ่มละ 2–3 คน)
ใช้ของที่หาได้ในสำนักงานและโทรศัพท์ของนักศึกษาเป็นหลัก ไม่ต้องซื้ออุปกรณ์จัดแสงเฉพาะทาง
| อุปกรณ์ | ใช้ในใบงาน |
|---|---|
| โน้ตบุ๊กที่ติดตั้ง Python 3.10 ขึ้นไป | ทุกใบ |
| โทรศัพท์เครื่องที่ 1 เป็นกล้อง (แอป IP Webcam / DroidCam) หรือ USB webcam พร้อมขาตั้งที่หันกล้องลงตั้งฉากกับโต๊ะ | 2–5 |
| โทรศัพท์หรือแท็บเล็ตเครื่องที่ 2 เป็นไฟฉายและ backlight (เปิดภาพขาวเต็มจอ) | 3, 5 |
| กล่องกระดาษบุขาว, กระดาษ A4 | 3 |
| ลวดเสียบกระดาษ, คลิปหนีบกระดาษสีดำ, เทปใส | 3 |
แผ่นทดสอบที่พิมพ์จากไฟล์ใน data/ |
2–5 |
| เหรียญ 1, 5, 10 บาท และเวอร์เนียร์คาลิปเปอร์ | 4, 5 |
| Arduino UNO R4 WiFi + LED 2 สี | 5 |
| สายชาร์จหรือ power bank สำหรับโทรศัพท์ | ทุกใบ |
ทุกใบงานมีภาพและวิดีโอตัวอย่างใน data/ ให้ทำได้โดยไม่ต้องมีกล้อง และทำให้ผลของทั้งห้องเทียบกันได้
โครงสร้าง repo
cv-for-beginners/
├── content/ ต้นฉบับหน้าเว็บ (Quarto)
├── code/ โค้ดตั้งต้นของแต่ละใบงาน
├── worksheets/ ใบบันทึกผล PDF สำหรับเขียนบน tablet
├── data/ แผ่นทดสอบและภาพตัวอย่าง
└── scripts/ สคริปต์สร้างแผ่นทดสอบ (ผู้สอน)