python人脸识别
人脸识别的崛起
什么是人脸识别
人脸识别是将采集到的数据信息,根据人脸特征信息进行比对,从而辨识身份的技术。每逢谈到人脸识别技术,就会想到人工智能,近年来,人工智能的发展成为当代技术革命的一部分。可以说计算机领域技术的发展,极大的带动了这场革命。
常常在想人脸识别是如何做到,的这里面与复杂高级的数据建模,建立人脸各部分的数据模型密切相关。说白了,其实也就是算法,算法的研究,成为推动智能发展的顶梁柱。
这里面涉及的比较多,无论是从深度学习,还是机器学习,人工智能,这里面的实现过程,想必都是十分复杂的。 在下知识面比较薄弱,不敢多言。不过肯定的一点是,你的人脸识别首先要将人脸转化为计算机可以识别的数据,人脸识别其实就是计算机方面的数据识别。
人脸识别技术的应用和发展
谈到应用,我的第一映像就是手机上的人脸识别解锁,目前在学校公寓里面也有人脸识别的机器,我记得首先是收集了我们学生们的照片,应该是存入数据库的,我们学生的信息,包括学号,以及所在系等等,学校都是存入数据库的。学生在进入公寓时需要进行人脸识别,机器会进行识别。系统有两种识别方式,一是识别人像,二是进行刷卡,刷卡会将自己的信息读取,会与数据库的信息对比,也是一种识别的方式。
目前,从我国人脸识别技术应用来看,主要集中在三大领域:考勤门禁、安防以及金融等等。人脸识别目前面临着一个难题是,对于明亮可能有点要求,像黑暗的环境就比较困难,还有面部本身黑色的人也可能会有误差。但是技术革命的发展,也必将解决这一难题。只有你想不到的,没有做不到的。
应用前景:随着人工智能的兴起,更加高端的识别技术才是主流发展方向,无需接触、更加方便、直观的方式是未来方向,人脸识别具备无需被测者配合的特点,采集器扫过人脸就能进行对比,这在公安刑侦领域有着巨大的前景,在门禁安防领域,操作更加便捷的人脸识别也会更受欢迎。
python人脸识别
导入库
python是一门强大的计算机编程语言,我们常常要用到python中的库,今天我们用到的库是需要安装的,因为不是python的内置库。 1:opencv-python 2:face_recognition
我们这里主要介绍通过控制台命令导入库,不过这里可能与一般情况下的固定格式的导入有所区别。当然你可以借用Pycharm,以及直接去网站上安装相应的包。我比较喜欢控制台命令,因为感觉Pycharm导入某些库是比较慢的。
导入opencv,这和python的版本是有区别的,我的是python3.7版本的。在控制台导入时,我们可以这样导入,opencv是依赖numpy的,我们一般这样导入,首先我们导入cmake,,pip install cmake -i 镜像源。
目前国内的镜像源有如下: 阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学 http://pypi.hustunique.com/simple/
山东理工大学 http://pypi.sdutlinux.org/simple/
我们再导入opencv-python,这样导入 pip install opencv-python -i 镜像源 -trusted-host
trusted-host是代表信任该镜像源,这里主要针对可能出现不信任的提示的情况。
同理,我们导入face_recognition时,我们这样在控制台这样写:pip install face_recognition -i 镜像源 -trusted-host
这里可能会出现内存占用很大的问题,不过等一会就好了
实现代码
此代码的目的是实现对图片中人脸的识别,并判断是否是同一张脸,是则返回yes,否则返回no,图片会显示出来,并显示划定人脸的位置框型。yes和no会在图片上方显示。
下面展示一些 内联代码片
。
#import sys #python内置库
import cv2 #计算机视觉领域
import face_recognition #人脸识别库,如果读取图片的话,会是图像矩阵
#就是每个图片的rgb
# 1.人脸数据
# 2.算法
# 3.建立模型
# 4.训练模型
# 5.测试模型
# 6.上线使用
# 1读取
face_image = face_recognition.load_image_file("E://1.jpg")#读取图片
# 2进行人脸特征提取 向量化
#128维的五官数据
face_encoding = face_recognition.face_encodings(face_image)
# 3人脸位置
face_locations = face_recognition.face_locations(face_image)
# 判断
n = len(face_encoding)
#如果超过连个人就退出来
if n>2:
print('超过两个人')
sys.exit()
face1 = face_encoding[0]
face2 = face_encoding[1]
# 4比较 阈值 tolerance指定容错率,越小越严格
result = face_recognition.compare_faces([face1],face2,tolerance=0.5)
if result == [True] :
print(1)
name = 'Yes'
else :
print(0)
name = 'No'
#绘图
for i in range(len(face_encoding)):
face_encoding = face_encoding[i]
face_location = face_locations[i]
top,right,bottom,left = face_location
#画框 图像 位置 颜色 粗细
cv2.rectangle(face_image,(left,top),(right,bottom),(0,255,0),2)
#写字
cv2.putText(face_image,name,(left,top),cv2.FONT_HERSHEY_SIMPLEX,0.8,(255,0,0,2))
face_image_rgb = cv2.cvtColor(face_image,cv2.COLOR_BGR2RGB)
# 展示图像
cv2.imshow("output",face_image_rgb)
#防止闪退
cv2.waitKey(0)
我随便找了一张图,给大家简单演示下这个过程 我们来看实现结果
我们看到结果是这两个人不是同一张脸,当然,这张图可能比较容易辨别。各位可以尝试难度比较大的。据说face_recognition库地识别率达到99.5%以上,这是保底了。 注意代码的指定容错率,这也是和结果很有关系的。
当然对于视频动态图像也是可以的,我们python中也有调用摄像头的模块,以及也有可以将手机的摄像头将摄像头转换地址的,我们可以在代码中加入进来,调用摄像头并控制拍照片,这样就可以和这个结合起来,实现动态人脸识别。我们可以有这个思路,这里只是给大家简单介绍一下python的这个人脸识别库。当然也会有其他的编程语言的实现人脸识别。
后期会写出动态拍照人脸识别。说到底,还是调用库啊,会写库和算法的才是大佬,只会用方法的我还是有很多需要去学习。
毕竟才疏学浅,在下还望各位大佬指正。期待与大家共同进步。 -----jgdabc