บอร์ด Raspberry Pi มาพร้อมกับช่องเชื่อมต่อกล้องแบบ CSI (Camera Serial Interface) ที่รองรับความเร็วสูงถึง 1 Gbps สำหรับ Raspberry Pi 5 รองรับการเชื่อมต่อกล้อง 2 ตัว ความละเอียดสูงสุด 12 ล้านพิกเซล กล้อง Raspberry Pi นิยมใช้ในงานหลากหลาย ไม่ว่าจะเป็นกล้องวงจรปิด (Security Camera) กล้องถ่ายภาพแบบ Time-lapse งาน Computer Vision เช่น การตรวจจับใบหน้า การนับวัตถุ หุ่นยนต์อัตโนมัติ และโปรเจค IoT ที่ต้องการประมวลผลภาพแบบ Real-time ด้วยราคาที่สูงและความยืดหยุ่นสูง จึงเป็นตัวเลือกยอดนิยมสำหรับผู้สนใจพัฒนาโปรเจคที่เกี่ยวข้องกับการประมวลผลภาพ (Image Processing)
ในบทความนี้จะแนะนำการเริ่มต้นใช้งาน Raspberry Pi Camera Module 3 ตั้งแต่การติดตั้ง การตั้งค่าเบื้องต้น การแสดงภาพสดผ่านหน้าจอ การถ่ายภาพนิ่ง และการบันทึกวิดีโอด้วยคำสั่งง่าย ๆ พร้อมทั้งแนะนำการใช้ไลบรารี OpenCV ในการประมวลผลภาพขั้นพื้นฐาน เช่น การย่อรูป การวาดเส้น การใส่ข้อความ รวมไปถึงการสร้างกล้อง AI ที่สามารถจำแนกวัตถุแบบ Real-time ด้วยการผสานการทำงานของ OpenCV กับโมเดล Deep Learning ที่มีชื่อว่า MobileNet ตรวจจับและจำแนกวัตถุได้หลากหลายแบบเรียลไทม์ เหมาะสำหรับผู้ที่ต้องการก้าวเข้าสู่โลกของ AI และ Computer Vision อย่างแท้จริง
Raspberry Pi Camera Module 3 เป็นกล้องรุ่นล่าสุดที่ออกแบบมาเพื่อใช้งานร่วมกับ Raspberry Pi โดยเฉพาะ ใช้เซ็นเซอร์ Sony IMX708 ความละเอียด 12 MP มุมมอง 75 องศา พร้อมระบบโฟกัสอัตโนมัติแบบ Phase Detection Autofocus (PDA) ทำงานได้รวดเร็วและแม่นยำ มาพร้อมกับเทคโนโลยี HDR (High Dynamic Range) ที่ช่วยเพิ่มคุณภาพของภาพถ่ายและวิดีโอในสภาวะแสงที่หลากหลาย รวมถึงการปรับปรุงความไวแสงในสภาวะแสงน้อยให้ดีขึ้นกว่ารุ่นเดิม สามารถถ่ายวิดีโอ Full HD ที่ 50 เฟรมต่อวินาที และรองรับเฟรมเรตที่สูงขึ้นเมื่อลดความละเอียด มีทั้งหมด 4 รุ่นให้เลือกใช้
ความสามารถพื้นฐาน ถ่ายภาพมุมมอง 75 องศา เหมาะสำหรับสภาพแวดล้อมที่มีแสงเพียงพอ ในกล้องมาพร้อมสายที่ใช้งานกับ Raspberry Pi 5

ถ่ายภาพมุมมอง 120 องศา เหมาะสำหรับงานที่ต้องการภาพมุมกว้าง เช่น กล้องวงจรปิด, งาน Computer Vision ที่ต้องการตรวจนับ เช่น ตรวจนับรถยนต์บนถนน, ตรวจนับจำนวนคน เป็นต้น การถ่ายภาพในที่มืดต้องใช้แสงที่มองเห็นได้เพิ่มเติม ในกล้องมาพร้อมสายที่ใช้งานกับ Raspberry Pi 5

ด้วยการตัดเลนส์กรองแสงอินฟาเรดออกไป ทำให้กล้องสามารถถ่ายในที่มืดได้อย่างชัดเจน เหมาะสำหรับงานที่เน้นถ่ายภาพในที่มืด โดยใช้แหล่งแสงอินฟาเรดเพิ่มเติม มุมมองภาพ 75 องศา ในกล้องไม่มีสายที่ใช้กับ Raspberry Pi 5 มาให้ (ต้องซื้อเพิ่ม)

ถ่ายภาพมุมมอง 120 องศา และตัดเลนส์กรองแสงอินฟาเรด เหมาะสำหรับงานที่ต้องการภาพมุมกว้างในที่มืด ในกล้องไม่มีสายที่ใช้กับ Raspberry Pi 5 มาให้ (ต้องซื้อเพิ่ม)

การเชื่อมต่อกล้องกับ Raspberry Pi 5 ใช้สายแถบแบบพิเศษ (FPC Cable) ที่มาพร้อมกับกล้อง โดยสายต่อกล้องมี 2 รูปแบบ คือสายแบบ 15 Pin - 15 Pin และสายแบบ 22Pin To 15Pin สำหรับการต่อกับ Raspberry Pi 5 จะใช้สายแบบ 22Pin To 15Pin และ Raspberry Pi รุ่นเก่ากว่าจะใช้สายแบบ 15 Pin - 15 Pin
หมายเหตุ. กล้องรุ่น NoIR และ Wide NoIR จะไม่มีสายแบบ 22Pin To 15Pin แถมมาให้ ต้องซื้อเพิ่มเติม
รอใส่รูป
ที่ตัวกล้อง พลิกด้านหลัง ดึงแถบล็อกพลาสติกออกมา

ใส่สายแบบ 22Pin To 15Pin ด้านใหญ่เข้าไป โดยให้แถบขั้วทองแดงหันลงด้านล่าง แล้วดันแถบล็อกพลาสติกเข้าไป

ได้กล้องที่ต่อสาย ดังรูป

ที่บอร์ด Raspberry Pi ให้ปิดบอร์ดก่อน ตรงช่องเสียบ CAM0/DISP0 ให้ดึงแถบล็อกพลาสติกขึ้นมา

ใส่สายด้านเล็กเข้าไป แล้วกดล็อกแถบล็อกพลาสติก

ได้สายที่ต่อเข้าบอร์ดสมบูรณ์ดังรูป

ได้กล้องที่ต่อเข้าบอร์ด Raspberry Pi 5 (ดังรูป)

หมายเหตุ: Raspberry Pi 5 รองรับการต่อกล้องได้ถึง 2 ตัวพร้อมกัน หากต้องการต่อเพิ่ม ให้ทำขั้นตอนเดียวกัน แต่เปลี่ยนช่องเป็น CAM1/DISP1 แทน
หลังจากต่อกล้องเรียบร้อยแล้ว ให้จ่ายไฟบอร์ด Raspberry Pi แล้วรอจนกว่าจะบูตเสร็จ เปิด Terminal ขึ้นมา ใช้คำสั่งดังนี้
rpicam-still --list-cameras
หากเชื่อมต่อสำเร็จ รุ่นของกล้องจะแสดงขึ้นมา (ดังรูป)

พิมพ์คำสั่งใน Terminal ดังนี้
rpicam-hello --timeout 0
ภาพจากกล้องจะแสดงขึ้นมาแล้ว

หมายเหตุ. พารามิเตอร์ --timeout 0 หมายถึงแสดงภาพแบบไม่จำกัดเวลา กล้องจะแสดงภาพต่อเนื่องจนกว่าจะกด Ctrl+C เพื่อหยุด คำสั่งนี้เหมาะสำหรับการทดสอบดูภาพจากกล้องและจัดตำแหน่งกล้อง
ใช้คำสั่ง rpicam-jpeg เพื่อบันทึกภาพในรูปแบบ JPEG ตัวอย่างให้บันทึกภาพชื่อ test.jpg ไว้ที่หน้า Desktop ดังนี้
rpicam-jpeg --output ~/Desktop/test.jpgหลังส่งคำสั่งใน Terminal ภาพที่บันทึกจะแสดงขึ้นมาในหน้า Desktop (ดับเบิลคลิกเปิดไฟล์เพื่อดูรูป)

สามารถกำหนดขนาดภาพและระยะเวลาหน่วงก่อนถ่ายภาพได้
rpicam-jpeg --output ~/Desktop/test.jpg --timeout 2000 --width 640 --height 480
พารามิเตอร์ที่ใช้:
--timeout 2000 รอ 2 วินาที (2000 มิลลิวินาที) ก่อนถ่ายภาพ--width 640 กำหนดความกว้าง 640 พิกเซล--height 480 กำหนดความสูง 480 พิกเซลCamera Module 3 รองรับความละเอียดสูงสุดถึง 4608 × 2592 พิกเซล (12MP)
หากต้องการบันทึกเป็นไฟล์ PNG หรือรูปแบบอื่นๆ ให้ใช้คำสั่ง rpicam-still พร้อมระบุชนิดไฟล์ ตัวอย่างบันทึกเป็น PNG
rpicam-still --encoding png --output ~/Desktop/test.png
รูปแบบ encoding ที่รองรับ:
Camera Module 3 สามารถบันทึกวีดีโอได้โดยใช้คำสั่ง rpicam-vid ตัวอย่างบันทึกเป็น mp4 ที่หน้า Desktop เป็นเวลา 10 วินาที
rpicam-vid -t 10s -o ~/Desktop/test.mp4
พารามิเตอร์:
ผลที่ได้ ไฟล์วีดีโอจะแสดงขึ้นมาบนหน้า Desktop (ดับเบิลคลิกเปิดไฟล์เพื่อวีดีโอ)

สามารถกำหนดพารามิเตอร์เพิ่มเติมได้ เช่น
--width และ --height กำหนดความละเอียดวีดีโอ--framerate กำหนดเฟรมเรตของวีดีโอ (FPS)rpicam-vid -t 10s -o ~/Desktop/test.mp4 --width 1920 --height 1080 --framerate 30
OpenCV หรือ Open Source Computer Vision Library คือไลบรารีโอเพนซอร์สขนาดใหญ่ที่พัฒนาโดย Intel สำหรับใช้ในการประมวลผลภาพ (Image Processing) และการมองเห็นด้วยคอมพิวเตอร์ (Computer Vision) ซึ่งได้รับความนิยมอย่างกว้างขวางทั้งในวงการวิจัย วิศวกรรม และอุตสาหกรรม เช่น ในงานด้านหุ่นยนต์ ยานยนต์ และระบบรักษาความปลอดภัย ไลบรารีนี้รองรับภาษาต่าง ๆ เช่น Python, C++ และ Java ใช้งานได้ง่าย เหมาะกับทั้งมือใหม่และผู้เชี่ยวชาญ มีความสามารถหลากหลายตั้งแต่การอ่าน/เขียนภาพ การแปลงสี การกรองสีในภาพ ไปจนถึงการตรวจจับวัตถุและใช้ร่วมกับโมเดล AI แบบ Deep Learning เนื่องจากเป็นโอเพนซอร์สจึงมีชุมชนนักพัฒนาและเอกสารจำนวนมาก สามารถเรียนรู้และต่อยอดได้อย่างรวดเร็วและมีประสิทธิภาพ
การเขียนโปรแกรมสั่งงาน Camera Module 3 ด้วย Python ต้องติดตั้งไลบรารี่ควบคุมกล้องอย่าง picamera2 และ OpenCV ดังนี้
sudo apt update
sudo apt install -y python3-picamera2 python3-opencv
เปิดโปรแกรม Thonny ขึ้นมา

คัดลอกโค้ดต่อไปนี้ใส่ในโปรแกรม
จากนั้นกด Run ผลที่ได้ภาพจากกล้องจะแสดงขึ้นมาแล้ว

Camera Module 3 มาพร้อมระบบ Auto Focus รองรับ 3 โหมด ดังนี้
AfMode: 0 - Manual (ปิด Auto Focus)AfMode: 1 - Auto (โฟกัสครั้งเดียว)AfMode: 2 - Continuous (โฟกัสอย่างต่อเนื่อง)เปิดใช้งาน/เปลี่ยนโหมดโดยใช้คำสั่ง
picam2.set_controls({"AfMode": <โหมด Auto Focus 0-2>, "AfTrigger": 0})
ตัวอย่างโค้ดโปรแกรมแสดงภาพจากกล้องแบบเปิด Auto Focus อย่างต่อเนื่อง (Continuous) มีดังนี้
ผลที่ได้ เมื่อนำวัตถุมาใกล้ หรือออกห่าง กล้องจะปรับความชัดให้อัตโนมัติแล้ว

ภาพที่ได้จากกล้องมักมีขนาดใหญ่ เมื่อนำไปเข้าโมเดล AI จะทำให้การประมวลผลช้าลง หากต้องการให้การประมวผลเร็วขึ้นจำเป็นต้องลดขนาดของภาพลง การลดขนาดภาพใช้คำสั่ง cv2.resize() โดยลดขนาดภาพได้ 2 รูปแบบคือ
1) ลดขนาดแบบกำหนดขนาดใหม่ - ใส่ขนาดใหม่ลงในพารามิเตอร์ที่ 2 ตัวอย่างกำหนดขนาดใหม่เป็น 620x480 มีดังนี้
frame_resized = cv2.resize(frame, (620, 480))
2) ลดขนาดแบบกำหนด % - ใช้กรณีต้องการลดขนาดแบบรวดเร็ว กำหนดขนาดที่ต้องการลด 0 - 1 ในพารามิเตอร์ fx และ fy ตัวอย่างลดขนาด 50% มีดังนี้
frame_resized = cv2.resize(frame, None, fx=0.5, fy=0.5)
การวาดกรอบสี่เหลี่ยมในภาพ ทำได้โดยใช้คำสั่ง cv2.rectangle() โดยกำหนดพิกัดเริ่มวาดในพารามิเตอร์ที่ 2, กำหนดพิกัดสิ้นสุดในพารามิเตอร์ที่ 3, กำหนดสี BGR ในพารามิเตอร์ที่ 4, กำหนดความหนาของเส้นขอบในพารามิเตอร์ที่ 5
ตัวอย่างการวาดสี่เหลี่ยมที่พิกัด (50, 50) สิ้นสุดที่ (150, 100) สีแดง (0, 0, 255) ความหนาของเส้นขอบ 2 px
cv2.rectangle(frame, (50, 50), (150, 100), (0, 0, 255), 2)
การใส่ข้อความในรูปในคำสั่ง cv2.putText() โดยกำหนดข้อความที่พารามิเตอร์ 2, กำหนดพิกัดเริ่มต้นพารามิเตอร์ 3, กำหนดฟอนต์ในพารามิเตอร์ 4, กำนหนดขนาดตัวอักฤษในพารามิเตอร์ 5, กำหนดสี BGR ในพารามิเตอร์ 6 และกำหนดขอบตัวอักษรในพารามิเตอร์ 7
ตัวอย่างโค้ดแสดงข้อความ Hello, OpenCV ! ที่พิกัดเริ่ม (10, 30) ฟอนต์ Hershey Simplex ขนาดตัวอักษร 0.5 สีเขียว (0, 255, 0) ขอบหนา 1 px มีดังนี้
cv2.putText(frame_resized, "Hello, OpenCV !", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
นำคำสั่งทั้งหมดมารวมกัน ได้โค้ดทดสอบดังนี้
กด Run ผลที่ได้แสดงดังรูป

MobileNet-SSD v1 คือโมเดลการตรวจจับวัตถุ (Object Detection) ที่เบาและเร็ว ผสานสถาปัตยกรรม MobileNet กับ SSD (Single Shot MultiBox Detector) เพื่อให้สามารถทำงานได้อย่างมีประสิทธิภาพบนอุปกรณ์ทรัพยากรจำกัด โดยเฉพาะในระบบ Embedded ต่าง ๆ MobileNet ใช้เทคนิค Depthwise Separable Convolution ช่วยลดจำนวนพารามิเตอร์และการคำนวณ ทำให้โมเดลมีขนาดเล็กและทำงานได้เร็ว ส่วน SSD เป็นเฟรมเวิร์กที่สามารถตรวจจับวัตถุด้วยการประมวลผลเพียงรอบเดียว (single shot) ทำให้มีความเร็วสูงกว่าวิธีแบบดั้งเดิมอย่าง R-CNN
การใช้งานโมเดล MobileNet-SSD v1 ต้องดาวน์โหลดไฟล์ด้วยคำสั่ง wget ใน Terminal ดังนี้
wget https://dl.artronshop.co.th/OpenCV/ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb
wget https://dl.artronshop.co.th/OpenCV/ssd_mobilenet_v1_coco_2017_11_17/ssd_mobilenet_v1_coco_2017_11_17.pbtxt
เขียนโค้ดโปรแกรมดังนี้
กด Run ผลที่ได้ โปรแกรมจะเริ่มตรวจจับวัตถุแบบเรียลไทม์และแสดงกรอบพร้อมชื่อวัตถุที่ตรวจพบ รวมถึงค่าความเชื่อมั่น (confidence) 0 - 1


Raspberry Pi Camera Module 3 เป็นกล้องสำหรับบอร์ด Raspberry Pi ที่มีความสามารถสูงและใช้งานง่าย เพียงต่อสายก็สามารถใช้งานได้เลย มีไลบรารี่ เอกสาร และโค้ดโปรแกรมให้ทดลองใช้งานมาให้ครบ เหมาะสำหรับโปรเจกต์ที่หลากหลาย ตั้งแต่การบันทึกภาพและวีดีโอธรรมดา ไปจนถึงการประมวลผลภาพและ AI ขั้นสูง
Raspberry Pi Camera Module 3 ยังต่อยอดใช้งานได้หลากหลายมาก ในโอกาศหน้าจะนำเสนอต่อไป สำหรับบทความนี้
~สวัสดีครับ~
ArtronShop บอร์ดอิเล็กทรอนิกส์ Arduino ESP32 ESP8266