python人脸识别模块
class FaceRekognition:人脸识别类
初始化函数:init(self, landmarks_model: Union[str, Path])
参数类型:对象自身self,表征模型路径的字符串landmarks_model
获取脸部位置检测器:self.detector = dlib.get_frontal_face_detector()
初始化人脸关键点预测器,参数为表征模型路径的字符串landmarks_model:self.predictor = dlib.shape_predictor(landmarks_model)
检测函数:predict(self, image: Union[str, Path, bytes, numpy.ndarray])
参数类型:对象自身self,表征被检测图像的字符串image
检测是否已经存在待检测图像:if not isinstance(image, numpy.ndarray)
读取待检测图像:image = read_image(image)
将图像转为灰度图:gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
调整色彩空间以便opencv处理:bgr_image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
初始化存储人脸检测结果的列表:result = []
检测图像中的人脸:faces = self.detector(gray_image)
遍历所有人脸:for face in faces
检测人脸关键点以确定人脸位置及大小:face_chip = dlib.get_face_chip(bgr_image, self.predictor(gray_image, face))
在列表result末尾添加需要添加的位置数据:result.append({‘BoundingBox’: {‘Left’: face.left(),‘Top’: face.top(),‘Width’: face.right() - face.left(),‘Height’: face.bottom() - face.top()}
将人脸区块的色彩空间改回RGB:‘FaceImage’: cv2.cvtColor(face_chip, cv2.COLOR_BGR2RGB)
返回人脸列表,result中包含人脸坐标及人脸图像切片:return result
main函数调用
if name == ‘main’: 是 Python 中一个常见的惯用法,用于判断当前模块是否是被直接执行的。
当一个 Python 文件被直接运行时,其 name 属性的值为 ‘main’,表示该模块是主程序入口。而当该模块被其他模块导入时,name 的值则是该模块的名称。
当我们使用 if name == ‘main’: 这样的语句时,我们可以把一些代码块放在这个条件下,这些代码块只有在当前模块作为主程序运行时才会执行,而当这个模块被其他模块导入时则不会执行。这样做的好处是可以让模块既可以作为独立的脚本运行,也可以作为其他模块的组件导入使用。
创建人脸识别类下的一个对象:face_rekognition = FaceRekognition(‘models/shape_predictor_68_face_landmarks.dat’)
对指定图像进行人脸识别并返回识别结果:face_result = face_rekognition.predict(‘images/test.jpg’)
输出识别结果:print(face_result)