【python】BaiDuAI-人脸检测、人脸搜索、人脸注册
文章目录
- 一、打开摄像头
- 二、获取摄像头捕捉的一帧图片,保存下来并进行人脸检测
- 三、建立人脸库
- 四、人脸搜索
- 五、人脸注册
一、打开摄像头
1、初始化打开摄像头按钮
# 初始uidef init_ui(self):self.openCameraBtn=QPushButton("打开摄像头",self)self.openCameraBtn.move(50,50)
2、初始化连接,按钮与槽函数
# 初始化连接 调用该函数def init_connection(self):# 打开摄像头self.openCameraBtn.clicked.connect((self.openCamera))
3、打开摄像头按钮槽函数
def openCamera(self):# 打开摄像头self.camera=cv2.VideoCapture(0)self.img_flag = Truewhile self.img_flag:status,img=self.camera.read()if status:# 模式转换,bgr->rgbself.img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#shape(行、列、通道数) QImage(data数据,宽,高度)qimg=QImage(self.img.data,self.img.shape[1],self.img.shape[0],QImage.Format_RGB888)
# 图片显示到labelself.rightLabel.setPixmap(QPixmap.fromImage(qimg))
# 持续运行cv2.waitKey(10)
4、初始化label用来显示打开摄像头获取的界面
# 显示图片self.rightLabel=QLabel("",self)self.rightLabel.setMinimumSize(400,300)self.rightLabel.move(230, 52)
完整代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import cv2class LoginWin(QWidget):def __init__(self):super().__init__()self.setWindowTitle("OpenCameraWin")self.setFixedSize(700, 500)# 调用ui设置函数self.init_ui()self.init_connection()# 初始uidef init_ui(self):self.openCameraBtn=QPushButton("打开摄像头",self)self.openCameraBtn.move(50,50)self.getPicBtn=QPushButton("获取图片",self)self.getPicBtn.move(50, 120)# 显示图片self.rightLabel=QLabel("",self)self.rightLabel.setMinimumSize(400,300)self.rightLabel.move(230, 52)# 初始化数据def init_data(self):pass# 初始化连接 调用该函数def init_connection(self):# 打开摄像头self.openCameraBtn.clicked.connect((self.openCamera))def openCamera(self):# 打开摄像头self.camera=cv2.VideoCapture(0)self.img_flag = Truewhile self.img_flag:status,img=self.camera.read()if status:# 模式转换self.img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#shape(行、列、通道数) QImage(data数据,宽,高度)qimg=QImage(self.img.data,self.img.shape[1],self.img.shape[0],QImage.Format_RGB888)
# 图片显示到labelself.rightLabel.setPixmap(QPixmap.fromImage(qimg))
# 持续运行cv2.waitKey(10)# 1.创建应用
app = QApplication(sys.argv)
# 2.创建窗口
LoginView = LoginWin()
# 3.窗口显示 show
LoginView.show()
# 4.程序运行
sys.exit(app.exec())
二、获取摄像头捕捉的一帧图片,保存下来并进行人脸检测
1、获取图片按钮
self.getPicBtn=QPushButton("获取图片",self)self.getPicBtn.move(50, 120)
2、连接
self.getPicBtn.clicked.connect((self.getPicture))
3、封装人脸检测类
import base64import requests
import jsonclass BaiDuAI:def __init__(self,AK='3bbdU8i9o7bMg4Wg0KSbNamr',SK='GvesuaedzQucRZdvgf9FikS57yc00xMd'):self.AK=AKself.SK=SK# 定义获取最新的接口def get_access_token(self):# client_id 为官网获取的AK, client_secret 为官网获取的SKhost = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=3bbdU8i9o7bMg4Wg0KSbNamr&client_secret=GvesuaedzQucRZdvgf9FikS57yc00xMd'print(host)response = requests.get(host)if response:# print(response.json(), type(response.json()))# 访问服务器所给的令牌口令print(response.json()["access_token"])return response.json()["access_token"]# 人脸检测函数(要检测的图片路径作为参数传进来)def detect_face(self,img_path):# 请求的网址request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"# 图片处理的方式img_file = open(img_path, "rb")img_base64 = base64.b64encode(img_file.read())# print(img_base64,type(img_base64))# 请求参数params = {"image": str(img_base64,'utf-8'), # 强转str序列化,记得加编码格式"image_type": "BASE64","max_face_num": 2}params = json.dumps(params)access_token = self.get_access_token()request_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:# print(response.json())result=response.json()['result']# 如果result存在,表示有人脸if result:# 拿到人脸区域范围print(result['face_list'][0]['location'])left=int(result['face_list'][0]['location']['left'])top = int(result['face_list'][0]['location']['top'])width = int(result['face_list'][0]['location']['width'])height = int(result['face_list'][0]['location']['height'])print(left,top,width,height)# 返回元组return left,top,left+width,height+topelse:# 返回内容结构要一致return 0,0,0,0else:# 返回内容结构要一致return 0, 0, 0, 0
4、引入人脸检测类,实例化对象
from tool.BaiduAI import BaiDuAI# 实例化人脸检测对象self.ai=BaiDuAI()
5、槽函数
def getPicture(self):"""1.获取self.img2.关闭摄像头3.人脸检测4.返回人脸区域,裁剪出来:return:"""# 1.获取self.img:将该帧摄像头获取的画面保存为图片到文件夹里cv2.imwrite("userImg/user01.png",self.img)print("获取图片成功!")# 2.关闭摄像头self.img_flag=False# 3.人脸检测self.ai.detect_face("userImg/user01.png")
返回人脸所在区域
判断是否检测到人脸,如果检测到了,框出人脸区域,并将图片显示到label上。
# 未检测到人脸if left == 0 and top == 0 and right == 0 and buttom == 0:QMessageBox(self,"登陆提示","未检测到人脸")else:cv2.rectangle(self.img,(left,top),(right,buttom),(0,0,0),2)qimg = QImage(self.img.data, self.img.shape[1], self.img.shape[0], QImage.Format_RGB888)# 图片显示到labelself.rightLabel.setPixmap(QPixmap.fromImage(qimg))
三、建立人脸库
1、登录账号,应用列表,查看人脸库
2、新建用户组
3、新建用户
四、人脸搜索
人脸搜索与人脸库中照片人物进行对比
复制示例代码封装成函数稍作修改
示例代码:
# encoding:utf-8import requests'''
人脸搜索
'''request_url = "https://aip.baidubce.com/rest/2.0/face/v3/search"params = "{"image":"027d8308a2ec665acb1bdf63e513bcb9","image_type":"FACE_TOKEN","group_id_list":"group_repeat,group_233","quality_control":"LOW","liveness_control":"NORMAL"}"
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, data=params, headers=headers)
if response:print (response.json())
封装函数:
# 人脸搜索def search_face(self,img_path,group_id):'''人脸搜索'''request_url = "https://aip.baidubce.com/rest/2.0/face/v3/search"# params = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"group_id_list\":\"group_repeat,group_233\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}"# 图片处理的方式img_file = open(img_path, "rb")img_base64 = base64.b64encode(img_file.read())# print(img_base64,type(img_base64))# 请求参数params = {"image": img_base64,"image_type": "BASE64","group_id_list": str(group_id)}access_token = self.get_access_token()request_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:print(response.json())
测试
# 单独调用人脸搜索函数
if __name__== "__main__":# 实例化百度AIai=BaiDuAI()# 调用函数接口ai.search_face("../userImg/wyb00.jpg","user_demo")
- 与人脸库一张照片人物相同照片不同
结果:86%相似度
- 与人脸库一张照片人物都相同
结果:100%相似度
- 与人脸库一张照片人物都不相同
结果:32%相似度
五、人脸注册
仿照上述代码 封装人脸注册函数
# 人脸注册def people_reg(self,img_path,group_id,user_id):'''人脸注册'''request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add"params = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"group_id\":\"group_repeat\",\"user_id\":\"user1\",\"user_info\":\"abc\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}"# 图片处理的方式img_file = open(img_path, "rb")img_base64 = base64.b64encode(img_file.read())# print(img_base64,type(img_base64))# 请求参数params = {"image": img_base64,"image_type": "BASE64","group_id": str(group_id),"user_id": str(user_id)}access_token = self.get_access_token()request_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/json'}response = requests.post(request_url, data=params, headers=headers)if response:print(response.json())
测试:
# 单独调用函数
if __name__ == "__main__":# 实例化百度AIai = BaiDuAI()# 调用函数接口# ai.search_face("../userImg/bl1.jpg", "user_demo")ai.people_reg("../userImg/bl.png", "user_demo", "bailu")
注册成功:
测试了一下,groupid和userid都是存在就写入,不存在就创建写入。
【python】BaiDuAI-人脸检测、人脸搜索、人脸注册相关推荐
- 使用Python,OpenCV和Haar级联进行人脸检测——轻量级的人脸检测器
使用Python,OpenCV和Haar级联进行人脸检测--轻量级的人脸检测器 1. 效果图 2. 原理 2.1 项目结构 2.2 [haarcascade_frontalface_default.x ...
- 人脸检测MTCNN和人脸识别Facenet(附源码)
原文链接:人脸检测MTCNN和人脸识别Facenet(附源码) 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haa ...
- CV之FDFA:利用MTCNN的脚本实现对LFW数据集进行FD人脸检测和FA人脸校准
CV之FD&FA:利用MTCNN的脚本实现对LFW数据集进行FD人脸检测和FA人脸校准 目录 运行结果 运行过程 运行(部分)代码 在裁剪好的LFW数据集进行验证 运行结果 运行过程 time ...
- c#结合emgucv进行人脸检测_Python实时人脸识别/替换
摄像头中的人脸检测,也是人脸识别的一部分, 摄像头播放的画面本质上是按帧将图片拼凑起来的, 有图片的话,获取图片的中人脸呢再上一篇中我们已经涉及了 想要进行人脸识别, 我们需要OpenCV, 还是先来 ...
- 【OpenCV-Python】——Haar人脸检测深度学习人脸检测EigenFaces/FisherFaces/LBPH人脸识别
目录 前言: 1.人脸检测 1.1 基于Haar的人脸检测 1.2 基于深度学习的人脸检测 2.人脸识别 2.1 EigenFaces人脸识别 2.2 FisherFaces人脸识别 2.3 LBPH ...
- 【Python】批量检测图片中的人脸并制作数据集(Dlib)
文章目录 写在前面 安装依赖 素材准备 单图预览 多图预览 人脸检测 数据处理 最终结果 代码仓库 写在前面 本教程教你使用卷积神经网络深度学习模型批量检测图片中的人脸,并制作人脸数据集. 安装依赖 ...
- (转)第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)
http://www.cnblogs.com/zyly/p/9703614.html 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第 ...
- 使用Opencv+树莓派实现人脸识别(一)图片人脸检测和摄像头人脸捕捉
前置安装 我的树莓派是3b,就1G内存,系统为stretch版本,自带的python为3.5版本强烈建议在烧写树莓派系统时就直接用buster版本,自带的python版本在3.7及以上 Windows ...
- 使用OpenCV进行人脸检测(Viola-Jones人脸检测方法)
扩展阅读: OpenCV用于人脸检测 参考文献:Paul Viola, Michael J. Jones. Robust Real-Time Face Detection[J]. Internatio ...
- 【机器学习】 - 使用dlib进行人脸定位,人脸检测,给人脸图片戴口罩
detector = dlib.get_frontal_face_detector() 功能:人脸检测画框 参数:无 返回值:默认的人脸检测器 faces = detector(img_gray, 0 ...
最新文章
- 让你彻底明白什么叫游戏引擎(1)
- c:forEach items=${list} var=tt varStatus=status 的相关大小长度
- Postman接口测试之POST、GET请求方法
- ABAP:SAP报表性能的优化
- 清晰版 构建最高可用oracle数据库系统.pdf,构建最高可用Oracle数据库系统
- Redhat与ubuntu配置网卡
- 32核心板怎么样使用stlink_终极调试工具 EventRecorder 使用方法,各种 Link 通吃
- 编程算法基础-一刀切法
- ARP (地址解析协议)
- Enterprise Library 5.0 中的Validators
- 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
- Slowloris DoS攻击的原理与简单实现
- 第二章:计算思维——知识点整理
- 8万条数据告诉你:跟着大股东和高管买他家股票,能赚钱吗?【邢不行|量化小讲堂系列60-实战篇】
- 从10G升级到40G/100G,MPO光纤链路中的极性问题
- 素数统计 平移区间筛质数(1e9)
- (22)UVM 虚拟类序列(virtual sequence)
- Excel表格下载模板(带下拉框选项)
- 三星S7手机如何使用屏幕镜像功能
- 截屏录屏工具(免费解压版)
热门文章
- Railway是另一种PaaS云服务
- Oracle数据库sql语句练习【emp和dept的连表查询由浅入深】
- 【每日早报】2019/08/16
- SQLite julianday DateTime日期时区问题小记录
- 反编译小程序.wxapkg文件
- [Linux]冯诺依曼体系结构
- mysql not exists无效_MySQL MATCH AGAINST无效
- 菜鸟记录之JDK1.8十大新特性
- 学会NI-DAQmx10个函数,解决80%的数据采集应用问题
- PHP实现根据出生年月日计算年龄的功能(代码示例)