본문 바로가기
파이썬

[파이썬 강좌] Python 및 OpenCV를 사용하여 안면인식/얼굴 수 감지

by GDBS 2021. 11. 27.
반응형
728x170

개요

이 기사에서는 Python 및 OpenCV를 사용하여 얼굴 수 를 감지 하는 앱을 만듭니다 . 이 기사는 주로 Python용 dlib 라이브러리 를 사용하려는 초보자를 대상으로 합니다. 이 기사의 주요 아이디어는 초보자가 작동 방식을 이해하도록 돕는 것입니다. 여기에 제공된 코드는 간단하고 이해하기 쉽습니다.

OpenCV란?

OpenCV는 이미지 처리, 비디오 분석 또는 컴퓨터 비전 분야를 전문으로 하는 소프트웨어 라이브러리입니다. 예를 들어 사진 및 비디오의 정보를 분석할 때 해당 분야의 많은 문제를 해결하는 데 사용할 수 있습니다. 따라서 이러한 종류의 작업을 지원할 수 있는 프로그램을 찾고 있다면 OpenCV를 고려해야 합니다. 개발자는 이미지를 부울 값으로 변환하고 정교한 디지털 알고리즘을 통해 유사성을 비교하여 개발자가 얼굴을 인식할 수 있습니다.

 

-1단계: 종속성 설치

코딩을 시작하기 전에 시스템에 몇 가지 패키지와 소프트웨어를 설치해야 합니다.

Dlib 설치:

Windows 시스템에 dlib 라이브러리를 설치하려면 먼저 두 개의 패키지를 설치해야 합니다.

  1. 비주얼 스튜디오 (Visual Studio)
  2. 씨메이크 (CMake)

Visual Studio의 경우 Visual Studio 설치 프로그램을 다운로드해야 하며 이 링크로 이동하여 설치 프로그램을 다운로드하여 설치할 수 있습니다.

Visual Studio를 다운로드하여 설치한 후 프로그램을 실행하고 C++로 데스크톱 개발을 선택하고 Windows용 C++ Cmake 도구를 선택하여 설치해야 합니다. 파일이 꽤 커서 설치하는데 시간이 좀 걸립니다.

cmake의 경우 시스템 명령 프롬프트에서 아래의 일반 사항을 복사하여 붙여넣을 수 있습니다.

pip3 install cmake

두 패키지를 모두 설치한 후 명령 프롬프트에서 이 명령을 사용하여 dlib 라이브러리를 간단히 설치할 수 있습니다.

pip3 install dlib

참고: Linux의 경우 dlib를 설치하기 전에 Cmake를 설치하기만 하면 됩니다. Linux에는 Visual Studio가 필요하지 않으며 나머지 프로세스는 동일해야 합니다.

Opencv 설치:

pip 명령을 사용하여 OpenCV를 설치할 수 있습니다. 코드는 아래에 나와 있으며 터미널/명령 프롬프트에 복사하여 붙여넣을 수 있습니다.

pip3 install opencv-python

numpy 설치:

numpy의 경우 터미널/명령 프롬프트에 복사하여 붙여넣기만 하면 OpenCV와 동일한 프로세스입니다.

 
pip3 install numpy

참고: Opencv 및 Numpy의 경우 프로세스는 Windows와 Linux 모두에 패키지를 설치하는 것과 동일해야 합니다.

-2단계: 앱 코딩

#importing opencv
import cv2
#importing numpy
import numpy as np
#importing dlib
import dlib

여기에서 세 개의 라이브러리 OpenCV를 가져와야 하는 필수 라이브러리를 가져왔습니다. 넘피와 dlib

video=cv2.VideoCapture(0)

이제 기본적으로 웹캠에서 비디오를 캡처하는 비디오 변수를 만들고 채널 0에서 사용할 수 있는 웹캠에서 입력을 가져와야 하기 때문에 여기에서 (0)을 사용합니다.

#creating the detector object
detector=dlib.get_frontal_face_detector()

이 코드 줄에서 dlib 라이브러리의 get Frontal 위상 감지기 클래스를 호출했습니다. 이 클래스는 웹 카메라에서 가져온 정보를 사용하여 정면 얼굴 요소를 감지할 수 있습니다.

while True:
    #extracting the video
    ret,frame=video.read()
    #flipping the frames
    frame=cv2.flip(frame,1)

여기에서 우리는 비디오가 그림의 슬라이드쇼라는 것을 알고 있기 때문에 프레임이 지속적으로 실행되고 웹캠에 캡처된 그림이 비디오로 변환되도록 야생의 진정한 무한 루프를 만든 다음 존재하는 비디오를 추출했습니다. 우리의 비디오 변수에서.

    #converting image into grayscale
    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

    face=detector(gray)

이 라인에서 우리는 컬러 입력인 웹캠의 입력을 그레이스케일로 변환했습니다. 우리는 opencv에 대해 cvtColor 호출을 사용했습니다. 이제 이 CVT 클래스 openCV는 두 개의 매개변수를 받아들입니다. 첫 번째는 웹캠의 입력인 프레임이고 두 번째 매개변수는 cv2.COLOR_BGR2GRAY입니다.

[그래서 왜 우리는 컬러 입력을 그레이스케일로 변환해야 합니까? 우리는 물체 감지의 정확도를 높이고 프로그램의 시간과 처리 능력을 줄이기 위해 컬러 이미지를 그레이 스케일 이미지로 변환합니다] 

    #creating the faces variable
    face=detector(gray)

그래서 이 라인에서 우리는 검출기=dlib.get_frontal_face_detector() 클래스를 사용할 이 face 변수를 생성했고 이 객체를 이 회색 이미지에 적용하고 이 얼굴의 출력은 시작 X와 시작 Y, 그리고 네 개의 값이 될 것입니다. 높이와 너비는 감지기 클래스가 제공하고 faces 변수가 저장할 값입니다. 아래는 더 많은 것을 이해하는 데 도움이 될 이미지가 있는 예입니다. 

num=0
for faces in faces:
        x,y=face.left(),face.top()
        hi,wi=face.right(),face.bottom()
        #implementing the cv2 dot rectangle method
cv2.rectangle(frame,(x,y),(hi,wi),(0,0.255),2)
        #incrementing i
        num=num=1

여기에서 처음에는 0인 num 변수를 만들었습니다. 왜냐하면 각 얼굴이 감지된 후 증가할 얼굴의 수를 저장하기 때문입니다. 그런 다음 이 faces 변수를 읽을 for 루프를 만들고 얼굴 주위에 사각형을 그리는 cv2 점 사각형 메서드를 사용했습니다. 이 직사각형 방법은 이 매개변수를 먼저 받아들이고 프레임(그림) 다음 X축과 Y축, 높이와 너비, 그리고 마지막으로 얼굴 주변 프레임의 색상과 너비입니다.

cv2.putText(frame, 'face'+str(num),(x-12,y-12),cv2.FONT_HERSHEY_PLAIN,0.7,(0,255,0),2)

여기에서 우리는 얼굴 주위의 프레임에 얼굴 텍스트의 수를 입력하기 위해 cv2 dot put text 메소드를 사용했습니다. 이 메서드는 다음 매개변수를 먼저 받아들인 다음 프레임, 그 다음 면 수, 위치 순입니다. 여기서 모든 얼굴 감지 부분이 완료되었습니다. 남은 것은 사용자에게 이미지를 보여주는 것뿐입니다.

    cv2.imshow('faces',frame)

    key=cv2.waitKey(1)
    if key==ord('q'):
        break

video.release()
cv2.destroyAllWindows()

여기에서 우리는 비디오를 공개하고 모든 창을 파괴했습니다.

결과물:

모든 단계를 검토하고 모든 것이 올바른지 확인했으면 코드를 실행할 차례입니다. 그렇게 하기 전에 먼저 웹 카메라가 작동하는지 확인해야 합니다. 컴퓨터가 얼굴에 부착된 컴퓨터와 물리적으로 연결할 수 없는 경우 도움이 되지 않기 때문입니다! Enter 키를 누르거나 해당 코드를 실행하면 화면에 얼굴 주위에 숫자가 할당된 사각형이 표시되어야 합니다. 이는 얼굴의 숫자입니다. 보다? 이것이 Python과 OpenCV를 사용하여 얼굴의 수를 감지하는 방법입니다.

그리고 터미널에서는 다음과 같아야 합니다.

 

이번에는 Python 및 OpenCV 라이브러리를 사용하여 얼굴 수 를 감지하는 방법에 대해 살펴보았습니다.

필요한 분들에게 도움이 되었으면 좋겠네요~

728x90
반응형

댓글