利用百度进行人脸搜索

本文介绍如何使用百度AI平台进行人脸搜索,通过对比人脸库中的图片,实现人脸识别并返回匹配结果及相似度评分。如果未找到匹配项,则提示用户进行人脸注册。

  

感谢优秀的你打开了小白的文章

希望在看文章的你今天又进步了一点点,离美好生活更近一步!

目录

前言        

实例代码

 返回结果

选择要识别的人脸照片

 人脸搜索

前言        

在上一篇文章利用百度进行人脸注册_am_student的博客-优快云博客进行人脸注册之后,我们可以将要识别的人脸进行搜索,若在自己的数据库中,那么返回注册号以及姓名,并得出相似得分。如果没有则返回没有此用户。

实例代码

# -*- coding: utf-8 -*-

from aip import AipFace
import cv2
import base64
import sys
from graphics import*
import tkinter as tk
from tkinter import filedialog
from time import sleep
sys.setrecursionlimit(1000000) 
 

APP_ID = '16290061'
API_KEY = '4uKwGeC2Ci7aHbn6dHuYIrGc'
SECRET_KEY = 'KRdPZdtYwLsdEthIGu03jb7GEeRtTUMF'
 
aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY)


def face_search(filepath):  
    with open(filepath, 'rb') as fp:
        base64_data = base64.b64encode(fp.read())
    image = str(base64_data, 'utf-8')
    imageType="BASE64"
    groupIdList='face'
    result=aipFace.search(image,imageType,groupIdList)
    img = cv2.imread(filepath)
    cv2.imshow('img', img)
    if (result['result']['user_list'][0]['score']>=70):
        win = GraphWin('人脸搜索结果',300,300)
        Text(Point(win.getWidth()/2, 40), "搜索结果:").draw(win)
        Text(Point(win.getWidth()/2, 65), result['result']['user_list'][0]['user_info']).draw(win)
        Text(Point(win.getWidth()/2, 120), "相似得分为:").draw(win)
        Text(Point(win.getWidth()/2, 145), result['result']['user_list'][0]['score']).draw(win)
        win.getMouse()
        win.close()
    else:
        win = GraphWin('人脸搜索结果',300,300)
        Text(Point(win.getWidth()/2, 40), "查找无结果……").draw(win)
        Text(Point(win.getWidth()/2, 120), "建议您先在人脸库中注册").draw(win)       
        win.getMouse()
        win.close()

if __name__=='__main__':
    
    filepath = "C:\\Users\\ZXY13\\Desktop\\train_face\\1.jpg"
    win = GraphWin('人脸搜索', 500, 90)
    win.setBackground("yellow")
    Text(Point(win.getWidth()/2, 40), "请在文件夹中选择要搜索的人脸图片").draw(win)
    sleep(1)
    filepath = filedialog.askopenfilename()
    face_search(filepath)

  

 返回结果

选择要识别的人脸照片

 

 人脸搜索

我们在上一次已经进行了人脸注册,在信息库中已经包含了此人的照片以及名称,那么我们在搜索时候就可以得到我们所需要此人的信息。此人的名字为小白,与在数据库中存储的信息的照片相似度为96.45%.

 本代码可以通过公众号获取

### 百度 AI 人脸搜索 API 的使用教程 百度 AI 提供了强大的人脸搜索功能,允许开发者通过其开放平台上的 RESTful 接口快速实现基于人脸相似性的检索能力。以下是关于如何使用百度 AI 人脸搜索 API 的详细介绍。 #### 1. 面向的功能描述 百度 AI 的 **人脸搜索** 功能主要用于在已有的人脸库中查找与输入图片最接近的一张或多张人脸,并返回匹配的结果及其置信度分数。该功能适用于场景化需求,比如门禁系统、考勤打卡以及身份验证等[^4]。 #### 2. 准备工作 为了成功调用人脸搜索 API,需完成以下准备工作: - 注册并登录百度 AI 开放平台账号。 - 创建应用获取 `API Key` 和 `Secret Key`。 - 下载官方 SDK 或者直接访问 HTTPS 请求地址进行接口调用[^1]。 #### 3. 调用方式 百度提供了两种主要方法来调用此 API: ##### 方法一:HTTP POST 请求 可以直接发送 HTTP POST 请求到指定 URL 地址来进行操作。下面是一个标准请求示例: ```bash curl -X POST 'https://aip.baidubce.com/rest/2.0/face/v3/search' \ -H "Content-Type: application/json" \ -d '{ "image": "base64_encoded_image_data", "group_id_list": "test_group", "image_type": "BASE64", "quality_control": "NORMAL" }' --get-url-param '?access_token=your_access_token' ``` 其中需要注意的关键字段解释如下: - `image`: 图片数据编码成 Base64 字符串形式上传; - `group_id_list`: 表明要查询的目标组集合名称列表; - `image_type`: 定义传入图像的数据类型 (支持 BASE64/FACE_TOKEN)[^2]。 ##### 方法二:Java 实现案例 如果采用 Java 编程语言,则可以利用 HttpClient 库构建网络连接并向服务器提交 JSON 数据包。具体代码片段展示如下所示: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class BaiduFaceSearch { public static void main(String[] args) throws Exception { String urlStr = "https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=" + YOUR_ACCESS_TOKEN; URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); // 设置请求头信息 conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/json"); // 构造JSON参数体 String jsonInputString = "{ \"image\": \""+YOUR_BASE64_IMAGE+"\", " +"\"image_type\": \"BASE64\", " +"\"group_id_list\": \"test_group\", " +"\"quality_control\": \"NORMAL\" }"; try(OutputStream os = conn.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); } BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); StringBuilder response = new StringBuilder(); String line; while ((line = br.readLine()) != null){ response.append(line.trim()); } System.out.println(response.toString()); br.close(); } } ``` 上述例子展示了完整的流程,包括设置必要的头部属性、组装有效的负载内容以及解析响应消息等内容。 #### 4. 参数详解 | 参数名 | 描述 | |------------------|----------------------------------------------------------------------------------------| | image | 输入的人脸照片文件路径或者经过 base64 编码后的字符串表示 | | group_id_list | 待搜索的用户分组 ID 列表 | | image_type | 指定输入图像是原始图片还是 face token | | quality_control | 控制图片质量检测选项,默认值为 NONE | 更多详细的可选配置项请参阅官方文档链接。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值