计算面宽比
此处计算(第一个点和第17个点之间的距离)/(第28个点和第52个点之间的距离)
import cv2 import dlib import math import numpy as np # 导入numpy库 #读取图片 img = cv2.imread("C:/Users/Lenovo/Desktop/c.jpg") print(img.shape) #图像转化为灰度图 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #获得脸部位置检测器(加载人脸检测模块) detector = dlib.get_frontal_face_detector() #使用detector进行人脸检测 dets为返回的结果 faces = detector(gray_img, 1) #用dlib库加载预测模型 predictor=dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") for k, d in enumerate(faces): shape = predictor(gray_img, d) # 计算第一个点和第17个点之间的距离 point_1 = shape.part(0) # 第一个特征点 point_17 = shape.part(16) # 第17个特征点 distance_1 = math.sqrt((point_1.x - point_17.x)**2 + (point_1.y - point_17.y)**2) # 计算第28个点和第52个点之间的距离 point_28 = shape.part(27) # 第28个特征点 point_52 = shape.part(51) # 第52个特征点 distance_2 = math.sqrt((point_28.x - point_52.x)**2 + (point_28.y - point_52.y)**2) # 计算面部比例 facial_ratio = distance_1 / distance_2 print("面部比例是:", facial_ratio)
读取某一文件夹下的图片并计算面宽比,并保存至表格
将代码放到图片同级路径,注意更改图片路径和表格存放路径
imimport cv2 import dlib import math import numpy as np # 导入numpy库 import os from PIL import Image import pandas as pd folder_path = r"F:\face_code\pics" filename_list = [] for filename in os.listdir(folder_path): filepath = os.path.join(folder_path, filename) # 检查文件类型是不是图片 if os.path.isfile(filepath) and filepath.endswith(('.bmp','.jpg')): # 打开图片并处理 with Image.open(filepath) as img: # TODO: 在这里进行你的图片处理操作 # 示例代码:输出图片信息 print(filename, "- Size:", img.size, "- Format:", img.format) filename_list.append(filename) facial_ratio_list = [] for filename in filename_list: #读取图片 print(filename) img = cv2.imread(filename) print(img.shape) #图像转化为灰度图 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #获得脸部位置检测器(加载人脸检测模块) detector = dlib.get_frontal_face_detector() #使用detector进行人脸检测 dets为返回的结果 faces = detector(gray_img, 1) #用dlib库加载预测模型 predictor=dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") for k, d in enumerate(faces): shape = predictor(gray_img, d) # 计算第一个点和第17个点之间的距离 point_1 = shape.part(0) # 第一个特征点 point_17 = shape.part(16) # 第17个特征点 distance_1 = math.sqrt((point_1.x - point_17.x)**2 + (point_1.y - point_17.y)**2) # 计算第28个点和第52个点之间的距离 point_28 = shape.part(27) # 第28个特征点 point_52 = shape.part(51) # 第52个特征点 distance_2 = math.sqrt((point_28.x - point_52.x)**2 + (point_28.y - point_52.y)**2) # 计算面部比例 facial_ratio = distance_1 / distance_2 print("面部比例是:", facial_ratio) facial_ratio_list.append(facial_ratio) print(filename_list) print(facial_ratio_list) # 创建数据 data = { '图片': filename_list, '面宽比': facial_ratio_list } # 将数据转换为DataFrame df = pd.DataFrame(data) # 将数据输出到Excel文件 filepath = 'F:/face_code/excel.xlsx' df.to_excel(filepath, index=False)
安装dlib报错怎么办
pip install dlib==19.6.1