近年以来,人工智能技术飞速发展,其主要分为鉴别和生成两个方面,其中人脸识别技术是其鉴别技术的重要分支,本文详细讲解使用opencv+sklearn+tensorflow技术,实现人脸识别的学习性项目。
一、系统功能分析
本项目具体功能模块如下所示:
1、采样样本照片
调用本地计算机摄像头采集照片作为样本,设置使用快捷键进行采样和取样,一次性可以多张照片,采样照片越多,人脸识别的成功率越高。
2、图片处理
将采集到原始图像转化为标准数据文件,即数据集。
3、深度学习
创建深度学习模型,学习训练、将训练结果保存为".h5"文件.
4、人脸识别
使用训练所得的模型实现人脸识别功能,即可以从本地摄像头识别,还可从网络摄像头识别。
二、系统流程分析
项目实现的流程如下所示:
三、技术分析
项目主要用到以下的框架:
(1)Flask
典型的Python Web开发框架
(2)opencv-Python
它是OpenCV的Python接口,一个开源发行的跨平台计算机视觉库,轻量级且高效(由一系列C函数和少量C++类构成),提供Python,Rupy,MATLAB等语言的接口,实现图像处理和计算机视觉方面的通用算法。
(3)sklearn
机器学习中常用第三方模块,对常用机器学习方法进行封装,包括回归、降维、分类、聚类等方法。
(4)tensorflow
TensorFlow是一个由Google Brain团队开发的开源机器学习框架。最初是作为Google内部工具而开发的,但随后在2015年被开源,以便更广泛的社群能够利用和贡献于这个框架。TensorFlow支持从研究到生产的全面工作流程,包括模型设计、训练、优化和部署。
四、框架安装
安装以上框架需要使用以下命令:
pip install flask //安装Flask框架
pip install opencv-python //安装opencv-python框架
pip install scikit-learn //安装sklearn框架
pip install tensorflow //安装tensoflow框架
五、照片样本采集
样本采集模块getCameraPics.py基本摄像头采集视频流中的数据,截取人脸照片作为样本并存储。具体代码如下:
import os
import cv2
import random
import numpy as np
from tensorflow.python.keras.utils import np_utils
from keras.models import Sequential,load_model
from keras.layers import Dense,Activation,Convolution2D,MaxPooling2D,Flatten,Dropout
from sklearn.model_selection import train_test_split
def cameraAutoForPictures(saveDir='data/'):
"调用计算机摄像头来自动获取图片"
if not os.path.exists(saveDir):
os.makedirs(saveDir)
count=1
cap=cv2.VideoCapture(0)
width,height,w=640,480,360
cap.set(cv2.CAP_PROP_FRAME_WIDTH,width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,height)
crop_w_start=(width-w)//2
crop_h_start=(height-w)//2
print('width:',width)
print('height:',height)
while True:
ret,frame=cap.read()
frame=frame[crop_h_start:crop_h_start+w,crop_w_start:crop_w_start+w]
frame=cv2.flip(frame,1,dst=None)
cv2.imshow("capture",frame)
action=cv2.waitKey(1)&0xff
if action==ord('c'):
saveDir=input(u"请输入新的存储目录:")
if not os.path.exists(saveDir):
os.makedirs(saveDir)
elif action==ord('p'):
cv2.imwrite("%s/%d.jpg" % (saveDir,count),cv2.resize(frame,(224,224),interpolation=cv2.INTER_AREA))
print(u"%s:%d张图片" % (saveDir,count))
count+=1
if action==ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__=='__main__':
cameraAutoForPictures(saveDir='data/guan