python - 如何使用opencv和dlib检测前额区域?

标签 python opencv dlib facial-identification

我想检测前额区域以进行研究。

我尝试将roi的宽度作为左眼的最左点与右眼的最右点之间的距离。就宽度而言,这似乎可行,但是当涉及到高度时,我需要一个适用于所有人的解决方案。请注意,我不希望头发出现在投资返回率中。我有一个实现高度的方法,但是它不适用于所有人。

x = int((shape[21][0]+shape[22][0])/2)
y = int((shape[21][1]+shape[22][1])/2)
w = abs(shape[39][0]-shape[42][0])
h = abs(y-shape[29][1])

y_mid = int((y + (y - h)) / 2)
roi = image[y-h:y_mid,int(x-w/2):int(x+w/2)]

if(roi.shape[0] !=0 and roi.shape[1] != 0):
    roi = imutils.resize(roi, width=250, inter=cv2.INTER_CUBIC)
    cv2.imshow('ROI', roi)

cv2.rectangle(image,(int(x-w/2), int(y-h)), (int(x + w/2), y_mid), (0, 0, 255), 1)
cv2.imshow('Image', image)

最佳答案

检测额头的代码:

import face_recognition
import cv2
import PIL.Image
import PIL.ImageDraw
import os
#image=cv2.imread(img_path)
unknown_image = face_recognition.load_image_file("16.png")
face_locations = face_recognition.face_locations(unknown_image) # detects all the faces in image
t = len(face_locations)
print(len(face_locations))
print(face_locations)
face_landmarks_list = face_recognition.face_landmarks(unknown_image)
# Drawing rectangles over the faces
pil_image = PIL.Image.fromarray(unknown_image)
for face_location in face_locations:
    #print(face_location)
    top,right,bottom,left =face_location
    draw_shape = PIL.ImageDraw.Draw(pil_image)
    im = PIL.Image.open("16.png")
    #bottom=34
    k = face_landmarks_list[0]['right_eyebrow']
    bottom= face_landmarks_list[0]['right_eyebrow'][0][1]
    for k1 in k :   
        if(bottom>k1[1]):
            bottom=k1[1]
    k = face_landmarks_list[0]['left_eyebrow']
    lbottom= face_landmarks_list[0]['left_eyebrow'][0][1]
    for k1 in k :   
        if(lbottom>k1[1]):
            lbottom=k1[1]
    bottom=min(bottom,lbottom)
    print(bottom)
    im = im.crop((left, top, right, bottom))
    im.save("m2.jpg")    
    draw_shape.rectangle([left, top, right, bottom],outline="blue")

关于python - 如何使用opencv和dlib检测前额区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57647638/

相关文章:

python - 无法执行 .mp3 文件

c++ - 在 Windows 上编译 dlib

Java OpenCV 在 inRange 之后将 HSV 转换回 BGR

python - 将 ndarray 转换为 cv::Mat 的最简单方法是什么?

python - #ERROR使用棋盘计算内在参数

c++ - 在Qt项目中包含dlib

c++ - 使用 LFW 训练 Dlib 的人脸检测器

python - 重写 api.onchange 方法

python - 如何使用 python 3.6 subprocess.Popen() 函数处理交互式 apt-get 安装?

python - 无法删除包含零的 pandas DataFrame 中的行