调用百度API,来实现人脸活体(人脸展示攻击)(人脸反欺骗)的实时检测
目录
一、登录百度API网站,申请API接口
二、创建应用列表,查看API Key 与 Secret Key
三、应用API Key 与 Secret Key,将模型部署在本地环境中
四、以视频流的方式进行实时检测
总体功能描述:
1. 调用百度API,实现对人脸展示攻击的检测;
2. 将检测模块部署到自己的电脑上,以视频窗口的方式进行实时检测;
一、登录百度API网站,申请API接口
1. 进入百度提供的关于活体检测的API网站
方式一(地址可能会变): https://ai.baidu.com/tech/face/faceliveness
方式二:
(1)进入:https://ai.baidu.com/
(2)找到活体检测入口:开放能力->人脸与人体->活体检测;
2. 点击立即使用,然后登录自己的百度账号
3. 概览->领取免费资源
4. 基础服务->人脸检测->领取
5. 5分钟之后,查看资源列表
6. 可以看到已成功领取
二、创建应用列表,查看API Key 与 Secret Key
1. 创建应用列表:公有云服务->应用列表->创建应用
2. 填写应用信息,并创建
3. 再次返回应用列表,可看到创建的应用信息,API Key 与 Secret Key在绿色框里
三、应用API Key 与 Secret Key,将模型部署在本地环境中
逻辑思想:
(1)指定API Key 与 Secret Key;
(2)以二进制的方式读取本地测试图片;
(3)二进制图片转base64;
(4)将base64传入接口;
代码如下:
import requests
import json
import base64
API_KEY = ""
SECRET_KEY = ""
def api_interface(base_str = None):url = "https://aip.baidubce.com/rest/2.0/face/v3/faceverify?access_token=" + get_access_token()payload = json.dumps([{"image":base_str,"image_type": "BASE64","face_field": "spoofing"}])headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)# 查看返回的结果print(response.text)print("="*10)# 查看预测分数print(response.json()["result"]["face_liveness"])if response.json()["error_code"] != 0:return 0elif response is None:# print("Null")return 0.0else:return response.json()["result"]["face_liveness"]def get_access_token():"""使用 AK,SK 生成鉴权签名(Access Token):return: access_token,或是None(如果错误)"""url = "https://aip.baidubce.com/oauth/2.0/token"params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}# print(str(requests.post(url, params=params).json().get("access_token")))return str(requests.post(url, params=params).json().get("access_token"))if __name__ == '__main__':f = open('test.jpg', 'rb')image = base64.b64encode(f.read())image64 = str(image, 'utf-8')api_interface(image64)
友情提示:如果上述代码运行有问题 ,在保证API Key 与 Secret Key未输错的情况下,很有可能是官方获取token的url地址变了,这就去需要看官去百度API官方查最新的url接口了!
查看获取token的url的方法:
(1)公有云服务->API在线调试
(2)人体分析->获取AccessToken->示例代码->Python;绿色方框就是
该API推荐的阈值信息:(预测分数高于设定的阈值,判定为真样本;否则,判定为假样本)
运行代码,对本地的攻击图片进行测试:
可以看到,测试图像为真样本的预测分数为“0.000343”,明显低于推荐的阈值“0.30”,因此可判定为攻击样本。
四、以视频流的方式进行实时检测
以视频流的方式进行实时检测,可以理解为,借助电脑的摄像头捕捉图像,并对捕捉到的图像进行真假的判别,将判别结果以人脸检测框的形式直接呈现出来!
代码逻辑:
(1)OpenCV调用摄像头捕捉图像;
(2)提取面部区域;
(3)以二进制的方式读取面部图像,并编码为base64格式;
(4)将图像传入自定义的api_interface函数中,对图像进行判别;
(5)设定阈值,并展示判别结果;
(6)关闭摄像头;
import numpy as np
import cv2
from sklearn.externals import joblib
import base64
from python_scripts.api import api_interfacedef detect_face(img, faceCascade):faces = faceCascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5, minSize=(110, 110))return facesif __name__ == "__main__":# Open the cameracap = cv2.VideoCapture(0)if not cap.isOpened():print("Error opening camera")exit(0)width = 720height = 480cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)# # Initialize face detectorcascPath = "haarcascade_frontalface_default.xml"faceCascade = cv2.CascadeClassifier(cascPath)while True:ret, img_bgr = cap.read()if ret is False:print("Error grabbing frame from camera")breakimg_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)faces = detect_face(img_gray, faceCascade)point = (0,0)for i, (x, y, w, h) in enumerate(faces):roi = img_bgr[y:y+h, x:x+w]cv2.imwrite("roi1.jpg",roi)f = open('roi1.jpg', 'rb')image = base64.b64encode(f.read())base_64 = str(image, 'utf-8')if base_64 is not None:result = api_interface(base_str=base_64)cv2.rectangle(img_bgr, (x, y), (x + w, y + h), (255, 0, 0), 2)point = (x, y-5)print(result)text = "True"if result < 0.3:text = "False"font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img=img_bgr, text=text, org=point, fontFace=font, fontScale=0.9, color=(0, 0, 255),thickness=2, lineType=cv2.LINE_AA)else:font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img=img_bgr, text=text, org=point, fontFace=font, fontScale=0.9,color=(0, 255, 0), thickness=2, lineType=cv2.LINE_AA)cv2.imshow('img_rgb', img_bgr)key = cv2.waitKey(1)if key & 0xFF == 27:breakcv2.imshow('img_rgb', img_bgr)key = cv2.waitKey(1)if key & 0xFF == 27:breakcap.release()cv2.destroyAllWindows()
用于检测人脸的xml文件在这里:
https://github.com/ee09115/spoofing_detection/tree/master/python_scripts
结果展示:
检测时画面很流畅,非常完美!ღ( ´・ᴗ・` )
该博客如果对您有帮助的话,可以点个小心心噢 ღ( ´・ᴗ・` )
调用百度API,来实现人脸活体(人脸展示攻击)(人脸反欺骗)的实时检测相关推荐
- python3调用百度API完成人脸识别,检测人种-年龄-性别-颜值-眼镜
https://ai.baidu.com/docs#/Face-Detect/top 这个是百度人脸识别api 参考博客:https://blog.csdn.net/qq_38412868/artic ...
- python aipspeech_Python调用百度API实现语音识别(二)
咪哥杂谈 本篇阅读时间约为 5 分钟. 1 前言 上一篇文章里,大致介绍了百度官方 api 的一些前置准备工作. 想回顾的同学,可以看完本篇在下面找到历史链接. 今天就来上手实战编码,体验一下代码实现 ...
- mac下载的api文档怎么_Python调用百度API实现语音识别(二)
Python调用百度API实现语音识别(二) 前言 上一篇文章里,大致介绍了百度官方 api 的一些前置准备工作. 想回顾的同学,可以看完本篇在下面找到历史链接. 今天就来上手实战编码,体验一下代码实 ...
- java调用百度翻译_Java调用百度API实现翻译-Go语言中文社区
下面是Java调用百度API实现翻译的具体步骤: 一.在写代码之前先在在百度翻译平台中,申请APP_ID 申请地址申请的详见点击打开链接 申请之后,会得到APP_ID和SECURITY_KEY 二.j ...
- 调用百度api实现驾车路线和时间距离计算
毕设篇:调用百度api实现驾车路线和时间距离计算 效果展示 html页面: <!DOCTYPE html> <html lang="en"><head ...
- java实现文本纠错功能_调用百度API进行文本纠错
毕设做的是文本纠错方面,然后今天进组见研究生导师 .老师对我做的东西蛮感兴趣.然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能. 要求1:有多人同时在线编辑文档,然后文档功能有类似Wo ...
- 【微信小程序调用百度API实现图像识别功能】----项目实战
本章主要讲述: 如何更快的上手小程序 如何搭建一个页面以及跳转到另一个页面 如何调用百度API接口实现图像识别技术 如何在微信小程序的后台添加合法域名 私信获取源码,有问题可以关注留言或私信,计算机毕 ...
- 【Python学习笔记】简单调用百度API应用
#本文一切代码及理论均来自于郑秋生.夏敏捷二位老师主编<Python项目案例发 从入门到实践>一书,本人仅做微改.创作本文的目的仅为总结本人的学习过程和成果,借此巩固.可能存在许多疏漏之处 ...
- 麋鹿分布图制作(一)——调用百度API查询地名的坐标
最近在做保护生物学的论文,查论文的过程中发现之前的麋鹿分布图是手绘的,看起来真的是...,因此我决定重新画一下这个图. 这个地图的绘制我分为两个部分:(一)调用百度API查找地点的经纬度,(二)用py ...
最新文章
- LVS负载均衡之ipvsadm部署安装(安装篇)
- 主成分分析法_“主成分分析法”——线上讨论会等你加入
- Java 技术篇 - 从指定的web网页页面中读取html内容实例演示,从http协议下的url地址中读取web页面内容方法
- 前端微信签名验证工具_微信小程序API 用户数据的签名验证和加解密
- hdu 4974 贪心
- C++之const类成员变量,const成员函数
- [转载] 不少Gate或Node运算子 的反向传播代码
- mysql数据上传apache_配置Apache服务器 数据库mySQL
- 物理机能够ping通虚拟机,但是虚拟机无法ping通物理机
- 使用cgo,由于内存释放导致内存无效,引起的http crash
- 青海计算机三级成绩查询,2013青海计算机三级成绩查询系统
- Kotlin基础知识5
- 采用高德地图 实现打车功能代码
- 安卓上通过pydorid 3来使用jupyter notebook(鸿蒙/华为/安卓手机/平板进行python编程学习)
- Linux/C++项目结构与编译
- 跟alex学python_跟Alex学Python之
- NLP(三十四)使用keras-bert实现序列标注任务
- c++中CreateEvent函数解析(2)
- Android开发技巧:我的菜单我做主
- 【blender建模功能】00 编辑模式点线面与统计信息拓展