- Thành phần bắt buộc
- Cài đặt OpenCV trong Raspberry Pi
- Cách phát hiện các bộ phận trên khuôn mặt bằng dlib
- Lập trình Raspberry Pi để phát hiện mốc trên khuôn mặt
- Kiểm tra công cụ nhận dạng bộ phận khuôn mặt
Phát hiện các điểm mốc trên khuôn mặt là quá trình phát hiện các bộ phận khác nhau trên khuôn mặt như Lông mày, Mắt, Mũi, Miệng và Hàm. Có rất nhiều ứng dụng sử dụng kỹ thuật phát hiện Dấu vết trên khuôn mặt.
Trước đây chúng tôi xây dựng hệ thống nhận dạng khuôn mặt bằng OpenCV, hôm nay chúng tôi sẽ sử dụng cùng một OpenCV với Raspberry Pi để phát hiện mốc khuôn mặt. Một mô-đun phát hiện mốc khuôn mặt được đào tạo trước từ thư viện dlib sẽ được sử dụng để phát hiện vị trí của các cấu trúc khuôn mặt chính trên khuôn mặt và python OpenCV sẽ được sử dụng để trực quan hóa các bộ phận được phát hiện trên khuôn mặt.
Thành phần bắt buộc
Các thành phần phần cứng
- Raspberry Pi 3
- Mô-đun máy ảnh Pi
Phần mềm và Dịch vụ Trực tuyến
- OpenCV
- Dlib
- Python3
Trước khi tiếp tục với Raspberry Pi 3 Facial Landmark Detection này , trước tiên, chúng ta cần cài đặt OpenCV, imutils, dlib, Numpy và một số phụ thuộc khác trong dự án này. OpenCV được sử dụng ở đây để xử lý hình ảnh kỹ thuật số. Các ứng dụng phổ biến nhất của Xử lý hình ảnh kỹ thuật số là phát hiện đối tượng, Nhận dạng khuôn mặt và bộ đếm người.
Để tìm hiểu thêm về cách giao diện camera Pi với Raspberry Pi, hãy làm theo các hướng dẫn trước đây của chúng tôi.
Cài đặt OpenCV trong Raspberry Pi
Ở đây thư viện OpenCV sẽ được sử dụng cho máy quét QR Raspberry Pi. Để cài đặt OpenCV, trước tiên, hãy cập nhật Raspberry Pi.
sudo apt-get cập nhật
Sau đó, cài đặt các phụ thuộc cần thiết để cài đặt OpenCV trên Raspberry Pi của bạn.
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 –Y sudo apt-get install libqt4-test –y
Sau đó, cài đặt OpenCV trong Raspberry Pi bằng lệnh dưới đây.
pip3 cài đặt opencv-Contrib-python == 4.1.0.25
Trước đây chúng tôi đã sử dụng OpenCV với Raspberry pi và đã tạo rất nhiều hướng dẫn về nó.
- Cài đặt OpenCV trên Raspberry Pi bằng CMake
- Nhận dạng khuôn mặt thời gian thực với Raspberry Pi và OpenCV
- Nhận dạng biển số bằng Raspberry Pi và OpenCV
- Ước tính quy mô đám đông bằng OpenCV và Raspberry Pi
Chúng tôi cũng đã tạo một loạt các hướng dẫn OpenCV bắt đầu từ cấp độ người mới bắt đầu.
Cài đặt imutils : imutils được sử dụng để thực thi một số chức năng xử lý hình ảnh cần thiết như dịch, xoay, thay đổi kích thước, tạo khung và hiển thị hình ảnh Matplotlib dễ dàng hơn với OpenCV. Vì vậy, cài đặt imutils bằng lệnh dưới đây:
pip3 cài đặt imutils
Cài đặt dlib: dlib là bộ công cụ hiện đại chứa các thuật toán và công cụ Máy học cho các vấn đề trong thế giới thực. Sử dụng lệnh dưới đây để cài đặt dlib.
pip3 cài đặt dlib
Cài đặt NumPy : NumPy là thư viện cốt lõi cho tính toán khoa học chứa đối tượng mảng n-chiều mạnh mẽ, cung cấp các công cụ để tích hợp C, C ++, v.v.
Pip3 cài đặt numpy
Cách phát hiện các bộ phận trên khuôn mặt bằng dlib
Chúng tôi sẽ sử dụng máy dò mốc trên khuôn mặt được đào tạo trước của thư viện dlib để phát hiện vị trí của tọa độ 68 (x, y) ánh xạ đến các cấu trúc trên khuôn mặt. dự đoán mốc trên khuôn mặt dlib được đào tạo trên bộ dữ liệu iBUG 300-W. Hình ảnh chứa các chỉ số của 68 tọa độ được đưa ra dưới đây:
Lập trình Raspberry Pi để phát hiện mốc trên khuôn mặt
Toàn bộ mã python cho Nhận dạng các bộ phận trên khuôn mặt bằng công cụ phát hiện mốc khuôn mặt được đào tạo trước của dlib được cung cấp ở cuối trang. Ở đây chúng tôi giải thích một số phần quan trọng của mã để hiểu rõ hơn.
Vì vậy, như thường lệ, hãy bắt đầu mã bằng cách bao gồm tất cả các thư viện được yêu cầu.
from imutils import face_utils import numpy as np import argparse import imutils import dlib import cv2 from picamera.array import PiRGBArray from picamera import PiCamera
Sau đó khởi tạo đối tượng máy ảnh và đặt độ phân giải ở (640, 480) và tốc độ khung hình ở 30 khung hình / giây
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Bây giờ trong các dòng tiếp theo, hãy sử dụng trình phân tích cú pháp đối số để cung cấp đường dẫn đến công cụ dự đoán mốc khuôn mặt.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-Predctor", Required = True, help = "đường dẫn dự báo mốc khuôn mặt") args = vars (ap.parse_args ())
Trong các dòng tiếp theo, khởi chạy bộ dò tìm khuôn mặt được đào tạo trước của HOG dựa trên HOG và tải bộ dự đoán mốc khuôn mặt đã được đào tạo trước.
detector = dlib.get_frontal_face_detector () Predctor = dlib.shape_predictor (args)
Sau đó, sử dụng chức năng capture_continuous để bắt đầu chụp các khung hình từ máy ảnh Raspberry Pi.
cho khung trong 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ử dụng phím bàn phím 'S' để chụp một khung hình cụ thể. Sau đó, thay đổi kích thước hình ảnh đã chụp và chuyển nó sang thang độ xám.
if key == ord ("s"): image = imutils.resize (image, width = 400) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Sử dụng chức năng dò của thư viện dlib để phát hiện các khuôn mặt trong ảnh đã chụp.
rects = detector (xám, 1)
Chụp ảnh nơi phát hiện khuôn mặt được thực hiện, xác định các điểm mốc trên khuôn mặt và chuyển 68 điểm thành mảng NumPy. Lặp lại từng vùng khuôn mặt riêng lẻ.
for (i, direct) trong liệt kê (rects): shape = Predctor (xám, trực tràng) shape = face_utils.shape_to_np (shape)
Sau đó, lấy một bản sao của hình ảnh gốc và sử dụng nó cho vòng lặp để vẽ tên của phần khuôn mặt trên hình ảnh. Màu văn bản sẽ là màu đỏ, bạn có thể thay đổi nó thành màu khác bằng cách thay đổi các giá trị RGB.
for (name, (i, j)) in face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Bây giờ chúng ta sẽ lặp qua các bộ phận khuôn mặt được phát hiện và sử dụng chức năng vẽ OpenCV để vẽ các vòng tròn trên các bộ phận khuôn mặt này. Bạn có thể theo dõi Tài liệu OpenCV này để biết thêm thông tin về các chức năng Vẽ
for (x, y) in shape: cv2.circle (clone, (x, y), 1, (0, 0, 255), -1)
Bây giờ trong các dòng tiếp theo, chúng ta sẽ trích xuất từng phần khuôn mặt thành một hình ảnh riêng biệt bằng cách tính toán hộp giới hạn tọa độ của một phần khuôn mặt cụ thể. Hình ảnh trích xuất sẽ được thay đổi kích thước thành 250 pixel.
(x, y, w, h) = cv2.bidingRect (np.array (])) roi = image roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Bây giờ trong những dòng cuối cùng của mã, hãy hiển thị các bộ phận trên khuôn mặt với tên của chúng và một hình ảnh riêng biệt của bộ phận đó. Sử dụng phím ESC để thay đổi vùng khuôn mặt.
cv2.imshow ("ROI", roi) cv2.imshow ("Hình ảnh", bản sao) cv2.waitKey (0)
Kiểm tra công cụ nhận dạng bộ phận khuôn mặt
Để kiểm tra dự án, hãy tạo một thư mục và điều hướng đến nó bằng các lệnh dưới đây:
mkdir face-part-detector cd face-part-detector
Bây giờ, hãy tải xuống tệp shape_predictor_68_face_landmarks.dat từ liên kết này, sau đó giải nén và sao chép tệp shape_predictor_68_face_landmarks.dat bên trong thư viện này, sau đó mở tệp mới có tên là detector.py và dán mã được cung cấp bên dưới.
Bây giờ khởi chạy mã python bằng lệnh dưới đây:
python3 explore.py --shape-Predctor shape_predictor_68_face_landmarks.dat
Bạn sẽ thấy một cửa sổ hiển thị chế độ xem trực tiếp từ máy ảnh của mình. Sau đó nhấn phím 'S' để chọn khung hình từ luồng trực tiếp. Bạn sẽ thấy các chấm đỏ trên vùng miệng của mình. Sử dụng phím ESC để xem các bộ phận khác trên khuôn mặt.
Toàn bộ mã python và video trình diễn được đưa ra bên dưới.