前言
今天带来的是基于Opencv(c++底层编译)的人脸识别,再利用PyMySQL实现对数据的储存。
具体步骤是:
使用到的库,模块有
①CV2(Opencv):图像识别,摄像头调用
②os:文件操作
③numpy:NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
④PIL:Python Imaging Library,Python平台事实上图像处理的标准库
⑤PyMySQL:用户信息存储(可以用 Navicat for MySQL来可视化操作)
当然电脑应该先下载mysql数据库,本次默认的是使用mysql自带的test数据库,具体参数也可自行修改,下载教程百度有,使用可以看我另一篇博文
建议用pip命令时使用清华镜像网站,否则下载可能很慢
pip install [名字] -i https://pypi.tuna.tsinghua.edu.cn/simple
还需要下载Opencv提供的人脸模型特征数据 版本自己选择,还有显示的字体(simsun.ttc文件)应该放到py文件的同个目录 下载网址是下载地址
Opencv官网
下载完后将 ./data/haarcascades/haarcascade_frontalface_default.xml 复制到跟py文件同个目录
首先
首先应该在py文件的目录里面创建一个名为Picture_resources的子文件夹,当然可以修改代码中的生成文件目录
先是对人脸数据的抓取,然后生成一帧一帧的人脸灰度图片储存起来,过程中还应该将用户输入的信息对应储存到MySQL数据库里面
import datetime
import os
import shutil
import time
import cv2 as cv
import numpy as np
import pymysql
'''
@Author:Himit_ZH
@Date: 2020.3.1
'''
#与数据库进行数据连接
def PutDatatoSql(sname,sno):
flag = 1
con = pymysql.connect(host='localhost', password='123456', user='root', port=3306,db='facedata')
# 创建游标对象
cur = con.cursor()
# 判断是否存在库
#判断是否存在表 无则自动创建
sql1 = r'''
CREATE TABLE IF NOT EXISTS t_stu (
id int PRIMARY KEY NOT NULL auto_increment,
sname VARCHAR(20) NOT NULL,
sno VARCHAR(14) NOT NULL,
created_time DATETIME )
'''
cur.execute(sql1)
# 编写查询数据的sql
sql2 = 'select * from t_stu where sname=%s and sno=%s'
try:
cur.execute(sql2,args=(sname,sno))
con.commit()
# 处理结果集
student = cur.fetchall()
if student:
con.close()
flag = 2
return flag
except Exception as e:
print(e)
print('查询数据失败')
flag = 0
return flag
# 编写插入数据的sql
sql3 = 'insert into t_stu(sname,sno,created_time) values(%s,%s,%s)'
dt = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
try:
# 执行sql
cur.execute(sql3, (sname,sno,dt))
# 提交事务
con.commit()
print('插入数据成功')
return flag
except Exception as e:
print(e)
con.rollback()
print('插入数据失败')
flag = 0
return flag
finally:
# 关闭连接
con.close()
if __name__ == '__main__':
while True:
face_id = input('请输入学号:')
face_name = input('请输入姓名:')
result = PutDatatoSql(face_name, face