利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统

基于python opencv人脸识别的签到系统前言先看下效果实现的功能开始准备页面的构建功能实现代码部分总结

前言

一个基于opencv人脸识别和TensorFlow进行模型训练的人脸实时签到系统,作者某二本大学里的末流学生,写于2019/09/,python学习期间。

今年7月份开始接触python的,最近闲着无事就开始做了这个人脸识别的系统,一开始的话就想着简单的弄下,就去了百度智能云用的api接口实现的,写完以后我就想为什么我不自己写一个人脸识别签到,不去调用百度api接口,然后就诞生了这个程序。

先看下效果

实现的功能

点击开始进行实时人脸打开识别签到

点击注册会跳到注册页面进行注册

点击缺勤会打开缺勤窗口显示缺勤的表格

开始准备

选用语言Python,时下入门机器学习成本最低、学习速度最快的语言,python搞网络爬虫也很靠谱。运用的技术有 opencv(摄像头、图片处理),numpy(图片数字化),os(文件的操作和处理),TensorFlow(构建神经网络进行模型训练)。

页面的构建

我的UI页面是用pyqt写的,pyqt这块也不是很熟练,就稍微看了看教程,问了问同学,摸索着开始使用了,关于pyqt这块的话,不和大家多说了,大家可以看下这个链接pyqt5、qtdesigner安装和环境设置,我的这个程序也是亏了博主的这篇博客,大爱

功能实现

这里我就长话短说,因为涉及的东西比较多,我就按照我的目录中的文件开始讲起

icon这个文件夹主要是存放UI页面的图标

  • small_img_gray文件夹是用来存放注册时转换的灰度图,就是你在注册的时候点击拍照以后,程序会在一段时间内拍下100张照片进行保存,然后再将保存的照片转换为灰度图进行往后的模型训练。
  • temp文件夹用来保存训练的模型test_img用来保存注册时拍下的100张照片,对了忘了说,
  • test_img文件夹和small_img_gray文件夹下都是以人名为命名的文件夹,每个人名文件夹下保存着100张照片

captureface.py这个文件功能是

1.用于某个人的图片采集和图片中人脸检测及灰度处理

2.通过电脑摄像头实时拍照,并按类别进行存储

3.把获取的图片中的人脸检测裁剪出来,并做灰度处理后分类存储,这里用到了后边的getimgdata.py文件

cnn_net.py是用来构建cnn神经网络结构,以及模型训练和模型预测

cv2ImgAddText.py,关于这个文件,大家前边看到的我人脸上边有个方框和人名是吧,但是在做这一步的时候我发现,opencv自带的puttext方法不能输出中文,只能输出英文,很生气,中国汉字文化博大精深~源远流长 为什么不能输出汉字??但是咱也不能怪人家开发人员可能人家没考虑的,所以这个文件就是将汉字进行输出的db.py用来建立连接数据库的对象face_register.py文件向数据库进行插入用户数据

face_search.py文件是在进行签到时更新数据库中用户的状态,是签到了还是迟到了getimgdata.py文件包含4个方法,主要功能就是将用户的照片进行分类存储

haarcascade_frontalface_default.xml文件是级联分类器文件,是opencv进行人脸识别的文件,具体还有其他的分类器,像识别眼睛嘴巴还有微笑什么的late.py和late.ui这两个文件我拿一起说,主要是因为late.py是由late.ui文件进行编译得到的,当你看完上边页面部分的构建你就会明白了,后边的Mainwindow.pyMainwindow.ui以及register.py和register.ui同理,都是页面的代码文件微软雅黑Bold.ttf就是人脸识别的时候方框上边的名字字体,默认的我嫌它的字体比较细,所以网上找了个加粗的,大家也可以用别的字体,这个无所谓最后就是main.py这个文件了,基本上所有的执行代码就在这了,这里呢用到了pyqt的多线程QThread以及python的多线程threading,这俩稍微有点那么区别,但基本上实现都是相通的,为什么会用到多线程呢?

这是因为在一开始进行注册拍照和模型训练的时候,我发现如果不启用多线程,前端的ui页面就会未响应,当模型训练完成以后才恢复正常,这样给用户带来的体验是极差的,所以尽量将ui展示页面和功能实现的代码分开,在显示页面的同时还能进行后台的运算。

(不知道这样说对不对,说错的还请大家指出来,小白虚心学习)代码部分

这里就放main.py文件的吧,其他的放了估计也太多剩下的大家可以去我的GitHub下载,下载链接会在最后贴出。

# -*- coding: utf-8 -*-
# @File : main.py
# @Author: CSD
# @Date : 2019/9/7 0007 20:48
# @Software: PyCharm
import gc
import os
import sys
import time
import cv2
import qimage2ndarray
from PyQt5.QtCore import QTimer, Qt, QThread, pyqtSignal
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QAbstractItemView, QTableWidgetItem, QMessageBox
from Mainwindow import Ui_MainWindow
from db import mysql_conn
from face_register import register_handler
from face_search import search_handler
from late import Ui_Table
from register import Ui_Register
from cnn_net import CnnNet
from sklearn.model_selection import train_test_split
import numpy as np
from getimgdata import GetImgData
import captureface
from captureface import CaptureFace
import threading
from cv2ImgAddText import cv2ImgAddText
imgs, labels, number_name = GetImgData().readimg() # 读取数据
train_x, test_x, train_y, test_y = train_test_split(imgs, labels, test_size=0.1, random_state=10) # 训练集测试集数据划分
cnnnet = CnnNet() # 调用CNN算法类
# 主窗口
class parentWindow(QMainWindow, Ui_MainWindow):
 def __del__(self):
 try:
  self.camera.release() # 释放资源
 except:
  return
 def __init__(self, parent=None):
 super(parentWindow, self).__init__(parent)
 self.setupUi(self)
 self.Latebt.setEnabled(False)
 # self.PrepCamera()
 self.CallBackFunctions()
 self.Timer = QTimer() # 实例化一个类
 self.Timer.timeout.connect(self.TimerOutFun) # 定时刷新
 self.flagThread = FlagThread()
 # 当获得循环完毕的信号时,停止计数
 self.flagThread.trigger.connect(self.fun_timer)
 # 初始化摄像头
 def PrepCamera(self):
 try:
  self.camera = cv2.VideoCapture(0)
  self.camera.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
  self.MsgTE.clear()
  self.MsgTE.append('摄像头已连接!')
 except Exception as e:
  self.MsgTE.clear()
  self.MsgTE.append(str(e))
 # 回调函数
 def CallBackFunctions(self):
 self.Showbt.clicked.connect(self.StartCamera)
 self.About.clicked.connect(self.about)
 # 开始按钮函数
 def StartCamera(self):
 self.Showbt.setEnabled(False)
 self.Loginbt.setEnabled(False)
 self.Latebt.setEnabled(True)
 self.PrepCamera()
 self.Timer.start(1) # 每隔1ms刷新一次
 self.timelb = time.clock()
 self.flagThread.start()
 # 从摄像头读取图像
 def TimerOutFun(self):
 success, img = self.camera.read()
 if success:
  self.Image = img
  self.DispImg()
 else:
  self.MsgTE.clear()
  self.MsgTE.setPlainText('摄像头读取图像已暂停!')
 def fun_timer(self, flag):
 self.MsgTE.setPlainText(flag)
 # 检测人脸、色彩空间及格式转换
 def DispImg(self):
 results = captureface.detect_face(self.Image)
 if results is not ():
  faceboxes = results # 提取人脸位置信息
  for (x, y, w, h) in faceboxes:
  face = self.Image[y:y + h, x:x + w] # 截取图片中的人脸图像
  face = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY) # 转为灰度图片
  face = cv2.resize(face, (64, 64)) # 压缩成指定大小
  face = face.reshape([1, 64, 64, 1])
  cnnNet = CnnNet(modelfile='./temp/train-model') # 注意这步很关键,起到了重置计算图的作用,否则多次导入训练好的计算图会出现tensor重复的问题
  res, pre = cnnNet.predict(test_x=face) # 调用已训练好的模型进行预测
  if np.max(pre) < 0.8: # 通过调整阈值为threshold,当返回数组最大值小于threshold是即视为unknown
   self.name = "unknown"
  else:
   self.name = number_name[res[0]]
   self.flagThread.get_name(self.name)
  # cv2.putText(self.Image, self.name, (int(x), int(y) - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2)
  cv2.rectangle(self.Image, (int(x), int(y)), (int(x + w), int(y + h)), (255, 0, 0), 3) # 将name显示出来
  img = cv2ImgAddText(self.Image, self.name, int(x+25), int(y-50))
  img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  qimg = qimage2ndarray.array2qimage(img) # 调用array2qimage函数将其转为QImage格式
  self.DispLb.setPixmap(QPixmap(qimg)) # 再通过QPixmap函数转为QPixmap格式进行显示。
  self.DispLb.show() # 图像显示
  gc.collect()
 else:
  img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2RGB)
  qimg = qimage2ndarray.array2qimage(img) # 调用array2qimage函数将其转为QImage格式
  self.DispLb.setPixmap(QPixmap(qimg)) # 再通过QPixmap函数转为QPixmap格式进行显示。
  self.DispLb.show() # 图像显示
 # 帮助
 def about(self):
 reply = QMessageBox.information(self,
     "关于",
     "1.点击开始按钮播放视频流,进行签到\n"
     "2.点击注册按钮可跳往注册窗口进行注册\n"
     "3.点击缺勤按钮可查看缺勤学生名单,状态0代表缺勤\n"
     "4.点击帮助按钮可查看帮助,同时关闭主窗口视频流,进行人脸注册",
     QMessageBox.Close)
 try:
  self.camera.release() # 释放资源
  self.Showbt.setEnabled(True)
  self.Loginbt.setEnabled(True)
 except:
  return
# 注册窗口
class childWindow(QDialog, Ui_Register):
 def __init__(self, parent=None):
 super(childWindow, self).__init__(parent)
 self.setupUi(self)
 self.PhotoBt.setEnabled(False)
 self.RegisterBt.setEnabled(False)
 # self.PrepCamera()
 self.CallBackFunctions()
 self.workThread = WorkThread()
 self.photoThread = PhotoThread()
 # 当获得循环完毕的信号时,停止计数
 self.workThread.trigger.connect(self.timeStop)
 self.photoThread.trigger.connect(self.runover)
 self.Timer = QTimer() # 实例化一个类
 self.Timer.timeout.connect(self.TimerOutFun) # 定时刷新
 # 初始化摄像头并打开
 def PrepCamera(self):
 try:
  self.camera = cv2.VideoCapture(0)
  self.MsgLb.clear()
  self.MsgLb.setText('请输入学号、姓名,点击拍照!')
 except Exception as e:
  self.MsgLb.clear()
  self.MsgLb.setText(str(e))
 # 回调函数
 def CallBackFunctions(self):
 self.PhotoBt.clicked.connect(self.PhotoCamera)
 self.StartBt.clicked.connect(self.StartCamera)
 self.RegisterBt.clicked.connect(self.RegisterCamera)
 self.ModelBt.clicked.connect(self.ModelTrain)
 # 开始按钮函数
 def StartCamera(self):
 self.PhotoBt.setEnabled(True)
 self.RegisterBt.setEnabled(True)
 self.PrepCamera()
 self.Timer.start(1) # 每隔1ms刷新一次
 self.timelb = time.clock()
 # 注册
 def RegisterCamera(self):
 Msg = register_handler(self.stu_id.text(), self.stu_name.text())
 self.MsgLb.setText(Msg)
 # 拍照按钮函数
 def PhotoCamera(self):
 if self.stu_id.text().isdigit():
  self.RecordCamera() # 保存照片
  self.stu_id.clear()
  self.stu_name.clear()
 else:
  self.MsgLb.setText('请检查学号是否正确')
 # 从摄像头读取图像
 def TimerOutFun(self):
 success, img = self.camera.read()
 if success:
  self.Image = img
  self.DispImg()
 else:
  self.MsgLb.clear()
  self.MsgLb.setText('摄像头读取图像已暂停!')
 # 色彩空间及格式转换
 def DispImg(self):
 img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2RGB)
 qimg = qimage2ndarray.array2qimage(img) # 调用array2qimage函数将其转为QImage格式
 self.ShowLb.setPixmap(QPixmap(qimg)) # 再通过QPixmap函数转为QPixmap格式进行显示。
 self.ShowLb.show() # 图像显示
 # 采集照片
 def RecordCamera(self):
 self.MsgLb.setText('正在采集图片')
 self.photoThread.img(self.Image, self.stu_name.text())
 self.photoThread.start()
 def runover(self, msg, i):
 self.MsgLb.setText(msg)
 self.progressBar.setValue(i)
 # 模型训练
 def ModelTrain(self):
 self.MsgLb.setText('请等待一段时间进行模型训练!')
 self.workThread.start()
 def timeStop(self, msg, i):
 self.MsgLb.setText(msg)
 self.progressBar.setValue(i)
 def closeEvent(self, event):
 self.camera.release()
# 缺勤窗口
class childWindow_late(QDialog, Ui_Table):
 def __init__(self, parent=None):
 super(childWindow_late, self).__init__(parent)
 self.setupUi(self)
 self.CallBackFunctions()
 self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
 # 回调函数
 def CallBackFunctions(self):
 self.ResetBt.clicked.connect(self.ResetTable)
 self.ShowBt.clicked.connect(self.ShowTable)
 # 显示缺勤表格
 def ShowTable(self):
 sql = 'select * from users where state=0'
 print(sql)
 cursor = mysql_conn.cursor()
 cursor.execute(sql)
 results = cursor.fetchall()
 print(results)
 if results:
  row = cursor.rowcount
  vol = len(results[0])
  self.tableWidget.setRowCount(row)
  self.tableWidget.setColumnCount(3)
  for i in range(row):
  for j in range(3):
   temp_data = results[i][j + 1] # 临时记录,不能直接插入表格
   print(temp_data)
   data = QTableWidgetItem(str(temp_data)) # 转换后可插入表格
   data.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
   self.tableWidget.setItem(i, j, data)
 # 重置
 def ResetTable(self):
 reply = QMessageBox.question(self,
     "消息",
     "重置后所有的学生的状态将更改为0,是否修改?",
     QMessageBox.Yes | QMessageBox.No)
 if reply == QMessageBox.Yes:
  sql = 'update users set state = 0'
  print(sql)
  cursor = mysql_conn.cursor()
  cursor.execute(sql)
  mysql_conn.commit()
 else:
  return
class WorkThread(QThread):
 trigger = pyqtSignal(str, int)
 def __int__(self):
 super(WorkThread, self).__init__()
 def run(self):
 time.sleep(2)
 path = './small_img_gray' # 灰度图路径
 imgs, labels, number_name = GetImgData(dir=path).readimg()
 x_train, x_test, y_train, y_test = train_test_split(imgs, labels, test_size=0.2)
 cnnNet = CnnNet(modelfile='./temp/train-model',
   imgs=x_train, labels=y_train)
 train_class = cnnNet.cnnTrain(maxiter=1000, # 最大迭代次数
     accu=0.99, ) # 指定正确率(499次之后)
 for index, out in enumerate(train_class):
  # 循环完毕后发出信号
  self.trigger.emit(out, index * 10)
 self.trigger.emit("训练完成", 100)
 def kill_thread(self):
 self.terminate()
class PhotoThread(QThread, Ui_Register):
 trigger = pyqtSignal(str, int)
 def __int__(self):
 super(PhotoThread, self).__init__()
 def img(self, img, stu_name):
 self.Image = img
 self.stu_name = stu_name
 def run(self):
 filepath = os.path.join('./test_img/', self.stu_name) # 路径拼接
 if not os.path.exists(filepath): # 看是否需要创建路径
  os.makedirs(filepath)
 for i in range(100): # 开始拍照
  savePath = (filepath + "/%d.jpg" % i)
  cv2.imencode('.jpg', self.Image, [cv2.IMWRITE_JPEG_QUALITY, 100])[1].tofile(savePath) # 保存图片
  # 无法写入中文 搜了搜发现OpenCV的imwrite不支持 所以换成了cv2.imencode
  # picturepath = os.path.join(filepath, str(i)) + '.jpg' # 图片的完整路径名 无法读取中文路径
  # cv2.imwrite(picturepath, self.Image, [cv2.IMWRITE_JPEG_QUALITY, 100]) # 将图片写入指定d路径
  self.trigger.emit('正在采集图片~', i)
 picture = CaptureFace(
  imgdir='./test_img/', # 采集到的图片存放位置
  grayfacedir='./small_img_gray' # 灰度处理后的图片存放位置
 )
 picture.facetogray(someone=self.stu_name, waitkey=100, size=64)
 self.trigger.emit('图片采集完毕!点击注册', 100)
class FlagThread(QThread):
 trigger = pyqtSignal(str)
 def __int__(self):
 super(FlagThread, self).__init__()
 def get_name(self, name=''):
 self.name = name
 def log_in(self):
 if self.name != '':
  user_id, user_name, user_state = search_handler(self.name)
  if user_state == 1:
  self.Msg = '%s %s 签到成功.' % (user_id, user_name)
  elif user_id is None:
  self.Msg = '签到失败'
 else:
  self.Msg = '未检测到人脸'
 def run(self):
 time.sleep(2)
 while True:
  self.get_name()
  timer = threading.Timer(2, self.log_in) # 等待5s钟调用一次fun_timer() 函数
  timer.start()
  timer.join()
  self.trigger.emit(self.Msg)
  print(self.Msg)
if __name__ == '__main__':
 app = QApplication(sys.argv)
 ui = parentWindow()
 ui_child = childWindow()
 ui_child_late = childWindow_late()
 login_btn = ui.Loginbt
 late_btn = ui.Latebt
 login_btn.clicked.connect(ui_child.show)
 late_btn.clicked.connect(ui_child_late.show)
 if mysql_conn is None:
 QMessageBox.warning(ui,
    "警告",
    "请先联网,以便进行操作",
    QMessageBox.Close)
 sys.exit(app.exec_())
 else:
 ui.show()
 sys.exit(app.exec_())

这个我自己搭建出的人脸识别系统是具有自己学习能力的,你给它喂的数据越多,它就可以识别越多的人而且准确度会不断提高,希望大家可以自己测试和研究。最终实现的结果就是文章开头的时候的效果。希望能帮到大家!最后附上GitHub地址,觉着好的话可以给个星星★哦源代码下载地址

有什么问题我会尽量回答!

总结

以上所述是小编给大家介绍的利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • python实现网页自动签到功能

    本文实例为大家分享了python实现网页自动签到功能的具体代码,供大家参考,具体内容如下 第1步.环境准备(用的chrome浏览器) 1.安装selenium包 pip install selenium 2.下载chromedriver驱动: 找到符合自己浏览器版本的chromedriver驱动,下载解压后,将chromedriver.exe文件放到Python目录下的Scripts目录下,也可以添加环境变量到Path中: 第2步.Selenium脚本源码 比较简单,而且有详细注释就不一一说明了

  • Python脚本实现虾米网签到功能

    本文实例讲述了Python脚本实现虾米网签到功能的方法.分享给大家供大家参考,具体如下: 概述 这个脚本完成了自动登录虾米网.签到的功能. 大致要用到urllib.urllib2.cookielib这几个模块.其实就是用python实现向指定的url去post数据. 至于我怎么知道在浏览器里面登录和签到时浏览器都向服务器post了什么数据的问题,可以用强大的chrome:F12->Network里面可以看得到.有的服务器登录成功后会让客户端浏览器跳转或者立即刷新一次页面等等,会把登录时向服务器p

  • face++与python实现人脸识别签到(考勤)功能

    项目实现利用face++开发一个课堂签到的软件,实现面向摄像头即可完成记录学号.姓名和时间的签到工作. 项目架构 项目使用场景 代码: 流程代码,主文件 #!usr/bin/ # -*- coding: utf-8 -*- import requests from json import JSONDecoder import csv import cv2 import time import tkinter as tk search_url = "https://api-cn.faceplusp

  • Python3自动签到 定时任务 判断节假日的实例

    不废话,直接上代码Python3.6 签到代码,只需修改url,账号,密码即可,此处是登录时无验证登录,有验证码的自行补充 # -*- coding:utf-8 -*- import json import urllib.request import datetime # 模拟浏览器打开网站 browser = webdriver.Chrome() browser.get('http://**.**.121.54/') # 将窗口最大化 browser.maximize_window() # 根

  • python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)

    baiduclient.py 复制代码 代码如下: import urllib.parseimport gzipimport jsonimport refrom http.client import HTTPConnectionfrom htmlutils import TieBaParserimport httputils as utils # 请求头headers = dict()headers["Connection"] = "keep-alive"heade

  • Python实现App自动签到领取积分功能

    要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化.但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了. 下面的操作就好办了,在电脑端的浏览器打开网址,按下 F12,开始起飞~ 登录分析 点击签到后,会跳转到用户登录页面: https://wechatx.34580.com/mart/#/sign/in,输入登录信息后,点击登录,同时关注开发调试栏的网络交互信息 . 可以发现,登录的请求地址是: https://wechatx.34580.com/s

  • 利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统

    基于python opencv人脸识别的签到系统前言先看下效果实现的功能开始准备页面的构建功能实现代码部分总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人脸实时签到系统,作者某二本大学里的末流学生,写于2019/09/,python学习期间. 今年7月份开始接触python的,最近闲着无事就开始做了这个人脸识别的系统,一开始的话就想着简单的弄下,就去了百度智能云用的api接口实现的,写完以后我就想为什么我不自己写一个人脸识别签到,不去调用百度api接口,然后就诞生了

  • 利用Python和OpenCV库将URL转换为OpenCV格式的方法

    今天的博客是直接来源于我自己的个人工具函数库. 过去几个月,有些PyImageSearch读者电邮问我:"如何获取URL指向的图片并将其转换成OpenCV格式(不用将其写入磁盘再读回)".这篇文章我将展示一下怎么实现这个功能. 额外的,我们也会看到如何利用scikit-image从URL下载一幅图像.当然前行之路也会有一个常见的错误,它可能让你跌个跟头. 继续往下阅读,学习如何利用利用Python和OpenCV将URL转换为图像 方法1:OpenCV.NumPy.urllib 第一个方

  • Python基于opencv实现的人脸识别(适合初学者)

    目录 一点背景知识 一.人脸识别步骤 二.直接上代码 (1)录入人脸.py (2)数据训练.py (3)进行识别.py 三.运行过程及结果 1.获取人脸照片于目标文件中 2.进行数据训练,获得trainer.yml文件中的数据 3.进行识别 总结 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从谷歌街景的图片拼接,到交互艺术展览的技术实现中,都有

  • Python(TensorFlow框架)实现手写数字识别系统的方法

    手写数字识别算法的设计与实现 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.这是本人的本科毕业论文课题,当然,这个也是机器学习的基本问题.本博文不会以论文的形式展现,而是以编程实战完成机器学习项目的角度去描述. 项目要求:本文主要解决的问题是手写数字识别,最终要完成一个识别系统. 设计识别率高的算法,实现快速识别的系统. 1 LeNet-5模型的介绍 本文实现手写数字识别,使用的是卷积神经网络,建模思想来自LeNet-5,如下图所示

  • Python+OpenCV人脸识别签到考勤系统实现(新手入门)

    前言 本项目为IOT实验室人员签到考勤设计,系统实现功能:1.人员人脸识别并完成签到/签退2.考勤时间计算3.保存考勤数据为CSV格式(Excel表格) PS:本系统2D人脸识别,节约了繁琐的人脸识别训练部分,简洁快捷 该项目为测试版,正式版会加入更多的功能,持续更新中…测试版项目地址我会放到结尾 项目效果图 系统初始化登陆界面 主界面展示图: 签到功能展示 签退功能展示 后台签到数据记录 是否签到/退判断 项目需要的环境 核心环境: OpenCV-Python 4.5.5.64 face_re

  • Python opencv实现人眼/人脸识别以及实时打码处理

    利用Python+opencv实现从摄像头捕获图像,识别其中的人眼/人脸,并打上马赛克. 系统环境:Windows 7 + Python 3.6.3 + opencv 3.4.2 一.系统.资源准备 要想达成该目标,需要满足一下几个条件: 找一台带有摄像头的电脑,一般笔记本即可: 需配有Python3,并安装NumPy包.opencv: 需要有已经训练好的分类器,用于识别视频中的人脸.人眼等,如无分类器,可以点击这里下载:haarcascades分类器 二.动手做 1.导入相关包.设置视频格式.

  • python版opencv摄像头人脸实时检测方法

    OpenCV版本3.3.0,注意模型文件的路径要改成自己所安装的opencv的模型文件的路径,路径不对就会报错,一般在opencv-3.3.0/data/haarcascades 路径下 import numpy as np import cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') cap = cv2.VideoCapture(0) while True: ret,img = ca

  • python计算机视觉OpenCV库实现实时摄像头人脸检测示例

    目录 设备准备: 实现过程 调用模型库文件 打开摄像头 人脸检测 设置退出机制 程序运行 全部代码 OpenCV 是一个C++库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块.在Python中常使用OpenCV库实现图像处理. 本文将介绍如何在Python3中使用OpenCV实现实时摄像头人脸检测: 设备准备: USB摄像头 接入PC电脑USB口,并调试正常打开视频.如果电脑内置了电脑摄像头,测试一下摄像头能否正常使用. 下载特征分类模型: XM

  • python 3利用Dlib 19.7实现摄像头人脸检测特征点标定

    Python 3 利用 Dlib 19.7 实现摄像头人脸检测特征点标定 0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,进行实时特征点标定: 图1 工程效果示例(gif) 图2 工程效果示例(静态图片) (实现比较简单,代码量也比较少,适合入门或者兴趣学习.) 1.开发环境 python: 3.6.3 dlib: 19.7 OpenCv, numpy import dlib # 人脸识别的库dlib import numpy as np # 数据处理的库numpy impor

随机推荐