首先,你必须安装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版)持续更新相关推荐

  1. 制作自己的人脸识别系统

    by Sigurður Skúli 通过SigurðurSkúli 制作自己的人脸识别系统 (Making your own Face Recognition System) Face recogni ...

  2. python人脸识别毕业设计-Python基于Dlib的人脸识别系统的实现

    之前已经介绍过人脸识别的基础概念,以及基于opencv的实现方式,今天,我们使用dlib来提取128维的人脸嵌入,并使用k临近值方法来实现人脸识别. 人脸识别系统的实现流程与之前是一样的,只是这里我们 ...

  3. python人脸识别环境搭建_怎样用3分钟搭建 Python 人脸识别系统

    Face Recognition 使用的是 C++ 开源库 dlib 通过深度学习模型构建的先进人脸识别系统,可通过 Python 接口或命令行工具对图片中的人脸进行识别.在 Labeled Face ...

  4. python人脸识别系统下载_简单的Python人脸识别系统

    案例一 导入图片 思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口 # 1.导入库 import cv2 # 2.加载图片 img = cv2.imread(' ...

  5. python怎么另起一行阅读答案_使用Python+Dlib构建人脸识别系统(在Nvidia Jetson Nano 2GB开发板上)...

    Nvidia Jetson Nano 2GB开发板是一款新的单板机 售价59美元 运行带有GPU加速的人工智能软件.在2020年 你可以从一台售价59美元的单板计算机中获得令人惊叹的性能 让我们用它来 ...

  6. 用Python做一个人脸识别系统,简单操作又实用~

    导语 今天给大家介绍一个非常简洁的人脸识别系统: 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.而通过我们Python编程,几行代码就可以实现人脸识别,这主要得益于face_reco ...

  7. python简单的人脸识别系统(PCA+逻辑回归)

    python简单的人脸识别系统(PCA+逻辑回归) 数据集:ORL人脸库 特征提取:PCA降维,将112*92降成30 分类器:逻辑回归 ** 代码: from tkinter import * fr ...

  8. Python | 人脸识别系统 — 用户操作

    本博客为人脸识别系统的摄像头画面展示代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for ...

  9. Python | 人脸识别系统 — 人脸比对 代码部分

    本博客为人脸识别系统的人脸比对代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for us ...

最新文章

  1. GoogleLog(GLog)源码分析
  2. 周星驰的10个华人记录
  3. Docker - 手动迁移镜像
  4. Windows中常用的git GUI客户端的介绍
  5. Ai写的文章会死掉至少90%的创作者,作为图文自媒体,如何破局?
  6. 排序算法 —— 归并排序
  7. CentOS 7下安装Mono
  8. ios14.3开发之使用纯代码创建UITabbarController
  9. git安装与配置_git 安装及基本配置
  10. python面向对象怎么解决_Python面向对象编程1
  11. vue的实例属性$options
  12. 2016年4月计算机组成原理试题答案,全国2018年4月自考(02318)计算机组成原理试题及答案...
  13. 常见List面试问题
  14. Data Source与数据库连接池简介 JDBC简介(八)
  15. Gamma 分布与 Beta 分布及共轭的含义
  16. ps手柄震动测试软件,PS3 可实现震动 用PS3手柄连接电脑图文教程 - 电玩巴士
  17. 如何共享OneNote笔记本
  18. MIPS中的异常处理和系统调用
  19. MySQL之my.cnf配置文件
  20. ZZULIOJ 1919 D

热门文章

  1. centos8mysql配置文件在哪里_Centos7 查看Mysql配置文件
  2. sqluldr2在Linux中的使用
  3. 关于8锁问题详细介绍
  4. 十大主流集群调度系统大盘点
  5. MP1655GG-Z
  6. Hadoop详细配置教程
  7. 交叉编译的几个常用工具
  8. 用CS3817自己做个功放(附原理图)
  9. linux C传入路径递归创建目录和文件接口实现
  10. Python-下载第三方模块,更换pip下载源