16.阿里云人脸识别方案

16.阿里云人脸识别方案

阿里云人脸识别方案

阿里云方案官网:https://vision.aliyun.com/

人脸识别:https://vision.aliyun.com/experience/detail?spm=a2cvz.27717767.J_4147124680.37.66cd34cf4gh9Xn&tagName=facebody&children=SearchFace

1.搜索选择人脸搜索 1:N方案

选择立即开通

2.打开技术文档

https://help.aliyun.com/zh/viapi/developer-reference/face-search-1-n-2/

点击人脸搜索,根据指引完成

3.人脸人体开发平台

https://vision.console.aliyun.com/cn-shanghai/detail/facebody

购买人脸人体->人脸搜索服务

增加人脸识别数据库

增加样品,添加合适的人脸照片

4.查询人脸样本

4.1选择人脸搜索1:N

https://help.aliyun.com/zh/viapi/use-cases/face-search-1-n?spm=a2c4g.11186623.0.i5#undefined

4.2.SDK安装

https://help.aliyun.com/zh/viapi/developer-reference/the-sdk-overview?spm=a2c4g.11186623.0.0.495afe313sIG1B

选择自己要接入的语言,这里选python接入

安装SDK

生成专区:pip install alibabacloud_aigen20240111

人脸人体:pip install alibabacloud_facebody20191230

文字识别:pip install alibabacloud_ocr20191230

商品理解:pip install alibabacloud_goodstech20191230

内容审核:pip install alibabacloud_imageaudit20191230

图像识别:pip install alibabacloud_imagerecog20190930

图像生产:pip install alibabacloud_imageenhan20190930

分割抠图:pip install alibabacloud_imageseg20191230

目标检测:pip install alibabacloud_objectdet20191230

图像分析处理:pip install alibabacloud_imageprocess20200320

视觉搜索:pip install alibabacloud_imgsearch20200320

视频理解:pip install alibabacloud_videorecog20200320

视频生产:pip install alibabacloud_videoenhan20200320

视频分割:pip install alibabacloud_videoseg20200320

异步任务管理:pip install alibabacloud_viapi20230117

人脸核身服务端20200910专用版本:pip install alibabacloud_facebody20200910

这里选择的是人脸人体

pip install alibabacloud_facebody20191230

4.3.环境变量配置

将创建好的ACCESS_KEY配置到上面

export ALIBABA_CLOUD_ACCESS_KEY_ID=

export ALIBABA_CLOUD_ACCESS_KEY_SECRET=

export查看是否配置上去

配置全局的:

vi ~/.bashrc 和 /etc/profile #然后在末尾输入上面两行后保存

4.4.示例代码

https://help.aliyun.com/zh/viapi/use-cases/the-face-of-a-search-1?spm=a2c4g.11186623.0.0.75515e90bacsqO

选择文件在上海地域OSS

是通过本地照片,所以开启场景一,屏蔽场景二

数据库实例是default,修改成search_face_request.db_name = 'default'

face.py:

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

# 引入依赖包

# pip install alibabacloud_facebody20191230

import os

import io

from urllib.request import urlopen

from alibabacloud_facebody20191230.client import Client

from alibabacloud_facebody20191230.models import SearchFaceAdvanceRequest

from alibabacloud_tea_openapi.models import Config

from alibabacloud_tea_util.models import RuntimeOptions

config = Config(

# 创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。

# 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html。

# 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。

access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),

access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),

# 访问的域名

endpoint='facebody.cn-shanghai.aliyuncs.com',

# 访问的域名对应的region

region_id='cn-shanghai'

)

search_face_request = SearchFaceAdvanceRequest()

#场景一:文件在本地

stream0 = open(r'/tmp/SearchFace.jpg', 'rb')

search_face_request.image_url_object = stream0

#场景二:使用任意可访问的url

#url = 'http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/SearchFace/SearchFace1.png'

#img = urlopen(url).read()

#search_face_request.image_url_object = io.BytesIO(img)

search_face_request.db_name = 'default'

search_face_request.limit = 5

runtime_option = RuntimeOptions()

try:

# 初始化Client

client = Client(config)

response = client.search_face_advance(search_face_request, runtime_option)

# 获取整体结果

print(response.body)

except Exception as error:

# 获取整体报错信息

print(error)

# 获取单个字段

print(error.code)

# tips: 可通过error.__dict__查看属性名称

#关闭流

#stream0.close()

4.5.上传图片测试

python3.10 face.py

返回值:

{'Data': {'MatchList': [{'FaceItems': [{'Confidence': 89.856094, 'DbName': 'default', 'EntityId': 'lyf', 'FaceId': '259542194', 'Score': 0.8734040260314941}, {'Confidence': 84.14077, 'DbName': 'default', 'EntityId': 'lyf', 'FaceId': '259542199', 'Score': 0.8020768165588379}, {'Confidence': 27.265448, 'DbName': 'default', 'EntityId': 'ysy', 'FaceId': '259542245', 'Score': 0.15778201818466187}, {'Confidence': 25.78278, 'DbName': 'default', 'EntityId': 'ysy', 'FaceId': '259542248', 'Score': 0.14920198917388916}, {'Confidence': 22.197176, 'DbName': 'default', 'EntityId': 'ysy', 'FaceId': '259542278', 'Score': 0.12845250964164734}], 'Location': {'Height': 540, 'Width': 397, 'X': 845, 'Y': 397}, 'QualitieScore': 99.468575}]}, 'RequestId': '21432012-9F5A-5319-A257-D75CF9E341B4'}

(1)FaceItems(匹配到的人脸信息)

每个 FaceItems 表示数据库中和当前人脸相似的结果,按相似度(Score)降序排列:

字段

示例值

说明

Confidence

89.856094

置信度(百分比,越高越可信)

DbName

"default"

匹配的人脸所属的数据库名

EntityId

"lyf"

人员ID(如用户注册时提交的ID)

FaceId

"259542194"

人脸在数据库中的唯一ID

Score

0.873404

相似度得分(0~1,越接近1越相似)

示例解读:

第一项 "lyf" 的 Score 是 0.873(87.3% 相似),置信度 89.85%,很可能是同一个人。

后三项 "ysy" 的 Score 均低于 0.2,可能是误匹配。

(2)Location(人脸位置)

表示人脸在图片中的位置(像素坐标):

"Location": {

"Height": 540, // 人脸区域高度

"Width": 397, // 人脸区域宽度

"X": 845, // 左上角X坐标(距图片左侧)

"Y": 397 // 左上角Y坐标(距图片顶部)

}

可通过该信息在图片上绘制人脸框。

(3)QualitieScore(人脸质量)

99.468575 表示人脸质量很高(清晰度、光照、角度等均较好)。

(4)官网返回值说明:

返回数据

名称

类型

示例值

描述

名称

类型

示例值

描述

RequestId

String

4159e64a-0fe8-436c-a8de-ee531555db3c

请求ID。

Data

Object

返回的结果数据内容。

MatchList

Array of MatchList

匹配的结果列表,如果输入图像中多个人脸,则这里会返回多个数据。

FaceItems

Array of FaceItems

匹配的人脸数据列表。

EntityId

String

U1

实体ID,用来标识用户的唯一性,如用户ID、员工ID等。每个实体可包含多张人脸图片。支持大小写字母、数字、下划线和减号的组合,长度为2~64。

FaceId

String

001

人脸图片数据ID,需要全局唯一,不可重复。支持小写字母、数字和下划线的组合。长度为1~64。

Score

Float

0.892133

人脸的相似度,取值范围-1.0~1.0,取小数点后6位,数值越大相似度越高。建议的三个参考阈值为0.35,0.45和0.6,分别对应千分之一,万分之一和十万分之一的误识率。阈值设置越高,误识率越低,通过率也越低,对安全性要求越高的场合,可以设置越高的阈值。

ExtraData

String

王小二

自定义信息(字符串)。支持字母、数字、标点符号和汉字。不超过512个字符。

DbName

String

default

数据库名称。

Confidence

Float

36.820168

转换后的置信度 ,取值范围0.0~100.0,数值越大相似度越高,建议的三个参考阈值为60.48,67.87和72.62,分别对应千分之一,万分之一和十万分之一的误识率,阈值设置越高,误识率越低,通过率也越低,对安全性要求越高的场合,可以设置越高的阈值。

Location

Object

输入图像中的人脸坐标信息。

Width

Integer

200

宽度,单位像素。

Height

Integer

200

高度,单位像素。

Y

Integer

6

左上角y坐标。

X

Integer

5

左上角x坐标。

QualitieScore

Float

71.7349

输入图像中的人脸质量分。

5.C语言对接python

face.py

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

# 引入依赖包

# pip install alibabacloud_facebody20191230

import os

import io

from urllib.request import urlopen

from alibabacloud_facebody20191230.client import Client

from alibabacloud_facebody20191230.models import SearchFaceAdvanceRequest

from alibabacloud_tea_openapi.models import Config

from alibabacloud_tea_util.models import RuntimeOptions

config = Config(

# 创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。

# 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html。

# 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。

access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),

access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),

# 访问的域名

endpoint='facebody.cn-shanghai.aliyuncs.com',

# 访问的域名对应的region

region_id='cn-shanghai'

)

def alibaba_face():

search_face_request = SearchFaceAdvanceRequest()

#场景一:文件在本地

stream0 = open(r'/tmp/SearchFace.jpg', 'rb')

search_face_request.image_url_object = stream0

#场景二:使用任意可访问的url

#url = 'http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/SearchFace/SearchFace1.png'

#img = urlopen(url).read()

#search_face_request.image_url_object = io.BytesIO(img)

search_face_request.db_name = 'default'

search_face_request.limit = 5

runtime_option = RuntimeOptions()

try:

# 初始化Client

client = Client(config)

response = client.search_face_advance(search_face_request, runtime_option)

# 获取整体结果

print(response.body)

print("======================")

match_list = response.body.to_map()['Data']['MatchList']

scores = [item['Score'] for item in match_list[0]['FaceItems']] #set集合,无序不重复

maxScores = max(scores)

print(f"最大 Score 值: {maxScores}")

value = round(maxScores,2)

print(value)

print("======================")

return value;

except Exception as error:

# 获取整体报错信息

print(error)

# 获取单个字段

print(error.code)

# tips: 可通过error.__dict__查看属性名称

return 0.0

#关闭流

#stream0.close()

if __name__ == "__main__":

alibaba_face()

face.c

#include

#include

#include "face.h"

void face_init(void)

{

Py_Initialize();

PyObject *sys = PyImport_ImportModule("sys");

PyObject *path = PyObject_GetAttrString(sys,"path");

PyList_Append(path,PyUnicode_FromString("."));

}

void face_final(void)

{

Py_Finalize();

}

double face_identify(void)

{

PyObject *pModule = PyImport_ImportModule("face");

if(!pModule)

{

PyErr_Print();

printf("Error:failed to load face.py\n");

goto FAILED_MODULE;

}

PyObject *pFunc = PyObject_GetAttrString(pModule,"alibaba_face");

if(!pFunc)

{

PyErr_Print();

printf("Error:failed to load func alibaba_face\n");

goto FAILED_FUNC;

}

PyObject *pValue = PyObject_CallObject(pFunc,NULL);

if(!pValue){

PyErr_Print();

printf("Error:function call failed\n");

goto FAILED_VALUE;

}

double result = 0.0;

if(!PyArg_Parse(pValue,"d",&result)){

PyErr_Print();

printf("Error: parse failed");

goto FAILED_VALUE;

}

printf("result:%lf\n",result);

FAILED_VALUE:

Py_DECREF(pValue);

FAILED_FUNC:

Py_DECREF(pFunc);

FAILED_MODULE:

Py_DECREF(pModule);

return result;

}

face.h

#ifndef __FACE__H

#define __FACE__H

void face_init(void);

void face_final(void);

double face_identify(void);

#define WGET_CMD "wget http://127.0.0.1:8080/?action=snapshot -O /tmp/SearchFace.jpg"

#define CATEGORY_FILE "/tmp/SearchFace.jpg"

#endif

main.c

#include

#include "face.h"

int main(int argc, char *argv[])

{

double face_result = 0.0;

face_init();

face_result = face_identify();

printf("face_result: %0.2lf \n",face_result);

face_final();

return 0;

}

编译:

gcc -o face *.c *.h -I /usr/include/python3.10 -l python3.10

猜你喜欢 💖

晶型多变的宝石—符山石 Idocrase
365bet现金赌场

晶型多变的宝石—符山石 Idocrase

📅 08-28 👁️ 7836
迷你世界钻石在哪 钻石位置介绍
365bet现金赌场

迷你世界钻石在哪 钻石位置介绍

📅 07-07 👁️ 7485
曦的拼音、意思、组词
365bet现金赌场

曦的拼音、意思、组词

📅 08-30 👁️ 1210