얼굴 인식을 실현하고 얼굴의 68 개 특징 포인트를 추출하십시오.이 Python 라이브러리가 도움이 될 수 있습니다!

이전에 안면 인식 실현에 대한 글을 썼는데, 그 기술에 사용 된 기술은 Baidu API를 호출하여 구현했습니다. 이번에는 dlib 패키지를 사용하여 안면 영역 감지 및 특징점 추출 기능을 구현합니다.

dlib는 얼굴 인식, 감지, 인식, 비디오 타겟 추적 및 기타 기능을 구현할 수있는 많은 우수한 머신 러닝 알고리즘을 캡슐화합니다. C ++에서 개발 한 오픈 소스 라이브러리입니다. 또한 직접 호출 할 수있는 Python 인터페이스도 제공합니다.

1, dilb 설치

dlib 패키지의 설치 방법도 pip와 함께 설치되지만 입력 한 점에서 다른 패키지와 다릅니다.

pip install dlib

이전에는 Cmake 패키지를 설치해야하는데이 도구는 주로 dlib를 컴파일하는 데 사용되며 설치 명령은 다른 패키지와 유사합니다.

pip install Cmake

2. 얼굴 인식 실현

dlib를 사용하여 얼굴 인식 기능을 실현하는 경우 먼저 감지기와 사진 미리보기 창을 정의하십시오.

detector = dlib.get_frontal_face_detector()
win = win = dlib.image_window()

그런 다음 load_rgb_image () 함수를 사용하여 이미지를 읽습니다.

img = dlib.load_rgb_image(f)

다음으로 얼굴 감지의 핵심 기능을 구현할 것입니다. 여기서는 위에서 정의한 감지기를 사용해야합니다.

dets,score,idx = detector.run(img,1-1)

img는 우리가 읽은 이미지입니다. 두 번째 매개 변수 1은 이미지의 업 샘플링 배수를 나타냅니다. 값이 클수록 최종 인식 결과가 더 좋아집니다. -1은 분할 임계 값의 조정을 나타내고 음수 값은 더 많음을 나타냅니다. 반환되었습니다. 테스트 결과

반환 된 dets는 왼쪽, 위쪽, 오른쪽 및 아래쪽 테두리를 나타내는 얼굴 영역 사각형을 반환합니다. 튜플 형태입니다. 하나의 얼굴이 감지되면 튜플입니다. 얼굴이 여러 개인 경우 여러 The 튜플은 목록에 배치됩니다.이 직사각형 좌표를 사용하여 다음을 수행 할 수 있습니다.

  • 얼굴 영역을 잘라내어 추출하십시오.
  • 얼굴 영역의 라인 마킹

점수는 얼굴 인식 결과의 탐지 확률을 나타냅니다. 결과가 클수록 인식 결과가 좋아집니다. 사진에 얼굴이 여러 개인 경우 여러 개의 탐지 확률이 반환되어 목록 형태로 저장됩니다. picture 여러 얼굴에 사용되는 인덱스를 인덱스 할 수 있습니다.

win.clear_overlay()
win.set_image(img)
win.add_overlay(dets)
dlib.hit_enter_to_continue

마지막으로 이전에 정의 된 win 창을 사용하여 이미지를 미리보고 결과는 다음과 같습니다.

물론 OpenCV를 사용하여 윤곽선을 그릴 수도 있습니다 .OpenCV 윤곽선의 결과는 다음과 같습니다 (색상 차이의 원인은 OpenCV가 BGR 채널 시퀀스를 읽기 때문입니다).

Snipaste_2020-06-01_23-46-03.png

3. dlib는 얼굴의 68 개의 특징점을 추출합니다.

OpenCV는 얼굴 인식에도 사용할 수 있지만 효과는 dlib만큼 좋지 않습니다. 위에서 언급 한 와이어 프레임 감지 외에도 dlib는 얼굴에서 68 개의 특징점을 직접 추출하여 좌표로 반환 할 수 있습니다.

68 개의 기능 포인트의 좌표를 사용하여 얼굴 정렬, 융합 및 기타 응용 프로그램을 쉽게 구현할 수 있습니다. dlib로 설명 된 효과를 살펴 보겠습니다.

Snipaste_2020-06-02_14-48-24.png

얼굴 인식과의 차이점은 여기에 형상 검출기를 추가해야한다는 점입니다. 형상 검출기는 공식 웹 사이트에서 제공하는 파일을 필요로하고 훈련 된 체중 정보를 넣어 직접 사용할 수 있습니다. 위의 기능 구현 코드는 다음과 같습니다. :

import dlib
import os
import cv2

predictor_path  = "E:/shape_predictor_68_face_landmarks.dat"#权重文件路径
png_path = "E:/ceshi.png"

detector = dlib.get_frontal_face_detector()
#相撞
predicator = dlib.shape_predictor(predictor_path)
win = dlib.image_window()
img =  dlib.load_rgb_image(png_path)
win.clear_overlay()
win.set_image(img1)

for k,d in enumerate(dets):
    print("Detection {}  left:{}  Top: {} Right {}  Bottom {}".format(
        k,d.left(),d.top(),d.right(),d.bottom()
    shape = predicator(img,d)
    #Get the landmarks/parts for face in box d
    print("Part 0:{},Part 1 :{}".format(shape.part(0),shape.part(1)))
    win.add_overlay(shape)

win.add_overlay(dets)
dlib.hit_enter_to_continue()

좌표 점은 part (index) 함수를 통해 얻을 수 있습니다.

위의 좌표 점은 OpenCV를 통해 원본 이미지에 윤곽을 그리고 텍스트로 주석을 달 수 있습니다. 효과는 다음과 같습니다.

Snipaste_2020-06-02_15-02-38.png

완전한 코드를 첨부하십시오.

import dlib
import os
import cv2


predictor_path  = "E:/shape_predictor_68_face_landmarks.dat"
png_path = "E:/ceshi.png"


detector = dlib.get_frontal_face_detector()
#相撞
predicator = dlib.shape_predictor(predictor_path)
win = dlib.image_window()
img1 = cv2.imread(png_path)

dets = detector(img1,1)
print("Number of faces detected : {}".format(len(dets)))
for k,d in enumerate(dets):
    print("Detection {}  left:{}  Top: {} Right {}  Bottom {}".format(
        k,d.left(),d.top(),d.right(),d.bottom()
    ))
    lanmarks = [[p.x,p.y] for p in predicator(img1,d).parts()]
    for idx,point in enumerate(lanmarks):
        point = (point[0],point[1])
        cv2.circle(img1,point,5,color=(0,0,255))
        font = cv2.FONT_HERSHEY_COMPLEX_SMALL
        cv2.putText(img1,str(idx),point,font,0.5,(0,255,0),1,cv2.LINE_AA)
        #对标记点进行递归;

cv2.namedWindow("img",cv2.WINDOW_NORMAL)
cv2.imshow("img",img1)
cv2.waitKey(0)

4. 작은 요약

위는 dlib 패키지에 대한 간략한 소개입니다. 얼굴 인식 응용 프로그램 측면에서 dlib는 꽤 잘 작동합니다. 관심이 있으시면 공식 웹 사이트를 방문하여 dlib에 대한 자세한 소개를보고 여가 시간에 따라 할 수 있습니다. .

다음 기사에서는 OpenCV를 사용하여 얼굴 융합 기술을 구현하는 방법을 소개합니다.이 기술은이 기사의 확장 인이 기사에서 언급 한 얼굴의 68 개의 특징점 좌표를 사용할 것이며 관심있는 친구들은 미리 물결에 주목할 수 있습니다. .

기사에 언급 된 가중치 파일을 얻는 방법은 공식 계정 에서 얻을 수 있습니다 . Xiao Zhang Python 백 스테이지 답장 키워드 : dlib

참조 링크 :

1 , http : //dlib.net/face_landmark_detection.py.html

2 , https : //blog.csdn.net/qq_39438636/article/details/79304130

3 , http : //dlib.net/

추천

출처blog.csdn.net/weixin_42512684/article/details/106582447