当前位置: 首页 > 科技观察

简单智能的方法:Python也能进行人脸识别

时间:2023-03-20 12:56:08 科技观察

本文将介绍图像处理中的一些重要概念。除了详细解释每个步骤外,它还将提供一个使用Cv2和DLib库在Python中轻松进行人脸识别的项目。感兴趣区域使用图像进行面部分析时,最重要的概念之一是定义感兴趣区域(ROI),我们必须定义图像中的特定部分,在该部分进行过滤或执行某些操作。比如我们要过滤汽车的车牌,我们感兴趣的区域就停在车牌上,那么街道,车身,图片中出现的任何东西都只是辅助部分。在这个例子中,我们将使用opencv库,它支持分割图像并帮助我们识别感兴趣的区域。Haar库该项目将使用现成的分类器:级联Haar分类器,这个特定的分类器将始终适用于灰度图像。该算法生成了一个几何图形,可以识别与我们分析的相似点。所以在这个例子中,它会尝试在脸上找到模式,即眼睛、鼻子和嘴巴。这种分析方法的最大问题是会产生幻觉错觉。你看到的是人眼还是几个窗口?在希腊词源学中,pareidolia是一种人类特征。从童年开始,我们的大脑就被编程为识别图像中的物体和面孔。利用我们以前获得的经验,我们自己的大脑会根据我们认为是“人类”的特征来寻找一种模式,添加新的人脸。使用Haar人脸特征分类器,以下图为例:我们看一下识别这张图片人脸的代码:importcv2group_of_people_image=cv2.imread('images/image7.jpg')frontal_face_classifier=cv2.CascadeClassifier('分类器/haarcascade_frontalface_default.xml')image_in_gray_scale=cv2.cvtColor(group_of_people_image,cv2.COLOR_BGR2GRAY)faces=frontal_face_classifier.detectMultiScale(image=image_in_gray_scale,scaleFactor=1.3,minNeighbors=6)for(x_axis,y_axis,weight,height)infacecv2.rectangle(group_of_people_image,(x_axis,y_axis),(x_axis+weight,y_axis+height),(255,0,0),2)这个算法把图片转成灰度图,前面说了,这是一个基本的分类器Step的操作,然后我们使用dectedMultiScale函数在图像中搜索人脸,并绘制一个矩形来表示图像的位置。人脸定位时,结果如下:我们可以准确的分析出出现的两张人脸(用矩形框来划分人脸),有两个人的脸完全正面展示,人脸完全暴露出来,所以我们可以清楚地看到他的脸;对方只露出了部分人脸,所以我们得不到准确的信息来确认这是一张完整的人脸。FacialFeatureDetectionDlib是一个带有一些分类器的库,可以帮助我们检测面部的某些部分,例如:眼睛、眉毛、鼻子和娃娃区域。下图为例:现在,使用算法识别图像中的人脸特征点:initial_image_in_rgb.copy()classifier_path=dlib.shape_predictor('classifier/shape_predictor_68_face_landmarks.dat')frontal_face_detector=dlib.get_frontal_face_detector()rectangles=frontal_face_detector(initial_image,1)叉子,dinenumerate(矩形):cv2.lectimage(),(reference_d.top()),(d.right(),d.bottom()),(255,255,0),2)landmarks=[]forrectangleinrectangles:landmarks.append(np.matrix([[p.x,p.y]forpinclassifier_path(reference_image,rectangle).parts()]))forlandmarkinlandmarks:forindex,pointinenumerate(landmark):point_center=(point[0,0],point[0,1])cv2.circle(reference_image,point_center,3,(255,255,0),-1)cv2.putText(reference_image,str(index),point_center,cv2.FONT_HERSHEY_COMPLEX,3,(255,255,255),2)我们使用68面featureclassifiers,它试图更精确地理解Pointface,这给了我们更多的选择来分析结果,缺点是速度有点慢。所以必须要划出一个矩形来确定我们的脸可能在哪里,五官就是我们可以识别的面部特征,包括脸、嘴巴、眼睛、眉毛。一旦以矩形方式框住脸部,就可以使用特征返回特征,最后您将有一些可视化的东西来生成带有脸部点的图像。结果:这些点对于帮助识别表情很重要,比如我们可以识别出这个男孩是睁着眼睛闭着嘴。将此视为情绪的表现,比方说这个男孩很焦虑。当一个人微笑时,它可以帮助理解表达快乐的情绪。上面的例子向我们展示了Python可以识别一个感兴趣的区域,在本例中就是人脸识别。该项目还可以扩展到使用机器学习来检测图像中的人是快乐、悲伤还是担心。包含所有内容的项目位于:https://github.com/LimaGuilherme/facial-recognize