免费人脸识别软件 人脸识别软件app推荐( 三 )


#导入人脸识别模块mpFace=mp.solutions.face_detection#导入绘图模块mpDraw=mp.solutions.drawing_utils#自定义人脸识别方法 。最小的人脸检测置信度0.5faceDetection=mpFace.FaceDetection(min_detection_confidence=0.5)#(1)导入视频filepath='C:\GameDownload\DeepLearning\face.mp4'cap=cv2.VideoCapture(filepath)pTime=0#记录每帧图像处理的起始时间boxlist=[]#保存每帧图像每个框的信息#(2)处理每一帧图像whileTrue:#每次取出一帧图像 。返回是否读取成功(True/False) 。以及读取的图像数据success,img=cap.read()#将opencv导入的BGR图像转为RGB图像imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#将每一帧图像传给人脸识别模块results=faceDetection.process(imgRGB)#如果检测不到人脸那就返回Noneifresults.detections:#返回人脸索引index(第几张脸) 。和关键点的坐标信息forindex,detectioninenumerate(results.detections):#遍历每一帧图像并打印结果#print(index,detection)#每帧图像返回一次是人脸的几率 。以及识别框的xywh 。后续返回关键点的xy坐标print(detection.score)#是人脸的的可能性print(detection.location_data.relative_bounding_box)#识别框的xywh#设置一个边界框 。接收所有的框的xywh及关键点信息bboxC=detection.location_data.relative_bounding_box#接收每一帧图像的宽、高、通道数ih,iw,ic=img.shape#将边界框的坐标点从比例坐标转换成像素坐标#将边界框的宽和高从比例长度转换为像素长度bbox=(int(bboxC.xmin*iw),int(bboxC.ymin*ih),int(bboxC.width*iw),int(bboxC.height*ih))#有了识别框的xywh就可以在每一帧图像上把框画出来#cv2.rectangle(img,bbox,(255,0,0),5)#自定义绘制函数 。不适用官方的mpDraw.draw_detection#把人脸的概率显示在检测框上,img画板 。概率值*100保留两位小数变成百分数 。再变成字符串cv2.putText(img,f'{str(round(detection.score[0]*100,2))}%',(bbox[0],bbox[1]-20),#文本显示的位置 。-20是为了不和框重合cv2.FONT_HERSHEY_PLAIN,#文本字体类型2,(0,0,255),2)#字体大小;字体颜色;线条粗细#保存索引 。人脸概率 。识别框的x/y/w/hboxlist.append([index,detection.score,bbox])#(3)修改识别框样式x,y,w,h=bbox#获取识别框的信息,xy为左上角坐标点x1,y1=x+w,y+h#右下角坐标点#绘制比矩形框粗的线段 。img画板 。线段起始点坐标 。线段颜色 。线宽为8cv2.line(img,(x,y),(x+20,y),(255,0,255),4)cv2.line(img,(x,y),(x,y+20),(255,0,255),4)cv2.line(img,(x1,y1),(x1-20,y1),(255,0,255),4)cv2.line(img,(x1,y1),(x1,y1-20),(255,0,255),4)cv2.line(img,(x1,y),(x1-20,y),(255,0,255),4)cv2.line(img,(x1,y),(x1,y+20),(255,0,255),4)cv2.line(img,(x,y1),(x+20,y1),(255,0,255),4)cv2.line(img,(x,y1),(x,y1-20),(255,0,255),4)#在每一帧图像上绘制矩形框cv2.rectangle(img,bbox,(255,0,255),1)#自定义绘制函数#记录每帧图像处理所花的时间cTime=time.time()fps=1/(cTime-pTime)#计算fps值pTime=cTime#更新每张图像处理的初始时间#把fps值显示在图像上,img画板;fps变成字符串;显示的位置;设置字体;字体大小;字体颜色;线条粗细cv2.putText(img,f'FPS:{str(int(fps))}',(10,50),cv2.FONT_HERSHEY_PLAIN,3,(0,255,0),3)#显示图像 。输入窗口名及图像数据cv2.imshow('image',img)ifcv2.waitKey(50)&0xFF==27:#每帧滞留50毫秒后消失 。ESC键退出break#释放视频资源cap.release()cv2.destroyAllWindows()
修改后的检测框效果如下

免费人脸识别软件 人脸识别软件app推荐

文章插图

免费人脸识别软件 人脸识别软件app推荐

文章插图
我们将坐标信息存放在了boxlist中 。boxlist.append([index, detection.score, bbox]) 存放人脸索引、评分、检测框信息 。把它打印出来看一下 。比如某帧图像所在的视频有3张脸 。每一帧都会输出0、1、2三个识别框的概率 。左上角坐标xy 。框的宽高wh
【免费人脸识别软件 人脸识别软件app推荐】 。。。。。。。。。。。。。。。。。。。。。。。。。[0,[0.9619430303573608],(98,100,96,96)],[1,[0.9173532128334045],(457,65,118,118)],[2,[0.8985080122947693],(268,52,123,123)],[0,[0.9615015983581543],(98,100,97,97)],[1,[0.9164762496948242],(457,65,118,118)],[2,[0.9118367433547974],(269,53,123,123)],[0,[0.9616674780845642],(97,100,97,97)],[1,[0.9218802452087402],(272,53,122,122)],[2,[0.9176990389823914],(456,65,118,118)],[0,[0.9638006091117859],(97,101,97,97)],[1,[0.9180505275726318],(276,56,119,119)],[2,[0.9177079796791077],(456,64,118,118)], 。。。。。。。。。。。。。。。。。。。。。。。。。。

推荐阅读