目录

一、登录百度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,来实现人脸活体(人脸展示攻击)(人脸反欺骗)的实时检测相关推荐

  1. python3调用百度API完成人脸识别,检测人种-年龄-性别-颜值-眼镜

    https://ai.baidu.com/docs#/Face-Detect/top 这个是百度人脸识别api 参考博客:https://blog.csdn.net/qq_38412868/artic ...

  2. python aipspeech_Python调用百度API实现语音识别(二)

    咪哥杂谈 本篇阅读时间约为 5 分钟. 1 前言 上一篇文章里,大致介绍了百度官方 api 的一些前置准备工作. 想回顾的同学,可以看完本篇在下面找到历史链接. 今天就来上手实战编码,体验一下代码实现 ...

  3. mac下载的api文档怎么_Python调用百度API实现语音识别(二)

    Python调用百度API实现语音识别(二) 前言 上一篇文章里,大致介绍了百度官方 api 的一些前置准备工作. 想回顾的同学,可以看完本篇在下面找到历史链接. 今天就来上手实战编码,体验一下代码实 ...

  4. java调用百度翻译_Java调用百度API实现翻译-Go语言中文社区

    下面是Java调用百度API实现翻译的具体步骤: 一.在写代码之前先在在百度翻译平台中,申请APP_ID 申请地址申请的详见点击打开链接 申请之后,会得到APP_ID和SECURITY_KEY 二.j ...

  5. 调用百度api实现驾车路线和时间距离计算

    毕设篇:调用百度api实现驾车路线和时间距离计算 效果展示 html页面: <!DOCTYPE html> <html lang="en"><head ...

  6. java实现文本纠错功能_调用百度API进行文本纠错

    毕设做的是文本纠错方面,然后今天进组见研究生导师 .老师对我做的东西蛮感兴趣.然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能. 要求1:有多人同时在线编辑文档,然后文档功能有类似Wo ...

  7. 【微信小程序调用百度API实现图像识别功能】----项目实战

    本章主要讲述: 如何更快的上手小程序 如何搭建一个页面以及跳转到另一个页面 如何调用百度API接口实现图像识别技术 如何在微信小程序的后台添加合法域名 私信获取源码,有问题可以关注留言或私信,计算机毕 ...

  8. 【Python学习笔记】简单调用百度API应用

    #本文一切代码及理论均来自于郑秋生.夏敏捷二位老师主编<Python项目案例发 从入门到实践>一书,本人仅做微改.创作本文的目的仅为总结本人的学习过程和成果,借此巩固.可能存在许多疏漏之处 ...

  9. 麋鹿分布图制作(一)——调用百度API查询地名的坐标

    最近在做保护生物学的论文,查论文的过程中发现之前的麋鹿分布图是手绘的,看起来真的是...,因此我决定重新画一下这个图. 这个地图的绘制我分为两个部分:(一)调用百度API查找地点的经纬度,(二)用py ...

最新文章

  1. LVS负载均衡之ipvsadm部署安装(安装篇)
  2. 主成分分析法_“主成分分析法”——线上讨论会等你加入
  3. Java 技术篇 - 从指定的web网页页面中读取html内容实例演示,从http协议下的url地址中读取web页面内容方法
  4. 前端微信签名验证工具_微信小程序API 用户数据的签名验证和加解密
  5. hdu 4974 贪心
  6. C++之const类成员变量,const成员函数
  7. [转载] 不少Gate或Node运算子 的反向传播代码
  8. mysql数据上传apache_配置Apache服务器 数据库mySQL
  9. 物理机能够ping通虚拟机,但是虚拟机无法ping通物理机
  10. 使用cgo,由于内存释放导致内存无效,引起的http crash
  11. 青海计算机三级成绩查询,2013青海计算机三级成绩查询系统
  12. Kotlin基础知识5
  13. 采用高德地图 实现打车功能代码
  14. 安卓上通过pydorid 3来使用jupyter notebook(鸿蒙/华为/安卓手机/平板进行python编程学习)
  15. Linux/C++项目结构与编译
  16. 跟alex学python_跟Alex学Python之
  17. NLP(三十四)使用keras-bert实现序列标注任务
  18. c++中CreateEvent函数解析(2)
  19. Android开发技巧:我的菜单我做主
  20. 【blender建模功能】00 编辑模式点线面与统计信息拓展

热门文章

  1. 禁用Chrome缓存
  2. iOS WKWebView基本使用
  3. Jenkins构建项目的时候出现构建不稳定异常UNSTABLE
  4. Web大学生网页作业成品——环保垃圾分类网站设计与实现(HTML+CSS+JavaScript) web前端开发技术 web课程设计 网页规划与设计
  5. CSS 几款比较常用的翻转特效
  6. sd卡和tf卡的一些常识
  7. mymps蚂蚁分类系统伪静态设置
  8. 【原创】可能要写游戏对几个游戏的思考
  9. 你必须要会的4种Web前端设计模式
  10. python利用pyperclip 模块使用计算机的剪贴板