扫脸网站源码分享,扫脸功能 的功能介绍

今天给各位分享扫脸网站源码分享的知识,其中也会对扫脸功能 的功能介绍进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

目录

废话

1.环境配置(jupyternotebookpython3.6.5)

2.训练集准备

3.代码思路(艹图)

4.人脸识别源码

5.参考文章

6.可能遇到的问题

废话

嗯,开局说点废话,之前用stm32和esp8266改装了下宿舍门,但终究觉得没人脸识别来得舒服,所以就有了这篇文章

1.环境配置(jupyternotebookpython3.6.5)

我这里用的是python3.6,如果你想搭建一个3.6的环境又不想影响原有的,可以用小黑窗(AnacondaPrompt)搭建一个虚拟环境(虚拟环境是一个独立的空间不会影响外界,也不会受外界影响,适合应对不同版本python的需求)

如何搭建虚拟环境可以看看这篇文,简单粗暴

当你搭建好虚拟环境后,第三方库的安装也要安在虚拟环境里,那么如何切换到虚拟环境里呢

打开小黑窗activate虚拟环境名字就可以激活了效果如下:

看到小括号就说明已经切换到虚拟环境里了

然后就可以安装所需的第三方库了,eg.Opencv,scipy,request,dlib,安装方法如下:

1)OpenCV

pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleopencv-contrib-python==3.4.2.16

pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleopencv-python==3.4.2.16

2)scipy

pipinstallscipy\n

3)request

pipinstallrequest

4)dlib

dlib库的安装比较麻烦,你得先找到对应版本,因为不同python版本对应不同dlib

如果你跟我一样是3.6,那装19.7就行

缺版本或找不到对应版本可以留言

2.训练集准备

这个训练集捏,是借助recognizer.train得到的.yml文件,所以精度没特别高,但是拿来玩玩门锁还是够用,追求精度可以走深度学习

代码如下:

1)第一步准备照片(即你的人脸像),以“序号.名称”命名,例如“1.xx&建两个空列表后续存储数据facesSamples=[]ids=[]imagePaths=[os.path.join(path,f)forfinos.listdir(path)]39;E:\\jupyter_notebook\\practice\\haarcascades\\haarcascade_frontalface_alt2.xml&打印数组imagePathsprint(&39;,imagePaths)打开图片,灰度PIL_img=Image.open(imagePath).convert(&39;)39;uint8&获取图片人脸特征,相当于riofaces=face_detector.detectMultiScale(img_numpy)39;.&id=os.path.split(imagePath)[1].split(&39;)[0]把ID写进ids列表中ids.append(id)打印脸部特征和idprint(&39;,id)print(&39;,facesSamples)returnfacesSamples,ids

if__name__==&39;:39;E:/face_dormitory/train&获取图像数组和id标签数组和姓名faces,ids=getImageAndLabels(path)保存文件recognizer.write(&39;)

3.代码思路(艹图)

4.人脸识别源码

1)引入库

importcv2importnumpyasnpimportosimporturllibimporturllib.requestimporthashlibfromscipy.spatialimportdistanceasdistfromcollectionsimportOrderedDictimportargparseimporttimeimportdlib

2)加载训练集(这里shape_predictor_68_face_landmarks是用于眨眼检测的)

39;E:/face_dormitory/opencv/trainer/trainer_xx.yml&建个空id列表warningtime=0predictor=dlib.shape_predictor(&39;)

3)邮件函数(即识别出陌生人或可疑人用于发送抓拍照片的)

importsmtplibfromPILimportImageimportemail图片类型邮件fromemail.mime.textimportMIMEText创建附件类型HOST=&39;39;Warning!!!&设置邮件标题FROM=&39;TO=&39;39;xxxxxxxxxx@qq.com&设置收件人的邮箱(可以一次发给多个人,用逗号分隔)message=MIMEMultipart(&39;)相当于信封related表示使用内嵌资源的形式,将邮件发送给对方defsendmail(HOST,SUBJECT,FROM,TO,message):39;<h1style=&34;>Warning!!!</h1><imgsrc=&34;>&39;html&39;utf-8&===========发送图片-=============message_image0=MIMEText(open(&39;,&39;).read(),&39;,&39;)message_image0[&39;]=&34;Suspiciouspeople.jpg&39;39;E:/face_dormitory/unidentified/1.jpg&39;rb&39;base64&39;utf-8&39;Content-disposition&39;attachment;filename=&34;&设置图片在附件当中的名字message.attach(message_image0)添加图片文件到邮件-附件中去&39;&39;E:/face_dormitory/unidentified&39;utf-8&39;Content-disposition&39;attachment;filename=&34;&39;&39;os.remove(&39;)39;E:/face_dormitory/unidentified/1.jpg&===========发送excel-附件=============39;email_demo.xlsx&39;rb&39;base64&39;utf-8&将xlsx文件作为内容发送到对方的邮箱读取excel,rb形式读取,对于MIMEText()来说默认的编码形式是base64对于二进制文件来说没有设置base64,会出现乱码39;Content-Disposition&39;attachment;filename=&34;&设置文件在附件当中的名字添加excel文件到邮件-附件中去39;From&设置邮件发件人message[&39;]=TO39;Subject&设置邮件标题email_client=smtplib.SMTP_SSL()39;465&设置发送域名,端口465result=email_client.login(FROM,&39;)39;登录结果&===========操作=============email_client.sendmail(from_addr=FROM,to_addrs=TO.split(&39;),msg=message.as_string())关闭邮件发送客户端

写邮件函数我是借鉴这个大佬的,站在巨人肩膀上嘛,总不能什么都靠自己来

4)防照片检测(即眨眼检测)这个也可以用于疲劳检测

详见:i·bug-resources-Facialpointannotations

FACIAL_LANDMARKS_68_IDXS=OrderedDict([(&34;,(48,68)),(&34;,(17,22)),(&34;,(22,27)),(&34;,(36,42)),(&34;,(42,48)),(&34;,(27,36)),(&34;,(0,17))])

defeye_aspect_ratio(eye):计算距离,水平的C=dist.euclidean(eye[0],eye[3])34;int&创建68*2coords=np.zeros((shape.num_parts,2),dtype=dtype)得到坐标foriinrange(0,shape.num_parts):coords[i]=(shape.part(i).x,shape.part(i).y)returncoords

defpervent_to_photo():初始化计数器COUNTER=0TOTAL=034;loadingfaciallandmarkpredictor…&predictor=dlib.shape_predictor(&39;)34;left_eye&34;right_eye&读取视频print(&34;)vs=cv2.VideoCapture(0)time.sleep(1.0)预处理frame=vs.read()[1]ifframeisNone:break(h,w)=frame.shape[:2]width=1200r=width/float(w)dim=(width,int(h*r))frame=cv2.resize(frame,dim,interpolation=cv2.INTER_AREA)gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)遍历每一个检测到的人脸forrectinrects:分别计算ear值leftEye=shape[lStart:lEnd]rightEye=shape[rStart:rEnd]leftEAR=eye_aspect_ratio(leftEye)rightEAR=eye_aspect_ratio(rightEye)绘制眼睛区域leftEyeHull=cv2.convexHull(leftEye)rightEyeHull=cv2.convexHull(rightEye)cv2.drawContours(frame,[leftEyeHull],-1,(0,255,0),1)cv2.drawContours(frame,[rightEyeHull],-1,(0,255,0),1)如果连续几帧都是闭眼的,总数算一次ifCOUNTER>=EYE_AR_CONSEC_FRAMES:TOTAL+=1显示cv2.putText(frame,&34;.format(TOTAL),(10,30),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)cv2.putText(frame,&34;.format(ear),(300,30),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)cv2.imshow(&34;,frame)34;E:/face_dormitory/unidentified/&34;1.jpg&抓拍break39;&vs.release()cv2.destroyAllWindows()

5)人脸检测函数

转换为灰度face_detector=cv2.CascadeClassifier(&39;)范围在100*100~300*300判断为脸forx,y,w,hinface:cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=1)置信评分confidence越大越不可信ifconfidence>50:globalwarningtimeglobalnumwarningtime+=1ifwarningtime>100:34;E:/face_dormitory/unidentified/&34;.jpg&抓拍cv2.imwrite(r&34;+&34;,frame)39;ddddddddddd&num+=1warningtime=0cv2.putText(img,&39;,(x+10,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),1)else:cv2.putText(img,str(names[ids-1]),(x+10,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),1)cv2.imshow(&39;,img)

相册路径path=&39;切名字name=str(os.path.split(imagePath)[1].split(&39;,2)[1])names.append(name)

6)主函数

打开摄像头,0是本地默认,1是外用,我把本地关了把外用开着所以直接0cap=cv2.VideoCapture(0)name()whileTrue:flag,frame=cap.read()ifnotflag:breakface_detect_demo(frame)39;')==cv2.waitKey(10):breakcv2.destroyAllWindows()cap.release()?

5.参考文章

感谢大佬1

感谢大佬2

感谢大佬3

6.可能遇到的问题

1.如果你搭建了虚拟环境且里面安装了opencv,但是再引用的时候报错没装库,看看有没有将虚拟环境导入kernel

2.如果你发现我的逻辑有问题,相信你自己,错的肯定是我,请务必怼我,毕竟有探讨才有完善,我也是个小菜鸡

3.如果出现”NomodulenamedXXX“,说明安装差库了,请跑到虚拟环境里去安装,虚拟环境是独立的,你之前安装了什么都跟虚拟环境无关

关于扫脸网站源码分享到此分享完毕,希望能帮助到您。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平