1.项目的意义
我也不知道有啥意义,大概只是新手村的一个小小任务吧。
2.项目背景
传统的纸质打卡已经逐渐被淘汰,转而用于更高级的指纹打卡和人脸打卡,这是不可避免的时代,所以在这样的情况,我们小队做了一个基于人脸打卡的系统的设计
3.需要用到的第三方库
import cv2.cv2 as cv #图像处理
import os #科学计算
import numpy as np #数组计算
from PIL import Image #图片转灰
4.实现的效果图
5.环境的搭建
6.错误集合
至于为什么会显示module ‘cv2’ has no attribute
'face’的错误,虽然大多数的大佬都是进行各种各样的骚操作来解决这个问题,但是你最终会发现,原因很简单很简单。
在第三方库搜索一下,就是第一个,点击下载,即可解决训练问题
opencv-contrib
7.完整代码
#导入第三方库 import cv2.cv2 as cv #图像处理 import os #科学计算 import numpy as np #数组计算
from PIL import Image #图片转灰 #函数 def get_img(path): #调用训练集(调用别人的训练集来给自己的图片裁剪)
face= cv.CascadeClassifier('haarcascade_frontalface_alt2.xml') #图片集 picture = []
#标签集 ids = [] #额.....是整理好的图片集合 Imagepaths = [os.path.join(path, f) for f in os.
listdir(path)] #循环每一张图片 for Imagepath in Imagepaths: #提取这张图片的id号 id = int(os.
path.split(Imagepath)[1].split('.')[0]) #将图片转灰 PIL_img = Image.open(Imagepath).
convert('L') #将图片转化为uint8 img_numpy = np.array(PIL_img, 'uint8') #提取人脸 faces =
face.detectMultiScale(img_numpy) for x, y, w, h in faces: picture.append(
img_numpy[y:y+h, x:x+w]) ids.append(id) return picture, ids path =
'C://Users//xlj//PycharmProjects//untitled//1//' faces, ids = get_img(path) #
print('测试') recognizer = cv.face.LBPHFaceRecognizer_create() recognizer.train(
faces, np.array(ids)) recognizer.write('a.xml') #销毁所有的数据 cv.destroyAllWindows()
def compare_img(img): face = cv.CascadeClassifier(
'haarcascade_frontalface_alt2.xml') gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces= face.detectMultiScale(gray) for x, y, w, h in faces: cv.rectangle(img,(x,
y), (x+w, y+h), (0,255,0),2) id, picture = recognizer.predict(gray[y:y+h, x:x+w
]) print('标签:',id,'置信评分:',picture) cv.imshow('out', img) img = cv.imread(
'123.webp') compare_img(img) cv.waitKey(0) cv.destroyAllWindows()
8.细节注意
#这个是读取文件的位置,在这个文件夹里放置你的图片进行训练 path =
'C://Users//xlj//PycharmProjects//untitled//1//' #这是你训练出来的后缀为xml文件,是不是很酷
recognizer.write('a.xml')
*
10.结尾
这个代码只有短短几十行,多敲几遍你就能熟练掌握其中的知识。关于一些更深层次的细节,比如他们的含义或者如何搭建这个平台,这不是一句俩句就能说清楚的,建议大家多搜搜相关的内容。过几天我会写一个识别人脸的语音播报系统,这个大家是能够自己动手的,百度一波就能知道相关的的细节并且自己去实现功能。