python 基于dlib库的人脸检测的实现
本周暂时比较清闲,可以保持每日一更的速度。
国外身份证项目新增需求,检测出身份证正面的人脸。最开始考虑mobilenet-ssd,经同事提醒,有现成的人脸库dlib,那就用传统方法尝试一下。
dlib安装
dlib的安装小费一波周折,我的python版本是3.6,直接pipinstalldlib安装失败。https://pypi.org/project/dlib/19.6.0/找到python3.6对应的whl文件下载安装或者直接pipinstalldlib==19.6.0提示Successfullyinstalleddlib-19.6.0安装成功。事情没那么简单,importdlib时报错:ImportError:DLLloadfailed:找不到指定的模块。
还是版本的问题,查找最新版本的whl:https://pypi.org/simple/dlib/
下载 dlib-19.8.1-cp36-cp36m-win_amd64.whl 然后cd到相应的目录下 pipinstalldlib-19.8.1-cp36-cp36m-win_amd64.whl
代码
importdlib importcv2 importos defresize(img,width=None,height=None,inter=cv2.INTER_AREA): """ initializethedimensionsoftheinputimageandobtain theimagesize """ dim=None (h,w)=img.shape[:2] ifwidthisNoneandheightisNone: returnimg ifwidthisNone: r=height/float(h) dim=(int(w*r),height) else: r=width/float(w) dim=(width,int(h*r)) #resizetheimage resized=cv2.resize(img,dim,interpolation=inter) #returntheresizedimage returnresized #使用Dlib的正面人脸检测器frontal_face_detector detector=dlib.get_frontal_face_detector() #图片所在路径 imgs_path='test/' filelist=os.listdir(imgs_path) #使用detector检测器来检测图像中的人脸 forimg_pathinfilelist: img=cv2.imread(imgs_path+img_path) img=resize(img,width=512) faces=detector(img,1) print("人脸数/Facesinall:",len(faces)) fori,dinenumerate(faces): w=d.right()-d.left() h=d.bottom()-d.top() d_left=int(d.left()-w*0.25) d_right=int(d.right()+w*0.25) d_top=int(d.top()-w*0.70) d_bottom=int(d.bottom()+w*0.2) print("第",i+1,"个人脸的矩形框坐标:", "left:",d_left,"right:",d_right,"top:",d_top,"bottom:",d_bottom) cv2.rectangle(img,tuple([d_left,d_top]),tuple([d_right,d_bottom]),(0,255,255),2) cv2.imshow("img",img) cv2.waitKey(0) cv2.imwrite('./result.jpg',img)
随便网上找了张图测试,效果如下
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。