- 필요한 구성 요소
- Raspberry Pi에 OpenCV 설치
- dlib를 사용하여 얼굴 부분을 감지하는 방법
- 얼굴 랜드 마크 감지를위한 Raspberry Pi 프로그래밍
- 얼굴 부분 인식기 테스트
얼굴 랜드 마크 감지는 눈썹, 눈, 코, 입, 턱 등 얼굴의 다양한 부분을 감지하는 과정입니다. 안면 랜드 마크 감지 기술을 사용하는 애플리케이션이 많이 있습니다.
이전에는 OpenCV를 사용하여 얼굴 인식 시스템을 구축했지만 오늘은 얼굴 랜드 마크 감지를 위해 Raspberry Pi와 동일한 OpenCV를 사용합니다. dlib 라이브러리의 사전 훈련 된 얼굴 랜드 마크 검출기 모듈은 얼굴의 주요 얼굴 구조의 위치를 감지하는 데 사용되며 python OpenCV는 감지 된 얼굴 부분을 시각화하는 데 사용됩니다.
필요한 구성 요소
하드웨어 구성 요소
- 라즈베리 파이 3
- Pi 카메라 모듈
소프트웨어 및 온라인 서비스
- OpenCV
- Dlib
- Python3
이 진행하기 전에 라즈베리 파이 3 얼굴 랜드 마크 감지 , 첫째, 우리는이 프로젝트에 OpenCV의, imutils, dlib, NumPy와, 그리고 몇몇 다른 종속성을 설치해야합니다. OpenCV는 여기에서 디지털 이미지 처리에 사용됩니다. 디지털 이미지 처리의 가장 일반적인 응용 분야는 물체 감지, 얼굴 인식 및 인원 계수기입니다.
Pi 카메라와 Raspberry Pi를 연결하는 방법에 대해 자세히 알아 보려면 이전 자습서를 따르십시오.
Raspberry Pi에 OpenCV 설치
여기에서 OpenCV 라이브러리는 Raspberry Pi QR 스캐너에 사용됩니다. OpenCV를 설치하려면 먼저 Raspberry Pi를 업데이트하십시오.
sudo apt-get 업데이트
그런 다음 Raspberry Pi에 OpenCV를 설치하는 데 필요한 종속성을 설치합니다.
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 설치 libqt4-test –y
그런 다음 아래 명령을 사용하여 Raspberry Pi에 OpenCV를 설치하십시오.
pip3 install opencv-contrib-python == 4.1.0.25
우리는 이전에 Raspberry pi와 함께 OpenCV를 사용했고 이에 대한 많은 튜토리얼을 만들었습니다.
- CMake를 사용하여 Raspberry Pi에 OpenCV 설치
- Raspberry Pi 및 OpenCV를 사용한 실시간 얼굴 인식
- Raspberry Pi 및 OpenCV를 사용한 번호판 인식
- OpenCV 및 Raspberry Pi를 사용한 군중 크기 추정
우리는 또한 초급 레벨부터 시작하는 일련의 OpenCV 튜토리얼을 만들었습니다.
imutils 설치: imutils는 OpenCV를 사용하여 번역, 회전, 크기 조정, 스켈레톤 화 및 Matplotlib 이미지 표시와 같은 몇 가지 필수 이미지 처리 기능을 실행하는 데 사용됩니다. 따라서 아래 명령을 사용하여 imutils 를 설치 하십시오 .
pip3 설치 imutils
dlib 설치: dlib 는 기계 학습 알고리즘과 실제 문제에 대한 도구를 포함하는 최신 툴킷입니다. 아래 명령을 사용하여 dlib를 설치하십시오.
pip3 dlib 설치
NumPy 설치: NumPy 는 강력한 n 차원 배열 객체를 포함하고 C, C ++ 등을 통합하는 도구를 제공하는 과학 컴퓨팅을위한 핵심 라이브러리입니다.
Pip3 설치 numpy
dlib를 사용하여 얼굴 부분을 감지하는 방법
dlib 라이브러리의 사전 훈련 된 얼굴 랜드 마크 감지기를 사용하여 얼굴의 얼굴 구조에 매핑되는 68 (x, y) 좌표의 위치를 감지 할 것입니다. dlib 얼굴 랜드 마크 예측기는 iBUG 300-W 데이터 세트에서 훈련되었습니다. 68 좌표의 인덱스를 포함하는 이미지는 다음과 같습니다.
얼굴 랜드 마크 감지를위한 Raspberry Pi 프로그래밍
dlib의 사전 훈련 된 얼굴 랜드 마크 감지기 로 얼굴 부분 인식을 위한 완전한 Python 코드 가 페이지 끝에 제공됩니다. 여기에서는 더 나은 이해를 위해 코드의 몇 가지 중요한 부분을 설명합니다.
따라서 평소와 같이 필요한 모든 라이브러리를 포함하여 코드를 시작합니다.
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
그런 다음 카메라 개체를 초기화하고 해상도를 (640, 480)으로 설정하고 프레임 속도를 30fps로 설정합니다.
카메라 = 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 ())
다음 줄에서 HOG 기반 dlib의 사전 훈련 된 얼굴 감지기를 초기화하고 사전 훈련 된 얼굴 랜드 마크 예측기를로드합니다.
detector = dlib.get_frontal_face_detector () predictor = 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 배열로 변환합니다. 각 얼굴 영역을 개별적으로 반복합니다.
for (i, rect) in enumerate (rects): shape = predictor (gray, rect) shape = face_utils.shape_to_np (shape)
그리고, 원본 이미지의 사본을 사용하고 그것을 화상의 얼굴 부분의 이름을 그리는 루프. 텍스트 색상은 빨간색이되며 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)
이제 감지 된 얼굴 부분을 반복하고 OpenCV 그리기 기능을 사용하여 이러한 얼굴 부분에 원을 그립니다. 그리기 기능에 대한 자세한 내용은이 OpenCV 문서를 따를 수 있습니다.
for (x, y) in shape: cv2.circle (clone, (x, y), 1, (0, 0, 255), -1)
이제 다음 줄에서는 특정 얼굴 부분의 좌표 경계 상자를 계산하여 각 얼굴 부분을 별도의 이미지로 추출합니다. 추출 된 이미지는 250 픽셀로 크기가 조정됩니다.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = 이미지 roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
이제 코드의 마지막 줄에 얼굴 부분을 이름과 해당 부분의 별도 이미지로 표시합니다. ESC 키를 사용하여 얼굴 영역을 변경합니다.
cv2.imshow ("ROI", roi) cv2.imshow ("이미지", 복제) cv2.waitKey (0)
얼굴 부분 인식기 테스트
프로젝트를 테스트하려면 디렉터리를 만들고 아래 명령을 사용하여 이동합니다.
mkdir 얼굴 부분 탐지기 cd 얼굴 부분 탐지기
이제이 링크에서 shape_predictor_68_face_landmarks.dat 파일을 다운로드 한 다음 이 라이브러리 에서 shape_predictor_68_face_landmarks.dat 파일 을 추출 및 복사 한 다음 detect.py 라는 새 파일을 열고 아래에 제공된 코드를 붙여 넣으십시오.
이제 아래 명령을 사용하여 파이썬 코드를 시작하십시오.
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
카메라의 라이브 뷰를 보여주는 창이 나타납니다. 그런 다음 'S'키를 눌러 라이브 스트림에서 프레임을 선택합니다. 입가에 빨간 점이 보일 것입니다. 다른 얼굴 부분을 보려면 ESC 키를 사용하십시오.
완전한 파이썬 코드와 데모 비디오 가 아래에 나와 있습니다.