gpt4 book ai didi

opencv - 使用 DLIB 进行面部对齐检查

转载 作者:太空宇宙 更新时间:2023-11-03 21:25:29 25 4
gpt4 key购买 nike

我只是想知道是否可以使用 DLIB 和 OpenCV 检测面部是否正确对齐,直接对准相机?

enter image description here

我试过这段代码来检测形状并获取面部的点:

enter image description here

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(args["shape_predictor"])

vs = VideoStream(0).start()

while True:
# grab the frame from the threaded video stream, resize it to
# have a maximum width of 400 pixels, and convert it to
# grayscale
frame = vs.read()
frame = imutils.resize(frame, width=400)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# detect faces in the grayscale frame
rects = detector(gray, 0)

# loop over the face detections
for rect in rects:
# determine the facial landmarks for the face region, then
# convert the facial landmark (x, y)-coordinates to a NumPy
# array
shape = predictor(gray, rect)
shape = face_utils.shape_to_np(shape)

# loop over the (x, y)-coordinates for the facial landmarks
# and draw them on the image
for (x, y) in shape:
print x,y
cv2.circle(frame, (x, y), 1, (0, 0, 255), -1)
cv2.putText(frame, "Aptiktas veidas", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

# show the frame
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF

最佳答案

下面是我编写的一个函数,用于查找人头朝向的姿势。这里 p1 和 p2 定义了位姿向量。计算它们之间的角度是微不足道的,您可以根据角度决定接受或丢弃哪个图像。

def pose_estimate(image, landmarks):
"""
Given an image and a set of facial landmarks generates the direction of pose
"""
size = image.shape
image_points = np.array([
(landmarks[33, 0], landmarks[33, 1]), # Nose tip
(landmarks[8, 0], landmarks[8, 1]), # Chin
(landmarks[36, 0], landmarks[36, 1]), # Left eye left corner
(landmarks[45, 0], landmarks[45, 1]), # Right eye right corner
(landmarks[48, 0], landmarks[48, 1]), # Left Mouth corner
(landmarks[54, 0], landmarks[54, 1]) # Right mouth corner
], dtype="double")

model_points = np.array([
(0.0, 0.0, 0.0), # Nose tip
(0.0, -330.0, -65.0), # Chin
(-225.0, 170.0, -135.0), # Left eye left corner
(225.0, 170.0, -135.0), # Right eye right corner
(-150.0, -150.0, -125.0), # Left Mouth corner
(150.0, -150.0, -125.0) # Right mouth corner
])

focal_length = size[1]
center = (size[1]/2, size[0]/2)
camera_matrix = np.array([
[focal_length, 0, center[0]],
[0, focal_length, center[1]],
[0, 0, 1]
], dtype="double")

dist_coeffs = np.zeros((4, 1))
success, rotation_vector, translation_vector = cv2.solvePnP(model_points, image_points, camera_matrix, dist_coeffs)
(nose_end_point2D, jacobian) = cv2.projectPoints(np.array([(0.0, 0.0, 1000.0)]), rotation_vector, translation_vector, camera_matrix, dist_coeffs)
p1 = (int(image_points[0][0]), int(image_points[0][1]))
p2 = (int(nose_end_point2D[0][0][0]), int(nose_end_point2D[0][0][1]))
return p1, p2

关于opencv - 使用 DLIB 进行面部对齐检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43938207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com