Python实现基于openCV+百度智能云平台实现《1:N人脸考勤机》文章最后附带源码!

news2024/11/28 8:44:51

目录

一、 项目介绍

1.1 项目名称

1.2 项目简介

1.3 项目物料

1.4 技术栈

二、 项目架构

三、项目细节

3.1 环境搭建

3.2 利用opencv实现摄像头调取及相关图像的采集

3.3 利用aips上传图像和结果返回

3.4 结果优化和处理

3.5 可扩展性

3.6 遗留问题和解释

四、声明

一、项目介绍

1.1 项目名称

《1:N人脸考勤机》

1.2 项目简介

基于windows平台下,使用PyCharmIDE完成开发工作,将提前准备好的照片上传百度云,借助百度aipSDK-Python实现和百度智能云的对接,实现摄像头采集人脸图片后上传百度云,在百度云中利用百度现有的人脸识别算法完成人脸的对比,之后借助SDK返回对比结果,将结果显示在客户端上。

1.3 项目物料

    1. 平台:windows
    2. 开发平台:PyCharm + Anaconda3(选装)
    3. 开发包:openCV2.4.9(Python)、aips(百度智能云人脸检测的SDK)
    4. 编程语言:Python
    5. 其他:识别对象的免冠正面照

1.4 技术栈

    1. 网络通信基本知识
    2. Python编程语言
    3. 百度智能云SDK(search函数等)
    4. OpenCV基于Python的接口的使用

1.5项目架构

上传百度云识别者照片--->图像采集--->图像处理--->上传百度云--->百度云对比--->返回对比结果--->结果处理--->显示结果。

三、项目细节

3.1 环境搭建

(1)安装PyCharm

1)安装

百度安全验证

  1. 创建人脸识别项目及配置

pycharm怎么创建新项目-百度经验

(2)安装百度智能云人脸检测的SDK(Python)

1)接口的下载和安装

人脸识别_人脸检测_人脸对比_人脸搜索_活体检测_百度智能云

(3)创建百度智能云应用

1)选择百度云对应功能和免费权限

A、手机应用市场安装“百度”app,注册一个账号,登陆

B、利用百度app扫码登陆以下网址中的账户:

人脸识别私有化部署包_支持百万级超大型人脸库-百度AI开放平台

 

登陆成功后会返回图一,点击“立即申请”进入以下界面。

  1. 创建应用

 

 

注意:如果之前安装SDK失败了,这里可以选择直接下载SDK即可,选择其中的“Python Http SDK”即可。

  1. 创建组

这个就是上边创建的应用。我们开始创建组。

 

 

 

点击确认

点击画圈的地方(组名)

这就是创建组内用户的菜单,点击任何一个方框都可以。

  1. 上传识别的对比资源

创建组和组用户均完成,到时候百度云会自动找到要求的组,在组中对比符合要求的用户,反馈结果。

  1. 获取应用的账号和密码

将其中的内容(AK和SK)复制出来保存好(保存在一个文本文档内即可,文档一定要保留好)

关于opencv如何下载,作者在这里作为伏笔,大家自行尝试,有问题试着解决一下哦。解决不了记得评论哦。

3.2 利用opencv实现摄像头调取及相关图像的处理

其中有详细的注释,请仔细阅读,如果有不明白的地方,评论区留言,作者一一回复。

3.3 利用aips上传图像和结果返回

 

 

 

图片为多张,注意通过行号来看,避免少看代码

3.4 结果优化和处理

在屏幕显示结果:

在上边的92行位置加入如下代码:

注意通过行号来判断对齐缩进的位置,避免代码从属问题。

3.5 效果展示

3.6 遗留问题和解释

如遇闪退,可以优化,可以找找看是什么问题。由于账号隐私问题,隐藏APP_ID\AK\SK三个参数。

源码:

# coding: utf-8
# author: alex_chen

import cv2 as cv
from aip import AipFace  # 创建百度智能云客户端client
from aip.face import base64 # 调取图片格式转换工具
import time

def main():
	cap = cv.VideoCapture()
	cap.open(0)  # 打开摄像头

	# 登陆百度智能云:
	APP_ID = 'xxxxxxxx'
	API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
	SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
	# 创建自已百度云应用的客户端,账号密码确定接入的是百度云的“人脸考勤”应用
	client = AipFace(APP_ID, API_KEY, SECRET_KEY)
	# 创建haar分类器:
	cf = cv.CascadeClassifier(
		r"D:\anaconda3\envs\ml_dl\Lib\site-packages\haarcascades\haarcascade_frontalface_alt2.xml")
	while cap.isOpened():
		flag, frame = cap.read()  # 获取摄像头截取到的图片
		img = frame  # 保留彩色原图frame <class 'numpy.ndarray'>
		gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 灰度处理
		# cv.equalizeHist(gray_img,gray_img) # 直方图均衡化:这个可以不要,处理效果更好
		# 寻找特征(人脸)矩阵:
		allFaceRect = cf.detectMultiScale(gray_img,) #得到的视频中出现的所有的人脸,并且保存在numpy.ndarray中(矩形向量组)
		# print(type(allFaceRect[0])) # 图片中的第一张人脸# <class 'numpy.ndarray'> 没有脸的时候,返回()
		# 矩形跟随人脸样本来绘图:
		if allFaceRect is not ():
			x,y,w,h = allFaceRect[0] # 第一张人脸标识出来
			cv.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 255))
			# for x, y, w, h in allFaceRect: # 标识出所有人脸
			# 	cv.rectangle(gray_img, (x, y), (x + w, y + h), (255, 255, 255))  # 在每张图片中找到人脸并标注正方形
			# 至此,找到了人脸,将人脸存放在一个容器face_img当中:
			face_img = gray_img[y:y+w,x:x+h] # 将第一张人脸保存下来
			check_result,img_encode = cv.imencode(".jpg", face_img)  # 将找到的人脸进行编码存入缓存img_encode中。
			# print(type(img_encode),img_encode) # 查看在内存中的图片的数据类型。
			# 测试缓存中是否保存成功了:
			# res = cv.imdecode(img_encode,1)
			# cv.imshow("demo",res)
			# 人脸搜索
			# 1、将缓存区的图片img_encode转换为base64格式且返回处理后的图片:
			base64img_send_to_aiServer = base64.b64encode(img_encode)

			# 2、调用search()
			# 注意:search()函数的第一个参数是字符串!需要把base64的字节序转换成字符串
			res = client.search(bytes.decode(base64img_send_to_aiServer), "BASE64", "Teacher")
			# print(res,type(res)) # 得到处理的结果 # 返回的是一个字典类型。
			# 带参options:client.search(image, imageType, groupIdList, options) ----不用
			# imageType参数的值:
			# 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;---选择这个,将图片进行base64编码
			# URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
			# FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个

			# groupIdList参数: 人脸分组的序号,通过序号选择对应的组,如果要在多个组之间选择,则用逗号分隔序号

			# res_json:返回的是找到的人脸的相关信息(结果),格式json:
			# {
			# 	"face_token": "fid",
			# 	"user_list": [   返回的所有找到的用户的列表
			# 		{
			# 			"group_id": "test1",
			# 			"user_id": "u333333",
			# 			"user_info": "Test User",
			# 			"score": 99.3  人脸匹配度(低于80即搜索失败)
			# 		}  每个用户都有这四个数据,多个user用逗号分隔
			# 	]
			# }
			'''
			{
				'error_code': 0, 
				'error_msg': 'SUCCESS', 
				'log_id': 2253051395, 
				'timestamp': 1667464653,
				'cached': 0, 
				'result': 
				{
					'face_token': '551d377ffeb0d24fed5b9dc07885203c', 
					'user_list': [
						{
						'group_id': 'Teacher',
						 'user_id': 'ChenBingXu',
						 'user_info': '', 
						 'score': 97.605316162109
						 }
					]
				}
			}
			'''
			if 'result' in res.keys():
				print(res['result'])
				name = res['result']['user_list'][0]['user_id'] #从数据中拿到返回的人脸匹配的姓名name
				current_time = time.strftime("%Y.%m.%d %H:%M:%S",time.localtime(time.time())) # 获取系统时间
				print(name,current_time)
				cv.putText(frame,str(name)+" "+str(current_time),(0,50),cv.FONT_HERSHEY_SIMPLEX, 0.75, (255, 255, 255), 2)

		# 显示灰度图
		cv.imshow("demo", frame)

		key_pressed = cv.waitKey(5)
		# 按ESC退出:
		if key_pressed == 27:
			break
	# 关闭摄像头:
	cap.release()
	# 关闭窗口:
	cv.destroyAllWindows()


if __name__ == '__main__':
	main()  # 调用主函数
# print(cv.__file__) # 打印库位置,将haarcascade训练器样板导入

四、声明

仅供教学和个人学习爱好者作为基础入门材料使用,项目中内容不涉及任何企业及个人保密成分,不可用于商业用途,特此声明!如有盗版等问题必追究其法律责任,严禁抄袭剽窃等行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/345155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中睿天下获评2022年度中关村网信联盟工业互联网标准工作特别贡献奖

近日&#xff0c;中关村网络安全与信息化产业联盟&#xff08;简称“CCAIA”&#xff09;于线上召开联盟第二届第五次会员大会&#xff0c;来自全国的联盟成员代表、行业专家等100余人出席会议&#xff0c;共同听取了联盟2022年工作总结与2023年工作计划&#xff0c;大会设置了…

春招Leetcode刷题日记-D2-贪心算法-训练专题

D2-贪心算法-训练专题贪心算法使用总结力扣605. 种花问题思路代码力扣763. 划分字母区间思路代码另一种思路贪心算法使用总结 当我们意识到&#xff0c;满足贪心算法三要素时候&#xff0c;解决贪心算法问题的时候&#xff0c;一定要遵循的步骤&#xff1a; 1、读懂题目限制条…

数据结构与算法:7种必须会的排序以及3种非基于比较排序

1.什么是排序 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序…

大数据专业职业前景如何

大数据专业毕业生未来的岗位选择空间比较大&#xff0c;有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位&#xff0c;在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类&#xf…

usbmon---Linux下USB数据传输监控

文章目录Usb包的总类&#xff08;1&#xff09;令牌包&#xff08;2&#xff09;数据包&#xff08;3&#xff09;握手包&#xff08;4&#xff09;特殊包Usb包的事务usb四种传输类型批量传输等时传输中断传输控制传输usbmon的使用&#xff08;1&#xff09;首先检测内核是否支…

算法刷题打卡第90天:表现良好的最长时间段

表现良好的最长时间段 难度&#xff1a;中等 给你一份工作时间表 hours&#xff0c;上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候&#xff0c;那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」&#xff0c;意味在这…

常量const、引用、指针的大杂烩

文章目录1 普通引用1.1 对普通值的普通引用1.2 对常量值的普通引用1.3 对普通指针的普通引用1.4 对常量指针的普通引用1.5 对指针常量的普通引用1.6 对指向常量的指针常量的普通引用2 常量引用2.1 对普通值的常量引用2.2 对常量值的常量引用2.3 对普通指针的常量引用2.4 对常量…

2023年留学基金委(CSC)西部/地方合作项目选派办法及解读

2023年2月13日国家留学基金委&#xff08;CSC&#xff09;官方网站发布了2023年西部地区人才培养特别项目、地方合作项目通知。知识人网小编现将其选派工作流程及选派办法原文转载并加以解读、提出建议。知识人网建议1. 邀请函是公派申请的必备条件。对于外语语言证明未达标者&…

React学习笔记(番外二)——列表多选批量处理复合组件

React学习笔记&#xff08;番外二&#xff09;——列表多选批量操作复合组件前言〇、Show you the code一、 任务分析及拆解表头行的Checkbox——总开关记录行的Checkbox——行级开关二、 基础实现表头行的文件——header-row.js记录行的文件——record-row.js页面的文件App.js…

Linux操作系统学习(进程退出)

文章目录进程终止退出码进程退出场景进程退出的方式进程终止 退出码 ​ 我们知道每个main函数结尾都有return&#xff0c;一般都是return 0&#xff0c;用echo $&#xff1f;就可以查看它的退出码&#xff0c;0就是他的退出码&#xff0c;也可以写一些别的数值&#xff0c;比…

微服务项目【网关服务限流熔断降级分布式事务】

网关服务限流熔断降级 第1步&#xff1a;启动sentinel-dashboard控制台和Nacos注册中心服务 第2步&#xff1a;在网关服务中引入sentinel依赖 <!-- sentinel --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-…

好好学react源码然后惊艳所有人

hello&#xff0c;这里是潇晨&#xff0c;今天我们来聊聊react源码&#xff0c;作为使用react多年的前端工程师&#xff0c;我们是否还在使用着各种应用层面的库、框架呢&#xff0c;是否在面试过程中遇到一些关于react源码方面的问题呢&#xff0c;如果是&#xff0c;那么是否…

数据结构与算法:java对象的比较

1.基本类型的比较 在Java中&#xff0c;基本类型的对象可以直接比较大小。 public class TestCompare {public static void main(String[] args) {int a 10;int b 20;System.out.println(a > b);System.out.println(a < b);System.out.println(a b);char c1 A;char…

互联网舆情监测公司监测哪些内容,TOOM北京舆情监测公司

互联网舆情监测公司是一种提供舆情监测、分析和管理服务的公司&#xff0c;其业务主要涉及互联网舆情监测、数据分析、报告撰写、危机处理等方面。这些公司通过使用各种技术和工具&#xff0c;帮助客户监测他们在互联网上的声誉和品牌形象&#xff0c;并提供相应的建议和解决方…

前端基于 Docker 的 SSR 持续开发集成环境实践

项目收益 整体开发效率提升20%。加快首屏渲染速度&#xff0c;减少白屏时间&#xff0c;弱网环境下页面打开速度提升40%。 权衡 在选择使用SSR之前&#xff0c;需要考虑以下事项&#xff01; SSR需要可以运行Node.js的服务器&#xff0c;学习成本相对较高。对于服务器而言&a…

“就业”or“创业”,大学生毕业如何选择,校园市场是新出路?

据公开数据显示&#xff0c;2023届全国高校毕业生预计达到1158万人&#xff0c;同比增加82万人。规模和增量创历史新高。今年就业形势再次复杂严峻起来。 “就业难”这个词在疫情下的毕业季尤为明显。超过1000万人同时加入了争夺就业机会的行列&#xff0c;形成了庞大的求职阵容…

网络安全-靶场搭建

网络安全-靶场搭建 靶场就是给你练习用的&#xff0c;因为如果你直接用其他网站搞会把他搞炸的&#xff08;犯法的&#xff09; 简单概括&#xff1a;把靶场文件放到Phpstudy的网站&#xff0c;放到根目录里面 要用到之前下载的phpstudy 然后开启mysql和apache&#xff0c;默…

【2023】Prometheus-Blackbox_exporter使用

目录1.下载及安装blackbox_exporter2.修改配置文件设置监控内容2.1.使用http方式作为探测3.与prometheus集成4.导入blackbox仪表盘进行观测1.下载及安装blackbox_exporter 下载安装包 wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.23.0/black…

企业现代化管理模式中,数据指标体系是什么

当前时代&#xff0c;数据已经成为了构建现代社会的重要元素&#xff0c;渗透到人们生活的方方面面。在商业世界中&#xff0c;数据的传播应用更是按下了加速键&#xff0c;在短时间内就让各行各业的企业开始围绕数据进行信息化、数字化转型&#xff0c;把数据当作企业重要的战…

前端原生 CSS 跑马灯效果,无限轮播(横竖版本,带渐变遮罩,简单实用)

一、横版跑马灯 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…