python+tensorflow2.0实现简单人脸识别-----第一天:训练集的采集

作者想着本次寒假自己动手做一个简单的人脸识别系统。
环境为tensorflow2.0,python3.9.0,opencv3.4.15。

本人新手一枚,代码如有错误还望各位指教。


总体思路是制作数据集—编写模型—训练模型—调整模型。

第一天首先把人脸数据集做好。思路是用opencv来识别人脸(利用笔记本自带摄像头),将人脸裁剪出来,然后统一大小,最后保存。

第一步
导入opencv

import cv2

利用opencv里面自带的人脸识别框架haarcascade来识别人脸。

face_cascade = cv2.CascadeClassifier("E:\\anaconda\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml")#实例化识别框架

第二步
实例化opencv摄像头

cap=cv2.VideoCapture(0 + cv2.CAP_DSHOW)

0表示摄像头用自带的摄像头(如果是外接摄像头则要改变)。后面的‘+ cv2.CAP_DSHOW’是调试的时候短时间内连续打开摄像头就会报错,我参考了一位老哥的帖子加上的,十分感谢。原帖地址

第三步
采集人脸信息。

while True:
    ret,img=cap.read()#将摄像头读取到的图像传给参数
    cv2.imshow("img",img)#显示图像
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将采集到的图片转为灰度图片
    faces = face_cascade.detectMultiScale(gray,1.1,5)#用框架识别图片里的人脸
    if len(faces)>0:#如果识别到了人脸
        for faceRect in faces:#可能不止一张人脸
            x,y,w,h = faceRect#得到人脸的坐标
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)#用矩形框出人脸
    if cv2.waitKey(1) & 0xFF == ord('q'):#如果按下q键
        cap.release()#释放摄像头
        cv2.destroyAllWindows()#关闭所有窗口
        break#退出循环

第四步
截取人脸,统一像素并保存

image = gray[y:h+y, x:w+x]#裁剪出人脸
new = cv2.resize(image, (200, 200))#统一像素为200×200(根据后期训练模型可以更改)
cv2.imwrite('E:\\myPicture\\001.jpg', new)#图片保存(地址自行更改)

完整代码如下

import cv2

face_cascade = cv2.CascadeClassifier("E:\\anaconda\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml")#实例化识别框架
cap=cv2.VideoCapture(0 + cv2.CAP_DSHOW)
k = 0
while True:
    ret,img=cap.read()#将摄像头读取到的图像传给参数   
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将采集到的图片转为灰度图片
    faces = face_cascade.detectMultiScale(gray,1.1,5)#用框架识别图片里的人脸
    if len(faces)>0:#如果识别到了人脸
        for faceRect in faces:#可能不止一张人脸
            x,y,w,h = faceRect#得到人脸的坐标
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)#用矩形框出人脸
            image = gray[y:h+y, x:w+x]#裁剪出人脸
            new = cv2.resize(image, (200, 200))#统一像素为200×200(根据后期训练模型可以更改)
            k += 1#K为了改变图片保存地址
            cv2.imwrite('E:\\myPicture\\00' + str(k) + '.jpg', new)#图片保存(地址自行更改) 
    cv2.imshow("img",img)#显示图像
    if cv2.waitKey(1) & 0xFF == ord('q'):#如果按下q键
        cap.release()#释放摄像头
        cv2.destroyAllWindows()#关闭所有窗口
        break#退出循环

代码在我的笔记本上运行良好。
还有代码里最好加上延时机制,不然图片保存的太快,很多张都一样的话,就会失了严谨,训练效果不会好。
中间遇到有很多问题,没有在文章里写出来,如果有问题的可以私信我,我看见都会努力解决的。
今天就先这样啦!!!

你可能感兴趣的:(python,opencv,计算机视觉,tensorflow,人脸识别)