산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

실시간 얼굴 인식:종단 간 프로젝트

PiCam을 사용하여 실시간으로 얼굴을 인식하는 방법을 단계별로 배울 것입니다. OpenCV를 탐색하는 마지막 자습서에서 자동 비전 개체 추적을 배웠습니다.

이제 PiCam을 사용하여 아래에서 볼 수 있는 것처럼 실시간으로 얼굴을 인식합니다.

이 프로젝트는 이 환상적인 "오픈 소스 컴퓨터 비전 라이브러리"인 OpenCV로 완료되었습니다. 이 튜토리얼에서는 Raspberry Pi(OS로서의 Raspbian)와 Python에 중점을 둘 것이지만 My Mac에서도 코드를 테스트했으며 제대로 작동합니다. OpenCV는 계산 효율성과 실시간 애플리케이션에 중점을 두고 설계되었습니다. 따라서 카메라를 사용한 실시간 얼굴 인식에 적합합니다.

3단계

얼굴 인식에 대한 완전한 프로젝트를 생성하려면 다음 3가지 매우 뚜렷한 단계를 수행해야 합니다.

아래 블록 다이어그램은 이러한 단계를 재개합니다.

1단계:BoM – 재료 명세서

주요 부분:

2단계:OpenCV 3 패키지 설치

최신 버전의 Raspbian(Stretch)으로 업데이트된 Raspberry Pi V3를 사용하고 있으므로 OpenCV를 설치하는 가장 좋은 방법은 Adrian Rosebrock이 개발한 우수한 자습서를 따르는 것입니다. Raspbian Stretch:Install Raspberry Pi의 OpenCV 3 + Python.

파이에 OpenCV를 설치하기 위해 몇 가지 다른 가이드를 시도했습니다. Adrian의 튜토리얼이 최고입니다. 그의 지침에 따라 단계별로 동일한 작업을 수행하는 것이 좋습니다.

Adrian의 튜토리얼을 마치면 Pi에서 실험을 실행할 수 있는 OpenCV 가상 환경이 준비되어 있어야 합니다.

가상 환경으로 이동하여 OpenCV 3가 올바르게 설치되었는지 확인합니다.

Adrian은 시스템 변수가 올바르게 설정되었는지 확인하기 위해 새 터미널을 열 때마다 "source" 명령을 실행할 것을 권장합니다.

소스 ~/.프로필

다음으로 가상 환경으로 들어가 보겠습니다.

워크온 이력서

프롬프트 앞에 텍스트(cv)가 표시되면 cv 가상에 있는 것입니다. 환경:

(cv) pi@raspberry:~$

Adrian은 cv Python 가상 환경 Raspbian Stretch 다운로드에 포함된 기본 Python 버전과 완전히 독립적이며 격리되어 있습니다. 따라서 전역 site-packages 디렉토리의 Python 패키지는 cv 가상 환경에서 사용할 수 없습니다. 마찬가지로, cv의 site-packages에 설치된 Python 패키지는 Python의 전역 설치에서 사용할 수 없습니다.

이제 Python 인터프리터를 입력합니다.

파이썬

3.5(또는 그 이상) 버전을 실행 중인지 확인하십시오.

인터프리터 내부(">>>" 표시)에서 OpenCV 라이브러리를 가져옵니다.

cv2 가져오기

오류 메시지가 표시되지 않으면 OpenCV가 PYTHON 가상 환경에 올바르게 설치된 것입니다.

설치된 OpenCV 버전도 확인할 수 있습니다.

cv2.__버전__

3.3.0(또는 향후 출시될 수 있는 상위 버전)이 나타나야 합니다.

위의 터미널 PrintScreen은 이전 단계를 보여줍니다.

3단계:카메라 테스트

RPi에 OpenCV를 설치했으면 카메라가 제대로 작동하는지 테스트해 보겠습니다.

Raspberry Pi에 PiCam이 이미 설치되어 있다고 가정합니다.

Adrian의 튜토리얼을 실행할 때 카메라를 활성화해야 합니다. 그렇지 않으면 드라이버가 올바르게 설치되지 않습니다.

OpenCV 오류:어설션 실패와 같은 오류가 발생하는 경우 , 다음 명령을 사용하여 문제를 해결할 수 있습니다.

sudo 모드 프로브 bcm2835-v4l2

모든 드라이버를 올바르게 설치했으면 IDE에 아래 Python 코드를 입력하세요.

numpy를 np로 가져오기
cv2 가져오기
cap =cv2.VideoCapture(0)
cap.set(3,640) # 너비 설정
cap.set(4,480) # 높이 설정
while(True):
ret, frame =cap.read()
frame =cv2.flip(frame, -1) # 카메라를 세로로 뒤집습니다.
gray =cv2.cvtColor(frame , cv2.COLOR_BGR2GRAY)

cv2.imshow('프레임', 프레임)
cv2.imshow('회색', 회색)

k =cv2.waitKey(30) &0xff
if k ==27:# 종료하려면 'ESC'를 누르세요.
break
cap.release()
cv2.destroyAllWindows()

위 코드는 PiCam에서 생성할 비디오 스트림을 캡처하여 BGR 색상과 회색 모드로 모두 표시합니다.

카메라가 조립되는 방식 때문에 수직으로 회전했습니다. 귀하의 경우가 아니라면 "뒤집기" 명령줄에 댓글을 달거나 삭제하십시오.

또는 내 GitHub에서 코드를 다운로드할 수 있습니다. simpleCamTest.py

실행하려면 다음 명령을 입력하십시오.

파이썬 simpleCamTest.py

프로그램을 종료하려면 키보드에서 [ESC] 키를 눌러야 합니다. [ESC]를 누르기 전에 비디오 창에서 마우스를 클릭하십시오.

위 그림은 결과를 보여줍니다.

일부 제조사는 카메라를 열려고 할 때 문제를 발견했습니다("어설션 실패" 오류 메시지). OpenCv 설치 중에 카메라가 활성화되지 않아 카메라 드라이버가 올바르게 설치되지 않은 경우에 발생할 수 있습니다. 수정하려면 다음 명령을 사용하십시오.

sudo 모드 프로브 bcm2835-v4l2

/etc/modules 파일의 마지막 줄에 bcm2835-v4l2를 추가하여 부팅 시 드라이버가 로드되도록 할 수도 있습니다.

OpenCV에 대해 자세히 알아보려면 다음 가이드를 따르세요. -video-python-opencv-tutorial 로드 중

4단계:얼굴 인식

Face Recognition의 가장 기본적인 작업은 물론 "Face Detecting"입니다. 무엇보다 먼저 얼굴을 인식하려면 얼굴을 "캡처"해야 합니다(1단계). 미래에 캡처된 새 얼굴(3단계)과 비교할 때.

얼굴(또는 모든 물체)을 감지하는 가장 일반적인 방법은 "Haar Cascade 분류기"를 사용하는 것입니다.

Haar 기능 기반 캐스케이드 분류기를 사용한 객체 감지는 2001년 Paul Viola와 Michael Jones가 "단순 기능의 Boosted Cascade를 사용한 신속한 객체 감지" 논문에서 제안한 효과적인 객체 감지 방법입니다. 캐스케이드 기능이 많은 긍정적이고 부정적인 이미지에서 훈련되는 기계 학습 기반 접근 방식입니다. 그런 다음 다른 이미지에서 개체를 감지하는 데 사용됩니다.

여기에서는 얼굴 감지를 사용합니다. 초기에 알고리즘은 분류기를 훈련시키기 위해 많은 양의 이미지(얼굴 이미지)와 부정적인 이미지(얼굴이 없는 이미지)가 필요합니다. 그런 다음 여기에서 특징을 추출해야 합니다. 좋은 소식은 OpenCV가 탐지기와 함께 트레이너와 함께 제공된다는 것입니다. 자동차, 비행기 등과 같은 객체에 대해 자신의 분류기를 훈련시키려면 OpenCV를 사용하여 생성할 수 있습니다. 자세한 내용은 다음에서 확인할 수 있습니다. Cascade Classifier Training.

자신만의 분류기를 만들고 싶지 않다면 OpenCV에 이미 얼굴, 눈, 미소 등에 대한 사전 훈련된 분류기가 많이 포함되어 있습니다. 이러한 XML 파일은 haarcascades 디렉터리에서 다운로드할 수 있습니다.

이론은 충분합니다. OpenCV로 얼굴 감지기를 만들어 봅시다!

내 GitHub에서 faceDetection.py 파일을 다운로드합니다.

numpy를 np로 가져오기
cv2 가져오기
faceCascade =cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap =cv2.VideoCapture(0)
cap.set(3,640) # 너비 설정
cap.set(4,480) # 높이 설정
while True:
ret, img =cap.read()
img =cv2.flip(img, –1 )
회색 =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
면 =faceCascade.detectMultiScale(
회색,
scaleFactor=1.2,
minNeighbors=5,
minSize=(20, 20)
)
면의 (x,y,w,h):
cv2.rectangle(img,(x,y),(x) +w,y+h),(255,0,0),2)
roi_gray =회색[y:y+h, x:x+w]
roi_color =img[y:y+ h, x:x+w]
cv2.imshow('video',img)
k =cv2.waitKey(30) &0xff
k ==27인 경우:# 'ESC를 누릅니다. ' 종료
중단
cap.release()
cv2.destroyAllWindows()

믿거나 말거나 위의 몇 줄의 코드만 있으면 Python과 OpenCV를 사용하여 얼굴을 감지할 수 있습니다.

카메라 테스트에 사용된 마지막 코드와 비교할 때 추가된 부분이 거의 없음을 알 수 있습니다. 아래 줄에 유의하세요.

faceCascade =cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')

이것은 "분류기"를 로드하는 라인입니다(프로젝트 디렉토리 아래의 "Cascades/"라는 디렉토리에 있어야 함).

그런 다음 카메라를 설정하고 루프 내부에서 입력 비디오를 그레이스케일 모드로 로드합니다(이전에 본 것과 동일).

이제 우리는 분류기 함수를 호출해야 하며, 스케일 팩터, 이웃 수 및 감지된 얼굴의 최소 크기와 같은 몇 가지 매우 중요한 매개변수를 전달해야 합니다.

얼굴 =faceCascade.detectMultiScale(
회색,
scaleFactor=1.2,
minNeighbors=5,
minSize=(20, 20)
)

어디,

이 함수는 이미지에서 얼굴을 감지합니다. 다음으로 예를 들어 파란색 직사각형을 사용하여 이미지의 얼굴을 "표시"해야 합니다. 이것은 코드의 이 부분으로 수행됩니다.

면의 (x,y,w,h):
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray =회색[y:y+h, x:x+w]
roi_color =img[y:y+h, x:x+w]

얼굴이 발견되면 감지된 얼굴의 위치를 ​​왼쪽 위 모서리(x,y)가 있는 직사각형으로 반환하고 너비가 "w"이고 높이가 "h"인 경우 ==> (x,y,w,h). 사진을 봐주세요.

이러한 위치를 가져오면 얼굴에 대한 'ROI'(그린 직사각형)를 만들고 결과를 imshow()로 표시할 수 있습니다. 기능.

Rpi 터미널을 사용하여 Python 환경에서 위의 Python 스크립트를 실행합니다.

파이썬 faceDetection.py

결과:

"눈 감지" 또는 "미소 감지"를 위한 분류자를 포함할 수도 있습니다. 이러한 경우 얼굴 루프 내부에 분류기 기능과 사각형 그리기를 포함하게 됩니다. 얼굴 외부에서 눈이나 미소를 감지하는 것은 의미가 없기 때문입니다.

Pi에서 동일한 코드에 여러 분류기를 사용하면 이 탐지 방법(HaarCascades)이 엄청난 양의 계산 능력을 사용하면 처리 속도가 느려집니다. 데스크탑에서 실행하는 것이 더 쉽습니다.

내 GitHub에서 다른 예를 찾을 수 있습니다.

그리고 사진에서 결과를 볼 수 있습니다.

아래 자습서를 따라 얼굴 인식을 더 잘 이해할 수도 있습니다.

Haar Cascade 개체 감지 얼굴 및 눈 OpenCV Python 자습서

5단계:데이터 수집

우선 사진의 얼굴 인식에 대한 훌륭한 작업에 대해 Ramiz Raja에게 감사드립니다.

OPENCV 및 PYTHON을 사용한 얼굴 인식:초보자 가이드

또한 동영상을 사용하여 매우 포괄적인 자습서를 개발한 Anirban Kar:

얼굴 인식 – 3개 부분

두 튜토리얼을 모두 살펴보시기 바랍니다.

그렇다면 프로젝트의 첫 번째 단계를 시작하겠습니다. 여기서 우리가 할 일은 마지막 단계(Face Detecting)부터 시작하여 각 id에 대해 얼굴 감지에 사용된 부분과 함께 회색으로 된 사진 그룹을 저장할 데이터 세트를 간단하게 생성할 것입니다.

먼저, FacialRecognitionProject와 같이 프로젝트를 개발할 디렉토리를 만듭니다.

mkdir 안면인식프로젝트

이 디렉토리에는 프로젝트를 위해 생성할 3개의 python 스크립트 외에 얼굴 분류기(Facial Classifier)가 저장되어 있어야 합니다. 내 GitHub:haarcascade_frontalface_default.xml

에서 다운로드할 수 있습니다.

다음으로 얼굴 샘플을 저장할 하위 디렉토리를 만들고 이름을 "dataset"로 지정합니다.

mkdir 데이터 세트

그리고 내 GitHub에서 코드 다운로드:01_face_dataset.py

import cv2
import os
cam =cv2.VideoCapture(0)
cam.set(3, 640) # 비디오 너비 설정
cam.set(4, 480) # 설정 비디오 높이
face_detector =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 각 사람에 대해 하나의 숫자 얼굴 ID를 입력하십시오.
face_id =input('\n 사용자 ID 입력 end press ==> ')
print(“\n [INFO] 얼굴 캡처 초기화 중입니다. 카메라를 보고 기다리세요...”)
# 개별 샘플링 얼굴 카운트 초기화
count =0
while(True):
ret, img =cam.read()
img =cv2.flip(img, -1) # 비디오 이미지를 세로로 뒤집습니다.
gray =cv2.cvtColor(img , cv2.COLOR_BGR2GRAY)
faces =face_detector.detectMultiScale(gray, 1.3, 5)
얼굴의 (x,y,w,h):
cv2.rectangle(img, (x) ,y), (x+w,y+h), (255,0,0), 2)
count +=1
# 캡쳐된 이미지를 데이터셋 폴더에 저장
cv2 .imwrite("데이터 세트/사용자." + str(face_id) + '.' + str(count) + ".jpg", 회색[y:y+h,x:x+w])
cv2. imshow('이미지', img)
k =cv2.waitKey(100) &0x ff # 동영상을 종료하려면 'ESC'를 누르세요.
if k ==27:
break
elif count>=30:# 30개의 얼굴 샘플을 가져오고 동영상을 중지합니다.
break
# 약간의 정리 작업을 수행합니다.
print(“\n [INFO] 프로그램 종료 및 정리 작업”)
cam.release()
cv2.destroyAllWindows()

코드는 얼굴 감지에서 본 코드와 매우 유사합니다. 우리가 추가한 것은 정수(1, 2, 3 등)여야 하는 사용자 ID를 캡처하는 "입력 명령"이었습니다.

face_id =input('\n 사용자 아이디 입력 end press ==> ')

캡처된 각 프레임에 대해 "dataset" 디렉토리에 파일로 저장해야 합니다.

cv2.imwrite("데이터 세트/사용자." + str(face_id) + '.' + str(count) + ".jpg", 회색[y:y+h,x:x+w])

위의 파일을 저장하려면 "os" 라이브러리를 가져와야 합니다. 각 파일의 이름은 다음 구조를 따릅니다.

User.face_id.count.jpg

예를 들어, face_id =1인 사용자의 경우 dataset/ 디렉토리의 4번째 샘플 파일은 다음과 같습니다.

User.1.4.jpg

내 Pi의 사진에 표시된 대로:

내 코드에서 각 ID에서 30개의 샘플을 캡처하고 있습니다. 마지막 "elif"에서 변경할 수 있습니다. 샘플 수는 얼굴 샘플이 캡처되는 루프를 깨는 데 사용됩니다.

Python 스크립트를 실행하고 몇 개의 ID를 캡처합니다. 새 사용자를 집계할 때마다(또는 이미 존재하는 사용자의 사진을 변경하려면) 스크립트를 실행해야 합니다.

6단계:트레이너

이 두 번째 단계에서는 데이터 세트와 OpenCV Recognizer "트레이너"에서 모든 사용자 데이터를 가져와야 합니다. 이것은 특정 OpenCV 기능에 의해 직접 수행됩니다. 결과는 "trainer/" 디렉토리에 저장되는 .yml 파일이 됩니다.

자세히 보기:실시간 얼굴 인식:종단 간 프로젝트


제조공정

  1. 파이썬 연산자
  2. 파이썬 목록
  3. 파이썬 사전
  4. 매트릭스 음성 구글 어시스턴트 – 매트릭스 음성 프로젝트
  5. 말하다
  6. Windows IoT:얼굴 인식 도어
  7. 자동 비전 개체 추적
  8. PiCamera를 사용한 AI 숫자 인식
  9. Rover
  10. Windows IoT 기반 GoPiGo v2