반응형


안녕하세요. 웹나우테스입니다.


이번 영상에서는 dlib를 사용하여 검출한 얼굴의 랜드마크를 분리하여 보여주는 코드를 설명합니다. 







# 패키지 설치
# pip install dlib opencv-python
#
# 학습 모델 다운로드
# http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
import dlib
import cv2 as cv
import numpy as np

 
detector = dlib.get_frontal_face_detector()

predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')


cap = cv.VideoCapture(0)


# range는 끝값이 포함안됨  
ALL = list(range(0, 68))
RIGHT_EYEBROW = list(range(17, 22)) 
LEFT_EYEBROW = list(range(22, 27)) 
RIGHT_EYE = list(range(36, 42)) 
LEFT_EYE = list(range(42, 48)) 
NOSE = list(range(27, 36)) 
MOUTH_OUTLINE = list(range(48, 61)) 
MOUTH_INNER = list(range(61, 68))
JAWLINE = list(range(0, 17))

index = ALL

while True:

    ret, img_frame = cap.read()

    img_gray = cv.cvtColor(img_frame, cv.COLOR_BGR2GRAY)


    dets = detector(img_gray, 1)


    for face in dets:

        shape = predictor(img_frame, face) #얼굴에서 68개 점 찾기

        list_points = []
        for p in shape.parts():
            list_points.append([p.x, p.y])

        list_points = np.array(list_points)


        for i,pt in enumerate(list_points[index]):

            pt_pos = (pt[0], pt[1])
            cv.circle(img_frame, pt_pos, 2, (0, 255, 0), -1)

       
        cv.rectangle(img_frame, (face.left(), face.top()), (face.right(), face.bottom()),
            (0, 0, 255), 3)


    cv.imshow('result', img_frame)

   
    key = cv.waitKey(1)

    if key == 27:
        break
   
    elif key == ord('1'):
        index = ALL
    elif key == ord('2'):
        index = LEFT_EYEBROW + RIGHT_EYEBROW
    elif key == ord('3'):
        index = LEFT_EYE + RIGHT_EYE
    elif key == ord('4'):
        index = NOSE
    elif key == ord('5'):
        index = MOUTH_OUTLINE+MOUTH_INNER
    elif key == ord('6'):
        index = JAWLINE


cap.release()


반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  1. 2020.05.25 23:03

    비밀댓글입니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.05.25 23:07 신고

      요부분 원그리는 코드에서 좌표를 사용하는것을 잘보세요

      for i,pt in enumerate(list_points[index]):

                  pt_pos = (pt[0], pt[1])
                  cv.circle(img_frame, pt_pos, 2, (0, 255, 0), -1)

  2. 코땐 2020.08.10 22:23

    안녕하세요 좋은 자료 감사드려요
    덕분에 opencv 흥미 붙여 공부하고 있습니다.
    얼굴 인식을 코드를 짰는데 인식을 50%정도 밖에 못하는 것 같아 더 높은 정확도를 위해
    그 코드에 dlib으로 얼굴 랜드마크해 얼굴 인식이 더 잘 되게 하려고 합니다.

    혹 얼굴을 랜드마크해 인식하게 되면 정확도가 높아질까요? 궁금해서 댓글 남겨요 ^^ 아신다면 답장 부탁드릴게요!

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.08.10 22:36 신고

      잘 알지 못하는 부분이라 답변하기 어렵네요. 깃허브나 블로그 등에서 다른분들이 어떻게 하는지 살펴보는게 좋을듯합니다

  3. Favicon of https://1234dwasd.tistory.com BlogIcon 마우스먹통 2020.11.15 17:55 신고

    영상 잘보고있습니다.

    한개 질문이 있는데요
    PS C:\python\opencv> & C:/Users/hesti/AppData/Local/Programs/Python/Python39/python.exe c:/python/opencv/please.py
    Traceback (most recent call last):
    File "c:\python\opencv\please.py", line 15, in <module>
    img = cv2.resize(img, (int(img.shape[1] * scaler), int(img.shape[0] * scaler)))
    AttributeError: 'NoneType' object has no attribute 'shape'
    이런 오류가 계속 뜨는데 원인을 알 수 있을까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.11.15 18:35 신고

      이미지 img에 대한 width와 height를 따로 변수에 저장한 후, 해당값들이 문제 없는지 확인후, 이미지 크기 변환을 적용해보세요.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.11.15 18:36 신고

      에러상으로는 img가 이미지가 저장된 넘파이 배열이 아니라서 발생한 듯보입니다. 파이썬에서 이미지 로드시 이미지는 넘파이 배열에 저장되어 shape 속성을 갖습니다.

    • Favicon of https://1234dwasd.tistory.com BlogIcon 마우스먹통 2020.11.15 19:07 신고

      위의 에러는 해결된것같은데
      이젠
      img_gray = cv.cvtColor(img_frame, cv.COLOR_BGR2GRAY)
      cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-qjdp5db9\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

      이런 오류가 발생하네요
      글 작성자님의 경우에는 웹캠을 연결하셨지만
      저는 연결하지않았는데

      웹캠을 연결하지 않아서 생긴 오류일까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.11.15 19:24 신고

      소스코드를 그대로 사용했다면 웹캠을 연결해야 동작합니다

  4. Favicon of https://deepflowest.tistory.com BlogIcon Orange57 2021.01.27 17:19 신고

    안녕하세요, 포스팅 내용 중에
    detector를 yolo 학습 파일로 사용하고,
    predictor는 dlib 으로 쓰는 방법이 가능할까요??

    아니면 yolo와 dlib 형식이 안 맞아서 안 될까요?

  5. Favicon of https://dds1234.tistory.com BlogIcon asdf123 2021.03.14 18:35 신고

    카메라 상에서 코와 입이 검출되고 있는지, 검출되지 있지 않는지 확인 가능하나요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2021.03.14 19:22 신고

      각 위치마다 번호가부여 되기때문에 확인가능합니다

+ Recent posts