版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
欢迎大家进入神经网络的学习
说起神经网络大家可能会觉得很熟悉,对于其实它对于大部分的人来说都是很容易学习的,今天我就用人脸识别的例子来带大家熟悉它。
python环境的搭建
我们对python的安装进行了精简,哪怕是新手小白也可以学会。
-
下载后就可以点击安装,但要注意的是pycharm可以安装community版,这个版本足够你使用,当然,土豪请绕路;
-
你可以在python的安装路径下的scripts中找到IDLE,这是一个较为友好的python交互界面。
当然,你也可以直接在搜索栏搜索。
-
有的老师喜欢用jupyter nootbook来教学和编辑,要找它的话我们就可以打开开始菜单>anaconda>jupyter nootbook,这样就找到它了。
-
这样,python的基本环境我们就熟悉了,下一步就开始人脸识别的内容。
人脸数据的检测和采集
import cv2
def getTrainingData(window_name, camera_id, path_name, max_num): # path_name是图片存储目录,max_num是需要捕捉的图片数量
cv2.namedWindow(window_name) # 创建窗口
cap = cv2.VideoCapture(camera_id) # 打开摄像头
classifier = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml') # 加载分类器
color = (0, 255, 0) # 人脸矩形框的颜色
num = 0 # 记录存储的图片数量
while cap.isOpened():
ok, frame = cap.read()
if not ok:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 灰度化
faceRects = classifier.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(faceRects) > 0:
for faceRect in faceRects:
x, y, w, h = faceRect
# 捕捉到的图片的名字,这里用到了格式化字符串的输出
image_name = '%s%d.jpg' % (path_name,
num) # 注意这里图片名一定要加上扩展名,否则后面imwrite的时候会报错:could not find a writer for the specified extension in function cv::imwrite_ 参考:https://stackoverflow.com/questions/9868963/cvimwrite-could-not-find-a-writer-for-the-specified-extension
image = frame[y:y + h, x:x + w] # 将当前帧含人脸部分保存为图片,注意这里存的还是彩色图片,前面检测时灰度化是为了降低计算量;这里访问的是从y位开始到y+h-1位
cv2.imwrite(image_name, image)
num += 1
# 超过指定最大保存数量则退出循环
if num > max_num:
break
cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2) # 画出矩形框
font = cv2.FONT_HERSHEY_SIMPLEX # 获取内置字体
cv2.putText(frame, ('%d' % num), (x + 30, y + 30), font, 1, (255, 0, 255),
4) # 调用函数,对人脸坐标位置,添加一个(x+30,y+30)的矩形框用于显示当前捕捉到了多少人脸图片
if num > max_num:
break
cv2.imshow(window_name, frame)
c = cv2.waitKey(10)
if c & 0xFF == ord('q'):
break
cap.release() # 释放摄像头并销毁所有窗口
cv2.destroyAllWindows()
print('Finished.')
# 主函数
if __name__ == '__main__':
print('catching your face and writting into disk...')
getTrainingData('getTrainData', 0, 'dataset/two/',1000) # 注意这里的training_data_xx 文件夹就在程序工作目录下
在这里需要注意的是,库文件需要我们提前添加好,添加库的教程我会在其他的贴子中讲解。
这样,我们将1000张人脸数据保存在了名为two的文件夹下,文件夹需要提前创建,否则会报错。
建立我们的训练集
class Dataset:
def __init__(self, path_name):
#训练集
self.train_images = None
self.train_labels = None
#验证集
self.valid_images = None
self.valid_labels = None
#测试集
self.test_images = None
self.test_labels = None
#数据集加载路径
self.path_name