如何使用Python制作人脸识别系统(2022/5/28版)持续更新
首先,你必须安装Anaconda Individual Edition。链接如下:Anaconda | Individual Edition
注意:如果你有管理员权限,请安装给ALL Users!!!亲测有效,否则报错!
在安装完毕后,打开Anaconda。
有的网友和我说他们不想安装anaconda, 那么小Q在此给出一个解决方法:
1. 去python.org上下载Python
2. 在Python里运行代码块即可
不知可不可以,请各位不想装Anaconda的大佬们尝试后留言~谢谢!
或者可以在以下链接里写上你的答案哦~
投票链接:Anaconda安装小调查
点击第一个按钮CMD.exe Prompt
输入:
pip install numpy -i https://mirrors.aliyun.com/pypi/simple
pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple
pip install pandas -i https://mirrors.aliyun.com/pypi/simple
pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple
pip install tensorflow -i https://mirrors.aliyun.com/pypi/simple
pip install keras -i https://mirrors.aliyun.com/pypi/simple
pip install opencv-contrib-python -i https://mirrors.aliyun.com/pypi/simple
如果报错,请在-i前写上--users !
然后,打开JupyterNotebook
在拷贝代码前,先在源文件里建立data文件夹和training文件夹。否则,会存储失败
#-----获取人脸样本-----
import cv2#调用笔记本内置摄像头,参数为0,如果有其他的摄像头可以调整参数为1,2
camera = cv2.VideoCapture(0)
#调用人脸分类器,要根据实际路径调整3
face_classifier = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
#为即将录入的脸标记一个id
face_id = input('\n User data input, Look at the camera and wait ...')
#sampleNum用来计数样本数目
count = int(input("Please enter start index: "))
tot = count + 100
#count是上一个文件的结束号码,如果没有就写0
while True: #从摄像头读取图片success,img = camera.read() #转为灰度图片,减少程序符合,提高识别度if success is True: gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) else: break#检测人脸,将每一帧摄像头记录的数据带入OpenCv中,让Classifier判断人脸#其中gray为要检测的灰度图像,1.3为每次图像尺寸减小的比例,5为minNeighborsfaces = face_classifier.detectMultiScale(gray, 1.3, 5)#框选人脸,for循环保证一个能检测的实时动态视频流for (x, y, w, h) in faces:#xy为左上角的坐标,w为宽,h为高,用rectangle为人脸标记画框cv2.rectangle(img, (x, y), (x+w, y+w), (255, 0, 0))#成功框选则样本数增加count += 1 #保存图像,把灰度图片看成二维数组来检测人脸区域#(这里是建立了data的文件夹,当然也可以设置为其他路径或者调用数据库)img_name = "data/User."+str(face_id)+'.'+str(count)+'.jpg'print(img_name)cv2.imwrite(img_name,gray[y:y+h,x:x+w]) #显示图片cv2.imshow('image',img) #保持画面的连续。waitkey方法可以绑定按键保证画面的收放,通过q键退出摄像if cv2.waitKey(1) == ord('q'):break #或者得到100个样本后退出摄像,这里可以根据实际情况修改数据量#实际测试后100张的效果是比较理想的elif count >= tot:break#关闭摄像头,释放资源camera.release()
cv2.destroyAllWindows()
注:如果你想要增加准确率,请将100改为800, 更改后代码如下:
#-----获取人脸样本-----
import cv2#调用笔记本内置摄像头,参数为0,如果有其他的摄像头可以调整参数为1,2
camera = cv2.VideoCapture(0)
#调用人脸分类器,要根据实际路径调整3
face_classifier = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') #待更改
#为即将录入的脸标记一个id
face_id = input('\n User data input, Look at the camera and wait ...')
#sampleNum用来计数样本数目
count = int(input("Please enter start index: "))
tot = count + 800while True: #从摄像头读取图片success,img = camera.read() #转为灰度图片,减少程序符合,提高识别度if success is True: gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) else: break#检测人脸,将每一帧摄像头记录的数据带入OpenCv中,让Classifier判断人脸#其中gray为要检测的灰度图像,1.3为每次图像尺寸减小的比例,5为minNeighborsfaces = face_classifier.detectMultiScale(gray, 1.3, 5)#框选人脸,for循环保证一个能检测的实时动态视频流for (x, y, w, h) in faces:#xy为左上角的坐标,w为宽,h为高,用rectangle为人脸标记画框cv2.rectangle(img, (x, y), (x+w, y+w), (255, 0, 0))#成功框选则样本数增加count += 1 #保存图像,把灰度图片看成二维数组来检测人脸区域#(这里是建立了data的文件夹,当然也可以设置为其他路径或者调用数据库)img_name = "data/User."+str(face_id)+'.'+str(count)+'.jpg'print(img_name)cv2.imwrite(img_name,gray[y:y+h,x:x+w]) #显示图片cv2.imshow('image',img) #保持画面的连续。waitkey方法可以绑定按键保证画面的收放,通过q键退出摄像if cv2.waitKey(1) == ord('q'):break #或者得到800个样本后退出摄像,这里可以根据实际情况修改数据量,实际测试后800张的效果是比较理想的elif count >= tot:break#关闭摄像头,释放资源camera.release()
cv2.destroyAllWindows()
运行上述代码,在第一个输入框里会看见如下结果:
输入你的名字后敲一个enter。记住,不要写任何中文字符,否则后面的识别和训练的过程会报错!
接着输入0,如果你要两个人,需要分两次运行。一次输入0,第二次输入100。三个人就以此类推【希望没被我绕晕QAQ】
接着就看着摄像头,慢慢等待指示灯关闭。
这是一个5人的样例,各位大佬请过目QAQ
然后,在下一个Cell黏贴下列代码
#-----建立模型、创建数据集-----#-----建立模型、创建数据集-----import os
import cv2
import numpy as np
from PIL import Image
#导入pillow库,用于处理图像
#设置之前收集好的数据文件路径
path = 'data'#初始化识别的方法
recog = cv2.face_LBPHFaceRecognizer.create()name_map = {'Unknown':0,'在这里输入第一个人的名字(英文)':1,'第二个人':2,'第三个人':3,'第四个人':4,"第五个人":5,"第六个人":6} #如果人数太多,可以删除一部分。如果太少也可以添加一部分#调用熟悉的人脸分类器
detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')#创建一个函数,用于从数据集文件夹中获取训练图片,并获取id
#注意图片的命名格式为User.id.sampleNum
def get_images_and_labels(path):image_paths = [os.path.join(path,f) for f in os.listdir(path)]#新建连个list用于存放face_samples = []ids = []#i = 0#遍历图片路径,导入图片和id添加到list中for image_path in image_paths:#print(i, image_path)#i += 1#通过图片路径将其转换为灰度图片img = Image.open(image_path).convert('L')#将图片转化为数组img_np = np.array(img,'uint8')if os.path.split(image_path)[-1].split(".")[-1] != 'jpg':continue#为了获取id,将图片和路径分裂并获取#print(image_path)#print(os.path.split(image_path))#print(os.path.split(image_path)[-1].split("."))#print(os.path.split(image_path)[-1].split(".")[1])#id = int(os.path.split(image_path)[-1].split(".")[-2])id = 3name = os.path.split(image_path)[-1].split(".")[-3]if name in name_map:id = name_map[name]#这部分的作用是删除读取失败的文件#print(id)faces = detector.detectMultiScale(img_np,1.3,5)#将获取的图片和id添加到list中for(x,y,w,h) in faces:face_samples.append(img_np[y:y+h,x:x+w])ids.append(id)#print(len(face_samples))return face_samples,ids#调用函数并将数据喂给识别器训练
print('Training...')
faces,ids = get_images_and_labels(path)
#训练模型
recog.train(faces,np.array(ids))
#保存模型
recog.save('trainner/trainner.yml')
print("Success!You have finished training. Go on and Continue!")
好啦,当你运行完后,会看见一下情况:
接着,输入:
#-----检测、校验并输出结果-----
import cv2#准备好识别方法
recognizer = cv2.face.LBPHFaceRecognizer_create()#使用之前训练好的模型
recognizer.read('trainner/trainner.yml')#再次调用人脸分类器
#cascade_path = "haarcascade_frontalface_default.xml"
#face_cascade = cv2.CascadeClassifier(cascade_path)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
#加载一个字体,用于识别后,在图片上标注出对象的名字
font = cv2.FONT_HERSHEY_SIMPLEXidnum = 0
#设置好与ID号码对应的用户名,如下,如0对应的就是初始names = ['Unknown', '第一个人','第二个人','第三个人', '第四个人',"第四个人","第五个人"]#调用摄像头
cam = cv2.VideoCapture(0)
minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)while True:ret,img = cam.read()gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#识别人脸#print(gray)faces = face_cascade.detectMultiScale(gray,scaleFactor = 1.3,minNeighbors = 5,#minSize = (int(minW),int(minH)))#进行校验for(x,y,w,h) in faces:cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)idnum,confidence = recognizer.predict(gray[y:y+h,x:x+w])#计算出一个检验结果if confidence < 100:idum = names[idnum]confidence = "{0}%",format(round(100-confidence))else:idum = "unknown"confidence = "{0}%",format(round(100-confidence))#输出检验结果以及用户名cv2.putText(img,str(idum),(x+5,y-5),font,1,(0,0,255),1)cv2.putText(img,str(confidence),(x+5,y+h-5),font,1,(0,0,0),1)#展示结果cv2.imshow('camera',img)k = cv2.waitKey(20)if k == 27:break#释放资源if cv2.waitKey(1) == ord('q'):break
cam.release()
cv2.destroyAllWindows()
接着就可以在屏幕里看见你啦!
PS:如果没看见窗口要么就是在任务栏,要么就是你的电脑CPU不要太好。
CPU | i5第10代及以上(其他的CPU没有测试过) |
电脑 | Windows10及以上,最好不要Windows11 |
最后,祝你运行成功!
最新内容1:(更新时间2022/2/12 22:00)
前面好像忘记放上一张效果图了, 效果如下:
最后的最后, 我必须说: 虽然CSDN上很多的都是错误代码, 但是我确保这个教程是正确的 (至少在1年内吧)。
声明
后续还会有关于AI的其他文章会放在Python和AI这两个专栏里, 全部免费! :-)
玩Python的小Q
2022/2/12
如何使用Python制作人脸识别系统(2022/5/28版)持续更新相关推荐
- 制作自己的人脸识别系统
by Sigurður Skúli 通过SigurðurSkúli 制作自己的人脸识别系统 (Making your own Face Recognition System) Face recogni ...
- python人脸识别毕业设计-Python基于Dlib的人脸识别系统的实现
之前已经介绍过人脸识别的基础概念,以及基于opencv的实现方式,今天,我们使用dlib来提取128维的人脸嵌入,并使用k临近值方法来实现人脸识别. 人脸识别系统的实现流程与之前是一样的,只是这里我们 ...
- python人脸识别环境搭建_怎样用3分钟搭建 Python 人脸识别系统
Face Recognition 使用的是 C++ 开源库 dlib 通过深度学习模型构建的先进人脸识别系统,可通过 Python 接口或命令行工具对图片中的人脸进行识别.在 Labeled Face ...
- python人脸识别系统下载_简单的Python人脸识别系统
案例一 导入图片 思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口 # 1.导入库 import cv2 # 2.加载图片 img = cv2.imread(' ...
- python怎么另起一行阅读答案_使用Python+Dlib构建人脸识别系统(在Nvidia Jetson Nano 2GB开发板上)...
Nvidia Jetson Nano 2GB开发板是一款新的单板机 售价59美元 运行带有GPU加速的人工智能软件.在2020年 你可以从一台售价59美元的单板计算机中获得令人惊叹的性能 让我们用它来 ...
- 用Python做一个人脸识别系统,简单操作又实用~
导语 今天给大家介绍一个非常简洁的人脸识别系统: 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.而通过我们Python编程,几行代码就可以实现人脸识别,这主要得益于face_reco ...
- python简单的人脸识别系统(PCA+逻辑回归)
python简单的人脸识别系统(PCA+逻辑回归) 数据集:ORL人脸库 特征提取:PCA降维,将112*92降成30 分类器:逻辑回归 ** 代码: from tkinter import * fr ...
- Python | 人脸识别系统 — 用户操作
本博客为人脸识别系统的摄像头画面展示代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for ...
- Python | 人脸识别系统 — 人脸比对 代码部分
本博客为人脸识别系统的人脸比对代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for us ...
最新文章
- GoogleLog(GLog)源码分析
- 周星驰的10个华人记录
- Docker - 手动迁移镜像
- Windows中常用的git GUI客户端的介绍
- Ai写的文章会死掉至少90%的创作者,作为图文自媒体,如何破局?
- 排序算法 —— 归并排序
- CentOS 7下安装Mono
- ios14.3开发之使用纯代码创建UITabbarController
- git安装与配置_git 安装及基本配置
- python面向对象怎么解决_Python面向对象编程1
- vue的实例属性$options
- 2016年4月计算机组成原理试题答案,全国2018年4月自考(02318)计算机组成原理试题及答案...
- 常见List面试问题
- Data Source与数据库连接池简介 JDBC简介(八)
- Gamma 分布与 Beta 分布及共轭的含义
- ps手柄震动测试软件,PS3 可实现震动 用PS3手柄连接电脑图文教程 - 电玩巴士
- 如何共享OneNote笔记本
- MIPS中的异常处理和系统调用
- MySQL之my.cnf配置文件
- ZZULIOJ 1919 D