Python의 얼굴 감지 프로젝트 [간단한 5단계]

게시 됨: 2020-09-01

물체 식별 및 얼굴 감지는 아마도 컴퓨터 비전의 가장 널리 사용되는 응용 프로그램일 것입니다. 이 기술은 보안 및 소셜 미디어와 같은 다양한 산업 분야에서 응용 프로그램을 찾습니다. 그래서 우리는 Python을 통해 얼굴 감지 프로젝트를 구축하고 있습니다.

Python, OpenCV 및 NumPy 프로그래밍에 익숙해야 합니다. 이 프로젝트에서 작업하는 동안 혼동되지 않도록 합니다. 시작하자.

얼굴 인식을 수행하는 두 가지 방법을 공유했습니다. 첫 번째는 Python의 얼굴 인식 라이브러리를 사용하고 다른 하나는 OpenCV 및 NumPy를 사용합니다. 자세한 내용은 데이터 과학 프로그램을 확인하십시오.

목차

파이썬의 '얼굴 인식'으로 얼굴 인식

아마도 얼굴을 감지하는 가장 쉬운 방법은 Python에서 얼굴 인식 라이브러리 를 사용하는 것 입니다. LFW 데이터베이스에서 99.38%의 정확도를 보였습니다. 그것을 사용하는 것은 아주 간단하고 많은 노력이 필요하지 않습니다. 또한 라이브러리에는 이미지에서 얼굴을 식별하기 위한 전용 'face_recognition' 명령이 있습니다.

얼굴 인식 사용 방법

'face_locations' 명령을 사용하여 이미지에서 얼굴을 구별할 수 있습니다.

얼굴 인식 가져오기

이미지 = face_recognition.load_image_file(“your_file.jpg”)

face_locations = face_recognition.face_locations(이미지)

또한 얼굴을 인식하고 이름과 연결할 수 있습니다.

얼굴 인식 가져오기

알려진_이미지 = face_recognition.load_image_file("modi.jpg")

unknown_image = face_recognition.load_image_file("unknown.jpg")

modi_encoding = face_recognition.face_encodings(known_image)[0]

unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

결과 = face_recognition.compare_faces([modi_encoding], unknown_encoding)

사진에는 ​​"나렌드라 모디"가 포함되어 있습니다.

이 라이브러리를 다른 라이브러리와 결합하여 수행할 수 있는 다른 많은 작업이 있습니다. 이제 Python의 다른 저명한 라이브러리, 특히 OpenCV 및 NumPy를 사용하여 얼굴 인식을 수행하는 방법에 대해 논의할 것입니다.

더 읽어보기: Python NumPy 튜토리얼: 예제를 통해 Python Numpy 배우기

Python의 얼굴 감지 프로젝트

이 프로젝트에서는 OpenCV와 NumPy를 사용하여 얼굴 인식 및 인식을 수행했습니다. 우리는 Raspberry Pi를 사용했지만 다른 시스템에서도 사용할 수 있습니다. 다른 장치(예: Mac 또는 Windows PC)에서 사용하려면 코드를 약간만 수정하면 됩니다.

이 프로젝트에 대한 일부 크레딧은 Marcelo Rovai 에게 돌아갑니다 .

1단계: 라이브러리 설치

먼저 필요한 라이브러리인 OpenCV 및 NumPy를 설치해야 합니다. 다음을 통해 쉽게 설치할 수 있습니다.

pip install opencv-python

pip install opencv-contrib-python

시스템에 NumPy를 설치하려면 위와 동일한 명령을 사용하고 'opencv-python'을 'numpy'로 바꿉니다.

핍 설치 numpy

2단계: 얼굴 감지

이제 카메라를 구성하고 시스템에 연결해야 합니다. 얼굴 인식 문제를 방지하려면 카메라가 제대로 작동해야 합니다.

카메라가 우리를 인식하기 전에 먼저 얼굴을 감지해야 합니다. 우리는 얼굴 감지를 위해 Haar Cascade 분류기를 사용할 것입니다. 주로 네거티브 및 포지티브 이미지를 통해 계단식 기능을 훈련시킨 후 다른 사진에서 물체를 감지할 수 있게 되는 물체 감지 방법입니다.

우리의 경우 모델이 얼굴을 감지하기를 원합니다. OpenCV에는 트레이너와 탐지기가 함께 제공되므로 Haar Cascade 분류기를 사용하는 것이 이 라이브러리에 상대적으로 더 편안합니다. 분류기를 생성하여 다른 이미지도 감지할 수 있습니다.

코드는 다음과 같습니다.

numpy를 np로 가져오기

수입 cv2

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

캡 = cv2.VideoCapture(0)

cap.set(3,640) # 너비 설정

cap.set(4,480) # 높이 설정

참인 동안:

ret, img = cap.read()

img = cv2.flip(img, -1)

회색 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

얼굴 = faceCascade.detectMultiScale(

회색,

스케일 팩터=1.2,

minNeighbors=5,

최소 크기=(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('비디오', img)

k = cv2.waitKey(30) & 0xff

if k == 27: # 종료하려면 'ESC'를 누릅니다.

부서지다

cap.release()

cv2.destroyAllWindows()

3단계: 데이터 수집

이제 모델이 얼굴을 식별할 수 있으므로 사진에 있는 얼굴을 인식하기 시작하도록 모델을 훈련할 수 있습니다. 그렇게 하려면 기억하고 싶은 얼굴의 여러 장의 사진을 제공해야 합니다.

그렇기 때문에 사진을 수집하여 데이터 세트를 만드는 것부터 시작하겠습니다. 필요한 이미지를 수집한 후 모든 사람의 ID를 추가하여 모델이 어떤 얼굴을 어떤 ID와 연결할지 알 수 있도록 합니다. 한 사람의 이미지로 시작하여 최소 10-20장을 추가하십시오. 가장 효과적인 결과를 얻으려면 다양한 표현을 사용하십시오.

이미지에 사용자 ID를 추가하는 스크립트를 생성하면 매번 수동으로 수행할 필요가 없습니다. 여러 면에 모델을 사용하려는 경우 스크립트가 중요합니다.

세계 최고의 대학에서 기계 학습 과정배우십시오 . 석사, 이그 제 큐 티브 PGP 또는 고급 인증 프로그램을 획득하여 경력을 빠르게 추적하십시오.

4단계: 훈련

사람의 이미지 데이터 세트를 만든 후에는 모델을 훈련시켜야 합니다. OpenCV 인식기에 사진을 공급하면 결국 'trainer.yml'이라는 파일이 생성됩니다.

이 단계에서는 모델이 모든 이미지의 ID에 익숙해질 수 있도록 이미지와 해당 ID만 제공하면 됩니다. 모델 훈련이 끝나면 테스트할 수 있습니다.

코드는 다음과 같습니다.

수입 cv2

numpy를 np로 가져오기

PIL 가져오기 이미지에서

수입 OS

# 얼굴 이미지 데이터베이스 경로

경로 = '데이터 세트'

인식기 = cv2.face.LBPHFaceRecognizer_create()

감지기 = cv2.CascadeClassifier("haarcascade_frontalface_default.xml");

# 이미지와 레이블 데이터를 가져오는 함수

def getImagesAndLabels(경로):

imagePaths = [os.listdir(경로)의 f에 대한 os.path.join(경로, f)]

faceSamples=[]

아이디 = []

imagePaths의 imagePath:

PIL_img = Image.open(imagePath).convert('L') # 회색조

img_numpy = np.array(PIL_img,'uint8')

아이디 = int(os.path.split(imagePath)[-1].split(".")[1])

얼굴 = detector.detectMultiScale(img_numpy)

면의 (x,y,w,h):

faceSamples.append(img_numpy[y:y+h,x:x+w])

ids.append(id)

얼굴 샘플, ID 반환

print("\n [INFO] 얼굴 훈련. 몇 초 정도 걸립니다. 잠시만요 ...")

얼굴, ID = getImagesAndLabels(경로)

Recognizer.train(얼굴, np.array(ids))

# 모델을 training/trainer.yml에 저장합니다.

recognitionr.write('trainer/trainer.yml')

# 훈련된 얼굴의 수를 출력하고 프로그램을 종료합니다.

print("\n [INFO] {0}명의 얼굴이 훈련되었습니다. 프로그램을 종료합니다.".format(len(np.unique(ids))))

학습: 얼굴 인식의 MATLAB 응용 프로그램: 코드, 설명 및 구문

5단계: 인식 시작

모델을 학습했으므로 이제 모델 테스트를 시작할 수 있습니다. 이 섹션에서는 모델이 인식하는 각 사용자의 이름을 표시할 수 있도록 ID에 이름을 추가했습니다.

모델이 사람을 인식하지 못합니다. 감지한 얼굴이 데이터베이스에 있는 얼굴과 일치하는지 여부를 예측합니다. 우리 모델은 얼굴이 데이터베이스에 있는 얼굴과 얼마나 일치하는지 백분율을 표시합니다. 정확도는 테스트 중인 이미지와 데이터베이스에 추가한 사진(모델을 훈련시킨 이미지)에 따라 크게 달라집니다.

코드는 다음과 같습니다.

수입 cv2

numpy를 np로 가져오기

수입 OS

인식기 = cv2.face.LBPHFaceRecognizer_create()

Recognizer.read('트레이너/트레이너.yml')

cascadePath = "haarcascade_frontalface_default.xml"

faceCascade = cv2.CascadeClassifier(cascadePath);

글꼴 = cv2.FONT_HERSHEY_SIMPLEX

#ID 카운터 시작

아이디 = 0

# id와 관련된 이름: example ==> upGrad: id=1 등

이름 = ['없음', upGrad', 나', '친구', 'Y', 'X']

# 실시간 비디오 캡처 초기화 및 시작

캠 = cv2.VideoCapture(0)

cam.set(3, 640) # 비디오 너비 설정

cam.set(4, 480) # 비디오 높이 설정

# 얼굴로 인식할 최소 창 크기 정의

minW = 0.1*cam.get(3)

minH = 0.1*cam.get(4)

참인 동안:

ret, img =cam.read()

img = cv2.flip(img, -1) # 세로로 뒤집기

회색 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

얼굴 = faceCascade.detectMultiScale(

회색,

스케일 팩터 = 1.2,

최소이웃 = 5,

최소 크기 = (int(minW), int(minH)),

)

면의 for(x,y,w,h):

cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

id, 신뢰도 = recognitionr.predict(gray[y:y+h,x:x+w])

# 신뢰도가 100보다 작으면 ==> "0" : 완전 일치

경우(신뢰도 < 100):

아이디 = 이름[아이디]

신뢰 = "{0}%".format(round(100 – 신뢰))

또 다른:

아이디 = "알 수 없음"

신뢰 = "{0}%".format(round(100 – 신뢰))

cv2.putText(

이미지,

str(ID),

(x+5,y-5),

폰트,

1,

(255,255,255),

2

)

cv2.putText(

이미지,

str(자신감),

(x+5,y+h-5),

폰트,

1,

(255,255,0),

1

)

cv2.imshow('카메라', img)

k = cv2.waitKey(10) & 0xff # 비디오를 종료하려면 'ESC' 키를 누릅니다.

k == 27인 경우:

부서지다

# 청소를 한다

print("\n [정보] 프로그램을 종료하고 정리 중입니다.")

cam.release()

cv2.destroyAllWindows()

Python에서 얼굴 감지 프로젝트가 끝났습니다. 이제 얼굴을 감지하고 인식하는 기계 학습 모델을 만드는 방법을 알게 되었습니다. 결과를 우리와 공유하십시오!

배우기: 초보자를 위한 TensorFlow 객체 감지 튜토리얼

기계 학습에 대해 자세히 알아보기

이 얼굴 감지 프로젝트가 마음에 드셨기를 바랍니다. 더 어렵게 만들고 싶다면 데이터 세트에 여러 얼굴을 추가하고 그에 따라 모델을 훈련할 수 있습니다. 다른 라이브러리와 결합하여 프로그램의 얼굴 감지 보안 시스템과 같은 다른 것으로 프로젝트를 확장할 수도 있습니다!

머신 러닝에 대해 자세히 알아보려면 IIIT-B & upGrad의 기계 학습 및 AI 경영자 PG 프로그램을 확인하세요. 이 프로그램은 일하는 전문가를 위해 설계되었으며 450시간 이상의 엄격한 교육, 30개 이상의 사례 연구 및 과제, IIIT를 제공합니다. -B 동문 자격, 5개 이상의 실용적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.

얼굴 인식에 사용되는 수학적 접근 방식은 무엇입니까?

얼굴 인식은 계산 비용이 많이 들고 기계 학습 알고리즘 및 객체 감지 방법의 정확도 테스트로 자주 사용됩니다. 일반적으로 대부분의 경우 고전적인 수학적 접근 방식인 유클리드 거리를 따릅니다. 두 집합 사이의 가장 가까운 유클리드 거리를 찾기 위해 기하학적 변환이 적용됩니다. 유클리드 거리는 두 이미지를 나타내는 점의 두 벡터 간의 차이의 제곱을 더해야 합니다. 유클리드 거리 알고리즘에 대한 자세한 내용은 이 연구 논문에서 확인할 수 있습니다.

얼굴 인식은 어떻게 작동합니까?

얼굴 감지는 디지털 이미지 또는 비디오에서 사람의 얼굴 또는 여러 사람의 얼굴을 감지하는 프로세스입니다. 얼굴 인식은 얼굴 인식의 하위 프로세스이지만 일반적으로 이 용어는 이미지에서 얼굴의 위치만 사용하여 사람을 식별하거나 확인하는 데 사용되는 이미지 기반 얼굴 인식을 의미하며 얼굴 인식은 고유한 모델도 생성합니다. 그런 다음 대상 얼굴과 일치시킵니다. 얼굴 인식은 얼굴 인식이 디지털 이미지 또는 비디오 소스에서 사람을 식별하거나 확인하는 자동화된 프로세스라는 점에서 얼굴 인식과 다릅니다.

안면 인식의 어려움은 무엇입니까?

여기에서는 얼굴 인식의 몇 가지 문제에 대해 설명합니다. 얼굴 인식 시스템과 관련된 알고리즘은 매우 복잡하여 매우 일관성이 없습니다. 안면 인식 시스템은 환경 및 조명 변화, 다양한 포즈, 심지어 비슷하게 생긴 사람들에 의해 쉽게 속습니다. 안면 인식 시스템은 매우 높은 연산 능력을 필요로 하기 때문에 안면 인식 시스템은 주로 고급형 스마트폰 및 노트북에 사용됩니다. 얼굴 인식 시스템은 단일 프레임에서 여러 개의 잘못된 일치를 감지할 수 있습니다. 소프트웨어는 사용자가 의도한 바를 결정해야 하는데, 이는 소프트웨어에 쉬운 작업이 아닙니다.