基于OpenCV的人脸识别系统的pyhon源代码

article/2025/7/12 21:28:33

        本论文主要阐述了基于OpenCV的人脸识别原型系统。基于生物特征识别的身份认证方法有指纹、掌纹、眼睛虹膜、人脸等,其中,由于人脸的稳定性和可见性,人脸识别的研究与应用成为热点,本文针对出租公寓安全管理需求,设计和实现了基于OpenCV的人脸识别原型系统,全文内容包括:

  1. 构建了基于OpenCV的视频人脸识别的技术框架。针对出租公寓安全管理需要,构建了基于OpenCV的视频人脸识别的技术框架。
  2. 设计了基于OpenCV的视频人脸快速检测算法。人脸检测是人脸识别的前提,本文采用基于OpenCV的快速人脸检测算法实现视频图像中人脸的快速定位和提取。
  3. 设计了基于CNN算法的视频人脸识别方法。
  4.  系统使用python语言进行实现,实现基于视频的实时人脸身份认定。

第一节 系统功能

        本系统用于出租公寓人员进出管理,自动记录人员进出的时间与照片,自动识别是否是公寓的住户。首先,系统从摄像头视频流采集住户的人脸照片,通过openCV进行人脸检测与人脸对齐,接着训练一个人工神经网络模型,进行人脸识别,系统工作时定时采集进出人员的脸部照片,输入模型进行人脸对比,如果相似度超过阀值,则判定为住户,否则是陌生人。接着把采集到的照片与时间记录下来,如果是住户保存住户姓名。系统在运行中可以动态增加新住户,删除住户数据,然后重新训练人工神经网络模型。

 第二节 系统框图

        系统架构分为两部分,用户界面与基于openCV的人工神经网络模块,人工神经网络模块封装成类对象,由用户界面模块与人员进出日记模块调用。

 第三节 抓拍人脸照片的程序代码

        从摄像头视频流抓拍照片使用openCV API完成,获取到图片后,装载openCV haarcascade分类器进行人脸检测[1],以确定图片中是否包含人脸。openCV haarcascade分类器是级联分类器,首先根据haar-like特征训练多个弱分类器 ,然后使用adaboost算法将多个弱分类器组合成一个强分类器 ,最终的分类器是由多个强分类器级联而成,见源代码中的文件get_faces.py。

 

 第四节 人工神经网络模型代码

        经过人脸检测和人脸对齐两个步骤,获得了包含人脸的区域图像,接下来就要进行人脸识别。这一步使用深度卷积网络,将输入的人脸图像转换成一个向量的表示,这就是“人脸特征”。人脸特征经过全连接层,进入softmax输出层,softmax的每一类对应一个人。

        人工神经网络是一个并行和分布式的信息处理网络结构[2],该网络结构一般由许多个神经元组成,每个神经元有一个单一的输出,它可以连接到很多其它的神经元,其输入有多个连接通路,每个连接通路对应一个连接权系数。人工神经网络是生物神经网络的一种模拟和近似。它主要从两个方面进行模拟:一种是从结构和实现机理方面进行模拟,它涉及到生物学、生理学、心理学、物理及化学等许多基础学科。由于生物神经网络的结构和机理相当复杂,现在距离完全认识它们还相差甚远:另外一种是从功能上加以模拟,即尽量使得人工神经网络具有生物神经网络的某些功能特性,如学习、识别、控制等功能。

        人工神经网络模型由3层卷积池化、全连接层、输出层构成。第1层卷积池化的卷积核大小(3,3), 输入通道(3), 输出通道(32);第2层卷积池化的卷积核大小(3,3), 输入通道(32), 输出通道(64);第3层卷积池化的卷积核大小(3,3), 输入通道(64), 输出通道(64),见图3.4.1。

        人工神经网络模型代码使用TensorFlow架构[3]实现,tensorflow是google 2015年推出的人工智能与深度学习模型框架,具有运算性能强,框架设计通用,支持生产环境部署,语言接口丰富,支持云端协同计算等优点,是目前机器学习和深度学习项目中最受欢迎的开源框架。

        TensorFlow架构中包含CNN模型,CNN模型是一种以卷积为核心的前馈神经网洛模型。卷积是分析数学中的一种基础运算,其中对输入数据做运算时所用到的函数称为卷积核。卷积运算是指卷积核以滑动窗的形式在输人数据的各个位置上做小范围加权和的过程。以图像识别为例,卷积核在输入图像上不断滑动时,卷积核与当前滑动窗口内的输入图像像素值相乘后求和即得到输出图像的像素值。这个运算过程与图像处理算法中常用的空间滤波是类似的。因此,卷积可以被通俗地理解为一种“滤波”过程,卷积核与输入数据作用之后得到了“滤波”后的图像,从而提取出了图像的特征。卷积、池化、softmax在TensorFlow架构中都有对应的API函数,可以直接调用,非常方便。

        每个住户抓取10张图片,openCV API检测人脸时给出脸部矩形坐标,按照脸部矩形坐标裁切图片,在把脸部图片缩放为128*128像素,输入CNN神经网络模型训练,得到住户人脸识别模型。见源代码中的文件cnn_model.py。

 第五节 训练模型代码

        人脸图片训练集使用USER_LIST类生成,USER_LIST类调用openCV API把采集到的住户照片进行人脸图片裁切,获得训练集。接着使用CNN_MODEL类生成CNN模型,把训练集分批放到CNN模型进行训练,当准确率达到99.9%停止训练,保存训练得到的模型。因为训练需要比较长时间,训练在后台工作线程进行,THREAD_TRAIN类负责生成后台工作线程,使用TRAIN_MODEL类进行模型训练。见源代码中的文件:train_model.py。

 第六节 人脸识别代码

        从摄像头抓取进出人员5张带人脸的图片,openCV API检测人脸时给出脸部矩形坐标,按照脸部矩形坐标裁切图片,在把脸部图片缩放为64*64像素,输入CNN神经网络模型预测,模型将会返回住户姓名索引,通过索引查找住户姓名,如果查找失败,就是陌生人。因为人脸识别耗时多,建立后台工作线程进行人脸识别。DETECT_STREAM类负责照片采样与人脸图片裁切,使用openCV进行人脸检测,采样到的人脸图片送到工作线程类THREAD_RECOGNITION,该工作线程调用FACE_RECOGNITION类进行人脸识别。FACE_RECOGNITION类初始化时加载人工神经网络CNN模型训练生成的人脸识别模型。见源代码中的文件:faces_recognition.py。

第七节 来访记录代码

        来访记录模块负责把人脸识别的结果记录到磁盘,向UI界面提供来访记录与来访者的照片。当人脸识别模块识别出来访者后,调用RECORD_VISIT类的record()接口把来访信息记录到磁盘,RECORD_VISIT类按照“姓名/日期/图片文件”结构写入磁盘。当用户点击“来访记录”按钮时,UI界面通过RECORD_VISIT类listRecord()接口获取来访记录,RECORD_VISIT类从磁盘读取来访记录,按时间排序后返回。当用户点击“查看照片”按钮时,UI界面通过RECORD_VISIT类GetPhotos ()接口获取来访者的照片。见源代码中的文件:record_visit.py。

第八节 用户界面代码

        用户界面选用python tkinter库实现,tkinter是python标准的GUI库,建立在tk技术上。Tk最初是为tcl工具命令语言所设计的,具有可移植性和灵活性高,非常容易使用。用户界面共有6个窗口界面,主窗口、增加住户窗口、删除住户窗口、来访记录窗口、模型训练进度条窗口和查看来访者照片窗口,每个窗口封装成类对象,分别是:AppUI类、UI_ADD_USER类、UI_DEL_USER类、UI_VISIT类、UI_TRAIN类、SHOW_PHOTO类。AppUI类调用UI_ADD_USER类、UI_DEL_USER类和UI_VISIT类,打开相应的窗口;UI_ADD_USER类与UI_DEL_USER类回调用UI_TRAIN类,打开模型训练进度条;UI_VISIT类会调用SHOW_PHOTO类,显示来访者的照片。见源代码中的文件:appui.py。

下载python源代码:https://download.csdn.net/download/u013705518/21540507


http://chatgpt.dhexx.cn/article/WvApiiKa.shtml

相关文章

face++人脸识别源码

前段时间项目需求人脸识别,就简单研究了下,结果后来不需要了,就没再继续研究,只有java代码,没有移植到客户端,通过myeclipse 运行的,联、连网通过对两个网络照片的url地址进行图片对比&#xff…

虹软人脸识别android源码demo,虹软2.0 离线人脸识别 Android 开发 Demo

环境要求 1、运行环境 armeabi-v7a 2、系统要求 Android 5.0 (API Level 21)及以上 3、开发环境 Android Studio 快速上手 1、在src->main目录下新建文件夹jniLibs->armeabi-v7a,将libarcsoft_face.so和libarcsoft_face_engine.so添加到src->main->jniLibs->ar…

人脸识别源码运行指南

前言 人脸识别的源码放出来之后,不少小伙伴下载之后仍然不能运行成功。于是被逼无奈,把源代码改成了我认为最容易运行成功的版本。即使如此,我认为写下这个指南还是有必要的。因为反复回答相同的问题实在是太累人了。 重复一遍&#xff0c…

c# winform实现人脸识别系统(文末附源码)

本系统开发环境为Visual Studio 2010,使用.net 4.0开发,使用AForge库和Aipsdk库和Newtonsoft.json库和system.sqlite库以及第三方插件DevExpress完成。 本系统特点:分为人脸库的录入,将信息保存在sqlite数据库中,该数据库中使用一张表,字段有用户姓名,性别,工号,人脸…

SeetaFace6人脸识别源码编译和示例运行

SeetaFace6人脸识别源码编译和示例运行 SeetaFace6是一个开源人脸识别库,基于C编写,可以自由的用于商业用途,最早好像是由中科院山世光老师开源并维护的,现在顺着SetaFace能找到的公司叫中科视拓。 一、源码下载 github地址&am…

VM虚拟机Ubuntu16 运行facenet人脸识别源码

VM虚拟机Ubuntu16 运行facenet人脸识别源码 相关命令: 1、conda create -n py36tf python3.6 //创建python版本为3.6的虚拟环境,命名为py36tf 2、conda activate py36tf(或者source activate py36tf) //进入名为py36tf的环境 有…

Python3 人脸识别 源码

Python3 人脸识别 face_recognition 源码 人脸图片进行训练,识别摄像头人脸 代码和人脸库在同一级 训练库中以人名命名文件夹 每个人可以多张图片,这里的名字无所谓 1. Ubuntu 20 安装人脸识别库 # 先: sudo su rootapt-get instal…

人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)

人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 1. 前言 2. 项目说明 (1)开发版本 (2)依赖库说明(O…

python人脸识别系统源码

人脸检测、人脸识别、添加人脸、qt界面完整可运行源码。链接:https://pan.baidu.com/s/1QkzGGCqU7kUAAnInz-dgLg?pwdlaru 提取码:laru

Java+opencv+mysql实现人脸识别源码(人脸采集入库+人脸识别相似度)

Javaopencv实现人脸识别 写这篇博客,是因为以前经常使用pythonopencv实现人脸处理,后来发现java也可以实现,于是便学习了下,以下将代码和实现过程贴出。 目录 1、环境准备 使用到的技术:javaopencvmysql 我这里用的…

java人脸识别源码_用 Java 实现人脸识别功能(附源码)

整理了一些Java方面的架构、面试资料(微服务、集群、分布式、中间件等),有需要的小伙伴可以关注公众号【程序员内点事】,无套路自行领取 更多优选 引言 远程在家办公的第N天,快要闲出屁了,今天突然有个小学弟加我VX说要咨询我点技术问题(终于可以装X了)。 看了他的需求描述…

java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示

注意: 看完之后如有不懂,请看:关于人脸和指纹识别共同交流方案,也可以关注微信公众号:雄雄的小课堂,回复:人脸识别群获取群号,群内有直接可以运行的源码可供下载,人脸识…

人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载)

人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 目录 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 1. 前言 2. 项目安装 3. 人脸识别系统 (1)人脸检测和关键点检测 (2&am…

Linux实现代码雨

黑客帝国大部分人都知道吧,屏幕前的绿条条看着挺炫酷的,平常接触Linux系统的,也得娱乐一下,看看这个效果怎么实现的吧! 1,下载cmatrixcmatrix-1.2a.tar.gz 链接:工具包下载 提取码&#xff1a…

黑客代码雨

想必大家看电视的时候会有那种黑客使用的电脑都是一丢绿色的都是在哪一直动,接着黑客随便动一下就完成一个指令了,今天我就带大家实现这个效果。 看看效果图吧: 直接开始进入主题 先导入系统文件库 import pygame import random from pyga…

【黑客帝国-代码雨】超火(免费送)(17)

(刚学的,还有好多地方做的不完善,后期继续跟进,直接复制代码,后缀名改为:.html ,直接运行就可以看到效果啦!) 或者:使用HBuilder,创建HTML文件直接运行即可看…

HTML黑客帝国代码雨

1.用法 在电脑桌面新建一个文本文档&#xff0c;然后将代码复制到文本文档里&#xff0c;再将后缀改为".html"。 2.效果图 3.html代码 <!DOCTYPE html> <html> <head><title>黑客帝国代码雨</title> </head><body> <…

骇客代码雨

以下代码实现了代码雨的一些基本功能 #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <time.h>#define XMAX 150 #define YMAX 35 #define RAINLINES 50char *str "ki)udmnh*&(^%cobpwerxz$#<>?}{";st…

C++实现代码雨

各位博友们&#xff0c;大家好&#xff0c;今天给大家打一个代码雨 接下来是代码 #include <stdio.h> #include <time.h> #include <Windows.h> #include <graphics.h>#define WIDTH 960 #define HEIGHT 640 #define STR_SIZE 20 #define STR_NUM 128…

网页实现黑客帝国代码雨

网页实现黑客帝国代码雨 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"/><title>黑客帝国代码雨 </title><style type"text/css"> /*basic reset*/ *{margin:0;padding:0;} body{background:black;} ca…