다음 코드를 사용하여 dlib를 사용하여 얼굴 표식 점을 그리면 실시간으로 웹캠에서 캡처 한 프레임에 다음과 같은 코드를 사용하여 원하는 점을 모두 따라야하는 ROI를 얻습니다 코드는 다음과 같습니다 :얼굴 표식 점에서 ROI 얻기 cv2 dlib
import cv2
import dlib
import numpy
from imutils.video import FPS
from imutils.video import WebcamVideoStream
import imutils
PREDICTOR_PATH = "./shape_predictor_68_face_landmarks.dat"
predictor = dlib.shape_predictor(PREDICTOR_PATH)
cascade_path = 'cascade/haarcascade_frontalface_default.xml'
cascade = cv2.CascadeClassifier(cascade_path)
webcam = WebcamVideoStream(src=0).start()
fps = FPS().start()
while True:
im = webcam.read()
im = imutils.resize(im, width=400)
faces = cascade.detectMultiScale(im, 1.3, 5)
if len(faces) != 0:
for (x, y, w, h) in faces.astype(long):
rect = dlib.rectangle(x, y, x + w, y + h)
#cv2.imwrite('face.png', rect)
get_landmarks = numpy.matrix([[p.x, p.y] for p in predictor(im, rect).parts()])
for idx, point in enumerate(get_landmarks):
pos = (point[0, 0], point[0, 1])
cv2.putText(im, str(idx), pos,
fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
fontScale=0.4,
color=(0, 0, 255))
# cv2.drawContours(im, [pos], -1, (0, 255, 0), 2)
# hullIndex = cv2.convexHull(pos, returnPoints=False)
# cv2.imwrite('face.png', hullIndex)
cv2.circle(im, pos, 3, color=(0, 255, 255))
cv2.imshow('Result', im)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
fps.update()
cv2.destroyAllWindows()
이미지 랜드 마크 점을 이미지 파일에 덤프하고 싶습니다. 하지만 이해 할 수없는 나는, 나는 이들 랜드 마크 점에서 투자 수익 (ROI)을 추출 할 수있는 방법 내가 원하는,
cv2.imwrite('face.png', hullIndex)
사용하여 파일로 덤프하지만, 나는 여기 사각형
를 사용 drwaned 싶지 않아 얼굴 표식 지점을 포위하는 모양 만이 위 코드의 출력은 아래처럼 보입니다. 그래서 그냥 얼굴 에지 포인트를 둘레에만 포인트를 덤프.faces = cascade.detectMultiScale(im, 1.3, 5)
은, 내가 그것을 시도하자로 구현하기가 매우 쉽다. –
네, 주어진 해결책을 시도했지만, 덤프 roi 아니라 대신 블랙 컬러 이미지를 만들었습니다! –
이 예지를주는 경우 : point [0]