- ส่วนประกอบที่จำเป็น
- การติดตั้ง OpenCV ใน Raspberry Pi
- วิธีตรวจจับชิ้นส่วนใบหน้าโดยใช้ dlib
- การเขียนโปรแกรม Raspberry Pi สำหรับการตรวจจับจุดสังเกตบนใบหน้า
- การทดสอบ Face Part Recognizer
การตรวจจับจุดสังเกตบนใบหน้าคือกระบวนการตรวจจับส่วนต่างๆบนใบหน้าเช่นคิ้วตาจมูกปากและขากรรไกร มีแอพพลิเคชั่นมากมายที่ใช้เทคนิคการตรวจจับจุดสังเกตใบหน้า
ก่อนหน้านี้เราสร้างระบบการจดจำใบหน้าโดยใช้ OpenCV ในวันนี้เราจะใช้ OpenCV เดียวกันกับราสเบอร์รี่ Pi สำหรับการตรวจสอบสถานที่สำคัญบนใบหน้าโมดูลเครื่องตรวจจับจุดสังเกตใบหน้าที่ได้รับการฝึกฝนมาแล้วจากไลบรารี dlib จะถูกใช้เพื่อตรวจจับตำแหน่งของโครงสร้างใบหน้าที่สำคัญบนใบหน้าและ Python OpenCV จะใช้เพื่อแสดงภาพชิ้นส่วนใบหน้าที่ตรวจพบ
ส่วนประกอบที่จำเป็น
ส่วนประกอบฮาร์ดแวร์
- ราสเบอร์รี่ Pi 3
- โมดูลกล้อง Pi
ซอฟต์แวร์และบริการออนไลน์
- OpenCV
- Dlib
- Python3
ก่อนดำเนินการนี้ ราสเบอร์รี่ Pi 3 ใบหน้าแลนด์มาร์คตรวจจับ,แรกเราจำเป็นต้องติดตั้ง OpenCV, imutils, dlib, Numpy และบางอ้างอิงอื่น ๆ ในโครงการนี้ OpenCV ใช้ที่นี่สำหรับการประมวลผลภาพดิจิทัล แอพพลิเคชั่นที่พบบ่อยที่สุดของ Digital Image Processing ได้แก่ การตรวจจับวัตถุการจดจำใบหน้าและตัวนับคน
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีเชื่อมต่อกล้อง Pi กับ Raspberry Pi ให้ทำตามบทช่วยสอนก่อนหน้าของเรา
การติดตั้ง OpenCV ใน Raspberry Pi
ที่นี่จะใช้ไลบรารี OpenCV สำหรับเครื่องสแกน Raspberry Pi QR ในการติดตั้ง OpenCV ก่อนอื่นให้อัปเดต Raspberry Pi
อัปเดต sudo apt-get
จากนั้นติดตั้งการอ้างอิงที่จำเป็นสำหรับการติดตั้ง OpenCV บน Raspberry Pi ของคุณ
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 - sudo apt-get install libqt4-test –y
หลังจากนั้นให้ติดตั้ง OpenCV ใน Raspberry Pi โดยใช้คำสั่งด้านล่าง
pip3 ติดตั้ง opencv-Contrib-python == 4.1.0.25
ก่อนหน้านี้เราเคยใช้ OpenCV กับ Raspberry pi และสร้างบทเรียนมากมาย
- การติดตั้ง OpenCV บน Raspberry Pi โดยใช้ CMake
- การจดจำใบหน้าแบบเรียลไทม์ด้วย Raspberry Pi และ OpenCV
- การจดจำป้ายทะเบียนโดยใช้ Raspberry Pi และ OpenCV
- การประมาณขนาดฝูงชนโดยใช้ OpenCV และ Raspberry Pi
นอกจากนี้เรายังได้สร้างชุดบทเรียน OpenCV โดยเริ่มตั้งแต่ระดับเริ่มต้น
การติดตั้ง imutils : imutils ใช้เพื่อเรียกใช้ฟังก์ชันการประมวลผลภาพที่จำเป็นไม่กี่อย่างเช่นการแปลการหมุนการปรับขนาดโครงกระดูกและการแสดงภาพ Matplotlib ง่ายขึ้นด้วย OpenCV ดังนั้นติดตั้ง imutils โดยใช้คำสั่งด้านล่าง:
pip3 ติดตั้ง imutils
การติดตั้ง dlib: dlib เป็นชุดเครื่องมือสมัยใหม่ที่มีอัลกอริทึม Machine Learning และเครื่องมือสำหรับปัญหาในโลกแห่งความเป็นจริง ใช้คำสั่งด้านล่างเพื่อติดตั้ง dlib
pip3 ติดตั้ง dlib
การติดตั้ง NumPy : NumPy เป็นไลบรารีหลักสำหรับการคำนวณทางวิทยาศาสตร์ที่มีวัตถุอาร์เรย์ n มิติที่มีประสิทธิภาพมีเครื่องมือสำหรับการรวม C, C ++ ฯลฯ
Pip3 ติดตั้ง numpy
วิธีตรวจจับชิ้นส่วนใบหน้าโดยใช้ dlib
เราจะใช้เครื่องตรวจจับจุดสังเกตใบหน้าที่ได้รับการฝึกฝนมาก่อนของห้องสมุด dlib เพื่อตรวจจับตำแหน่งของ 68 (x, y) - พิกัดพิกัดที่จับคู่กับโครงสร้างใบหน้าบนใบหน้า ตัวทำนายจุดสังเกตใบหน้า dlib ได้รับการฝึกฝนบนชุดข้อมูล iBUG 300-W ภาพที่มีดัชนีของพิกัด 68 ได้รับด้านล่าง:
การเขียนโปรแกรม Raspberry Pi สำหรับการตรวจจับจุดสังเกตบนใบหน้า
กรอกรหัสหลามสำหรับFace Parts Recognition ด้วยเครื่องตรวจจับจุดสังเกตใบหน้าที่ได้รับการฝึกฝนมาแล้วของ dlibที่ท้ายหน้า เรากำลังอธิบายส่วนสำคัญบางส่วนของโค้ดเพื่อความเข้าใจที่ดีขึ้น
ดังนั้นตามปกติเริ่มต้นรหัสโดยรวมไลบรารีที่จำเป็นทั้งหมด
จาก imutils import face_utils import numpy เป็น np import argparse import imutils import dlib import cv2 จาก picamera.array import PiRGBArray จาก picamera import PiCamera
จากนั้นเริ่มต้นวัตถุของกล้องและตั้งค่าความละเอียดที่ (640, 480) และอัตราเฟรมที่ 30 fps
กล้อง = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
ตอนนี้ในบรรทัดถัดไปให้ใช้ตัวแยกวิเคราะห์อาร์กิวเมนต์เพื่อระบุเส้นทางไปยังตัวทำนายจุดสังเกตใบหน้า
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-Predictor", required = True, help = "เส้นทางตัวทำนายจุดสังเกตบนใบหน้า") args = vars (ap.parse_args ())
ในบรรทัดถัดไปให้เริ่มต้นเครื่องตรวจจับใบหน้าที่ผ่านการฝึกอบรมของ dlib จาก HOG และโหลดตัวทำนายจุดสังเกตใบหน้าที่ได้รับการฝึกฝนมาก่อน
เครื่องตรวจจับ = dlib.get_frontal_face_detector () ตัวทำนาย = dlib.shape_predictor (args)
จากนั้นใช้ฟังก์ชันcapture_continuousเพื่อเริ่มจับภาพเฟรมจากกล้อง Raspberry Pi
สำหรับเฟรมใน camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
ใช้แป้นคีย์บอร์ด "S" เพื่อจับภาพเฟรมใดเฟรมหนึ่ง จากนั้นปรับขนาดภาพที่ถ่ายแล้วแปลงเป็นสีเทา
if key == ord ("s"): image = imutils.resize (image, width = 400) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
ใช้ฟังก์ชันตัวตรวจจับของไลบรารี dlib เพื่อตรวจจับใบหน้าในภาพที่ถ่าย
rects = เครื่องตรวจจับ (สีเทา 1)
ถ่ายภาพซึ่งทำการตรวจจับใบหน้ากำหนดจุดสังเกตบนใบหน้าและแปลงจุด 68 เป็นอาร์เรย์ NumPy วนรอบบริเวณใบหน้าแต่ละส่วนทีละส่วน
สำหรับ (i, rect) ในการแจงนับ (rects): shape = ตัวทำนาย (สีเทา, rect) shape = face_utils.shape_to_np (รูปร่าง)
จากนั้นถ่ายสำเนาของรูปภาพต้นฉบับและใช้ สำหรับ การวนซ้ำเพื่อวาดชื่อของส่วนใบหน้าบนรูปภาพ สีข้อความจะเป็นสีแดงคุณสามารถเปลี่ยนเป็นสีอื่นได้โดยเปลี่ยนค่า RGB
สำหรับ (ชื่อ (i, j)) ใน face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (โคลน, ชื่อ (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
ตอนนี้เราจะวนรอบส่วนใบหน้าที่ตรวจพบและใช้ฟังก์ชันการวาด OpenCV เพื่อวาดวงกลมบนส่วนใบหน้าเหล่านี้ คุณสามารถติดตามเอกสาร OpenCV นี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันการวาดภาพ
สำหรับ (x, y) ในรูปทรง: cv2.circle (โคลน, (x, y), 1, (0, 0, 255), -1)
ตอนนี้ในบรรทัดถัดไปเราจะแยกส่วนของใบหน้าแต่ละส่วนออกเป็นภาพแยกกันโดยการคำนวณกรอบขอบเขตของพิกัดของส่วนใบหน้าที่เฉพาะเจาะจง ภาพที่แยกออกมาจะถูกปรับขนาดเป็น 250 พิกเซล
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
ตอนนี้ในบรรทัดสุดท้ายของรหัสแสดงส่วนใบหน้าพร้อมชื่อและภาพแยกของส่วนนั้น ใช้แป้น ESC เพื่อเปลี่ยนขอบเขตใบหน้า
cv2.imshow ("ROI", roi) cv2.imshow ("รูปภาพ", โคลน) cv2.waitKey (0)
การทดสอบ Face Part Recognizer
ในการทดสอบโปรเจ็กต์ให้สร้างไดเร็กทอรีและไปที่ไดเร็กทอรีโดยใช้คำสั่งด้านล่าง:
mkdir face-part-detector cd face-part-detector
ตอนนี้ดาวน์โหลดไฟล์ shape_predictor_68_face_landmarks.dat จากลิงค์นี้จากนั้นแยกและคัดลอกไฟล์shape_predictor_68_face_landmarks.datภายในไลบรารีนี้จากนั้นเปิดไฟล์ใหม่ชื่อdetect.pyและวางโค้ดที่ระบุด้านล่าง
ตอนนี้เปิดรหัส python โดยใช้คำสั่งด้านล่าง:
python3 detect.py --shape-Predictor shape_predictor_68_face_landmarks.dat
คุณจะเห็นหน้าต่างแสดงมุมมองสดจากกล้องของคุณ จากนั้นกดปุ่ม "S" เพื่อเลือกเฟรมจากสตรีมสด คุณจะเห็นจุดสีแดงที่บริเวณปากของคุณ ใช้ปุ่ม ESC เพื่อดูใบหน้าส่วนอื่น ๆ
รหัสหลามที่สมบูรณ์และวิดีโอสาธิตการใช้งานมีให้ด้านล่าง