文章目录

  • 一、打开摄像头
  • 二、获取摄像头捕捉的一帧图片,保存下来并进行人脸检测
  • 三、建立人脸库
  • 四、人脸搜索
  • 五、人脸注册

一、打开摄像头

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-人脸检测、人脸搜索、人脸注册相关推荐

  1. 使用Python,OpenCV和Haar级联进行人脸检测——轻量级的人脸检测器

    使用Python,OpenCV和Haar级联进行人脸检测--轻量级的人脸检测器 1. 效果图 2. 原理 2.1 项目结构 2.2 [haarcascade_frontalface_default.x ...

  2. 人脸检测MTCNN和人脸识别Facenet(附源码)

    原文链接:人脸检测MTCNN和人脸识别Facenet(附源码) 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haa ...

  3. CV之FDFA:利用MTCNN的脚本实现对LFW数据集进行FD人脸检测和FA人脸校准

    CV之FD&FA:利用MTCNN的脚本实现对LFW数据集进行FD人脸检测和FA人脸校准 目录 运行结果 运行过程 运行(部分)代码 在裁剪好的LFW数据集进行验证 运行结果 运行过程 time ...

  4. c#结合emgucv进行人脸检测_Python实时人脸识别/替换

    摄像头中的人脸检测,也是人脸识别的一部分, 摄像头播放的画面本质上是按帧将图片拼凑起来的, 有图片的话,获取图片的中人脸呢再上一篇中我们已经涉及了 想要进行人脸识别, 我们需要OpenCV, 还是先来 ...

  5. 【OpenCV-Python】——Haar人脸检测深度学习人脸检测EigenFaces/FisherFaces/LBPH人脸识别

    目录 前言: 1.人脸检测 1.1 基于Haar的人脸检测 1.2 基于深度学习的人脸检测 2.人脸识别 2.1 EigenFaces人脸识别 2.2 FisherFaces人脸识别 2.3 LBPH ...

  6. 【Python】批量检测图片中的人脸并制作数据集(Dlib)

    文章目录 写在前面 安装依赖 素材准备 单图预览 多图预览 人脸检测 数据处理 最终结果 代码仓库 写在前面 本教程教你使用卷积神经网络深度学习模型批量检测图片中的人脸,并制作人脸数据集. 安装依赖 ...

  7. (转)第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)

    http://www.cnblogs.com/zyly/p/9703614.html 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第 ...

  8. 使用Opencv+树莓派实现人脸识别(一)图片人脸检测和摄像头人脸捕捉

    前置安装 我的树莓派是3b,就1G内存,系统为stretch版本,自带的python为3.5版本强烈建议在烧写树莓派系统时就直接用buster版本,自带的python版本在3.7及以上 Windows ...

  9. 使用OpenCV进行人脸检测(Viola-Jones人脸检测方法)

    扩展阅读: OpenCV用于人脸检测 参考文献:Paul Viola, Michael J. Jones. Robust Real-Time Face Detection[J]. Internatio ...

  10. 【机器学习】 - 使用dlib进行人脸定位,人脸检测,给人脸图片戴口罩

    detector = dlib.get_frontal_face_detector() 功能:人脸检测画框 参数:无 返回值:默认的人脸检测器 faces = detector(img_gray, 0 ...

最新文章

  1. 让你彻底明白什么叫游戏引擎(1)
  2. c:forEach items=${list} var=tt varStatus=status 的相关大小长度
  3. Postman接口测试之POST、GET请求方法
  4. ABAP:SAP报表性能的优化
  5. 清晰版 构建最高可用oracle数据库系统.pdf,构建最高可用Oracle数据库系统
  6. Redhat与ubuntu配置网卡
  7. 32核心板怎么样使用stlink_终极调试工具 EventRecorder 使用方法,各种 Link 通吃
  8. 编程算法基础-一刀切法
  9. ARP (地址解析协议)
  10. Enterprise Library 5.0 中的Validators
  11. 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
  12. Slowloris DoS攻击的原理与简单实现
  13. 第二章:计算思维——知识点整理
  14. 8万条数据告诉你:跟着大股东和高管买他家股票,能赚钱吗?【邢不行|量化小讲堂系列60-实战篇】
  15. 从10G升级到40G/100G,MPO光纤链路中的极性问题
  16. 素数统计 平移区间筛质数(1e9)
  17. (22)UVM 虚拟类序列(virtual sequence)
  18. Excel表格下载模板(带下拉框选项)
  19. 三星S7手机如何使用屏幕镜像功能
  20. 截屏录屏工具(免费解压版)

热门文章

  1. Railway是另一种PaaS云服务
  2. Oracle数据库sql语句练习【emp和dept的连表查询由浅入深】
  3. 【每日早报】2019/08/16
  4. SQLite julianday DateTime日期时区问题小记录
  5. 反编译小程序.wxapkg文件
  6. [Linux]冯诺依曼体系结构
  7. mysql not exists无效_MySQL MATCH AGAINST无效
  8. 菜鸟记录之JDK1.8十大新特性
  9. 学会NI-DAQmx10个函数,解决80%的数据采集应用问题
  10. PHP实现根据出生年月日计算年龄的功能(代码示例)