人臉?biāo)阉?/h1>更新時間:
創(chuàng)建數(shù)據(jù)集并將圖片索引至該數(shù)據(jù)集后,您可以利用人臉?biāo)阉鞴δ軓臄?shù)據(jù)集中檢索與指定圖片最相似的前N張圖片,此功能可應(yīng)用于VIP用戶的身份識別等場景。
應(yīng)用場景
智能安防監(jiān)控
結(jié)合人臉識別技術(shù),在工廠、學(xué)校、商場、餐廳等人流密集的場所進(jìn)行監(jiān)控,對人流進(jìn)行自動統(tǒng)計、識別和追蹤,同時標(biāo)記存在安全隱患的行為及區(qū)域,并發(fā)出告警提醒,加強信息化安全管理,降低人工監(jiān)督成本。
工廠安全生產(chǎn)
提供軟硬結(jié)合的安全生產(chǎn)監(jiān)控方案,基于廠區(qū)、車間內(nèi)攝像頭采集的圖像,識別是否有陌生人闖入,減少安全隱患。
刷臉閘機通行
將人臉識別功能集成到閘機中,快速錄入人臉信息,創(chuàng)建安全可靠的人臉庫,用戶刷臉通行,解決用戶忘帶工卡、盜刷等問題,實現(xiàn)企業(yè)、商業(yè)、住宅等多場景門禁通行。
智慧人臉考勤
提供移動考勤、攝像頭無感知考勤、一體機考勤三種方案,實現(xiàn)1秒內(nèi)快速搜索用戶最相似的人臉,確保簽到識別準(zhǔn)確性,有效防止代打卡等作弊行為,增強企業(yè)安全管理。
前提條件
已通過綁定方式(CreateBinding - 創(chuàng)建綁定任務(wù))或者主動索引方式(IndexFileMeta - 文件元信息建立索引或者BatchIndexFileMeta - 批量文件元信息建立索引)將待比較的圖片索引到數(shù)據(jù)集(CreateDataset - 創(chuàng)建數(shù)據(jù)集)中。
同一個人物在媒體集中的圖片必須大于或等于2張,并且至少有2張符合如下標(biāo)準(zhǔn)的高清人臉圖片:
人臉尺寸大于75×75像素。
人臉的偏轉(zhuǎn)角HeadPose的三個子項的絕對值均小于30°。
人臉的質(zhì)量FaceQuality大于0.8。
已創(chuàng)建MNS隊列。具體操作,請參見隊列使用手冊。
說明本文以通過輕量消息隊列(原MNS)的Python SDK獲取任務(wù)信息通知為例。更多獲取任務(wù)信息的方式,請參見異步任務(wù)處理。
步驟一:上傳文件
請使用OSS管理控制臺將需要對比的照片上傳至已綁定的bucket。
步驟二:向照片集中添加照片
使用智能媒體管理控制臺,將您OSS中存儲的照片添加到數(shù)據(jù)集中以構(gòu)建照片庫,具體操作過程如下:
也可以使用BatchIndexFileMeta - 批量文件元信息建立索引接口,向數(shù)據(jù)集中批量寫入人臉照片中的信息。寫入照片信息的過程為異步進(jìn)行,您可以使用設(shè)置 Notification 消息通知參數(shù)來獲取任務(wù)信息。
# -*- coding: utf-8 -*- # This file is auto-generated, don't edit it. Thanks. import os import sys from typing import List from alibabacloud_imm20200930.client import Client as imm20200930Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_imm20200930 import models as imm_20200930_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client() -> imm20200930Client: """ 使用AK&SK初始化賬號Client @return: Client @throws Exception """ # 工程代碼泄露可能會導(dǎo)致 AccessKey 泄露,并威脅賬號下所有資源的安全性。以下代碼示例僅供參考。 # 建議使用更安全的 STS 方式,更多鑒權(quán)訪問方式請參見:http://bestwisewords.com/document_detail/378659.html。 config = open_api_models.Config( # 必填,請確保代碼運行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。, access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], # 必填,請確保代碼運行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。, access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] ) # Endpoint 請參考 https://api.aliyun.com/product/imm config.endpoint = f'imm.cn-hangzhou.aliyuncs.com' return imm20200930Client(config) @staticmethod def main( args: List[str], ) -> None: client = Sample.create_client() notification_mns = imm_20200930_models.MNS( topic_name='test-mns-topic' ) notification = imm_20200930_models.Notification( mns=notification_mns ) input_file_0 = imm_20200930_models.InputFile( uri='''[ { "URI": "oss://test-bucket/test-object-1.jpg" }, { "URI": "oss://test-bucket/test-object-2.jpg" }, { "URI": "oss://test-bucket/test-object-3.jpg" } ]''' ) batch_index_file_meta_request = imm_20200930_models.BatchIndexFileMetaRequest( project_name='test-project', dataset_name='test-dataset', files=[ input_file_0 ], notification=notification ) runtime = util_models.RuntimeOptions() try: # 復(fù)制代碼運行請自行打印 API 的返回值 client.batch_index_file_meta_with_options(batch_index_file_meta_request, runtime) except Exception as error: # 此處僅做打印展示,請謹(jǐn)慎對待異常處理,在工程項目中切勿直接忽略異常。 # 錯誤 message print(error.message) # 診斷地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: client = Sample.create_client() notification_mns = imm_20200930_models.MNS( topic_name='test-mns-topic' ) notification = imm_20200930_models.Notification( mns=notification_mns ) input_file_0 = imm_20200930_models.InputFile( uri='''[ { "URI": "oss://test-bucket/1.jpg" }, { "URI": "oss://test-bucket/2.jpg" }, { "URI": "oss://test-bucket/3.jpg" }, { "URI": "oss://test-bucket/4.jpg" }, { "URI": "oss://test-bucket/5.jpg" }, { "URI": "oss://test-bucket/6.jpg" } ]''' ) batch_index_file_meta_request = imm_20200930_models.BatchIndexFileMetaRequest( project_name='test-project', dataset_name='test-dataset', files=[ input_file_0 ], notification=notification ) runtime = util_models.RuntimeOptions() try: # 復(fù)制代碼運行請自行打印 API 的返回值 await client.batch_index_file_meta_with_options_async(batch_index_file_meta_request, runtime) except Exception as error: # 此處僅做打印展示,請謹(jǐn)慎對待異常處理,在工程項目中切勿直接忽略異常。 # 錯誤 message print(error.message) # 診斷地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])
返回示例:
{ 'EventId':'049-1udsgM0nr0leAdDBAOxe4kDLYM5', 'RequestId': 'D4C150A6-D8EF-502B-9F30-645346388E13' }
輕量消息隊列(原MNS)消息示例:
{ "TopicOwner": "14133977656xxxxx", "Message": "{\"id\":\"077-1x2s0rqA6ZOENW6gjAiN5Dl796T\",\"source\":\"acs.imm\",\"type\":\"imm:FileMeta:Index\",\"subject\":\"acs:imm:cn-hangzhou:14133977656xxxxx:test-project/imm:FileMeta:Index\",\"time\":\"1729564297965\",\"content\":\"{\\\"ProjectName\\\":\\\"test-project\\\",\\\"DatasetName\\\":\\\"test-dataset\\\",\\\"RequestId\\\":\\\"7FE8A307-1649-6B0D-1AB8-0600C9D4877B\\\",\\\"StartTime\\\":\\\"2024-10-22T10:31:37.787209251+08:00\\\",\\\"EndTime\\\":\\\"2024-10-22T10:31:37.965992728+08:00\\\",\\\"Success\\\":true,\\\"Message\\\":\\\"\\\",\\\"Files\\\":[{\\\"URI\\\":\\\"[\\\\n {\\\\n \\\\\\\"URI\\\\\\\": \\\\\\\"oss://test-bucket/test-object-1.jpg\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"URI\\\\\\\": \\\\\\\"oss://test-bucket/test-object-2.jpg\\\\\\\"\\\\n },\\\\n {\\\\n \\\\\\\"URI\\\\\\\": \\\\\\\"oss://test-bucket/test-object-3.jpg\\\\\\\"\\\\n }\\\\n],\\\"UserData\\\":\\\"\\\"}\"}", "Subscriber": "14133977656xxxxx", "PublishTime": "1729564298068", "SubscriptionName": "test-mns-subscription", "MessageMD5": "9921327B25E01FB38151781B81042BA7", "TopicName": "tf-test-mns-queue", "MessageId": "129D772E14277FA6182D6E67D354D069" }
步驟三:創(chuàng)建相似人臉?biāo)阉魅蝿?wù)
請求示例
參數(shù)TopicName為MNS主題名稱,本文以tf-test-mns-queue為例。
參數(shù)MaxResults為返回的相似圖片數(shù)量,非必填參數(shù),默認(rèn)值為5,取值范圍為0~100。
{
"ProjectName": "test-project",
"DatasetName": "test-dataset",
"Sources": [{"URI": "oss://test-bucket/test-object.jpg"}],
"Notification": {"MNS": {"TopicName": "tf-test-mns-topic"}},
"MaxResult": 100
}
返回示例
{
"TaskId": "CreateFacesSearchingTask-dedf1bd9-7edc-4d16-97f2-bbb2a4fc****",
"RequestId": "BB9C38A3-BB7A-53B7-A168-6DBC1CF6****",
"EventId": "0DA-1TAZO4ClNnKbn4Ungls8SOk****"
}
返回如上所示的示例信息,表示相似人臉圖片搜索任務(wù)創(chuàng)建成功。
示例代碼
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
from typing import List
from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> imm20200930Client:
"""
使用AccessKey ID&AccessKey Secret初始化賬號Client。
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
# 填寫訪問的域名。
config.endpoint = f'imm.cn-hangzhou.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
# 阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運維。
# 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
# 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。如何配置環(huán)境變量,請參見http://bestwisewords.com/document_detail/2361894.html。
imm_access_key_id = os.getenv("AccessKeyId")
imm_access_key_secret = os.getenv("AccessKeySecret")
# 初始化客戶端。
client = Sample.create_client(imm_access_key_id, imm_access_key_secret)
notification_mns = imm_20200930_models.MNS(
topic_name='tf-test-mns-topic'
)
notification = imm_20200930_models.Notification(
mns=notification_mns
)
sources_0 = imm_20200930_models.CreateFacesSearchingTaskRequestSources(
uri='''oss://test-bucket/test-object.jpg
'''
)
create_faces_searching_task_request = imm_20200930_models.CreateFacesSearchingTaskRequest(
project_name='test-project',
dataset_name='test-dataset',
sources=[
sources_0
],
notification=notification,
max_result=100
)
runtime = util_models.RuntimeOptions()
try:
# 復(fù)制代碼運行請自行打印API的返回值。
client.create_faces_searching_task_with_options(create_faces_searching_task_request, runtime)
except Exception as error:
# 如有需要,請打印錯誤信息。
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
# 阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運維。
# 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
# 本示例通過從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。如何配置環(huán)境變量,請參見http://bestwisewords.com/document_detail/2361894.html。
imm_access_key_id = os.getenv("AccessKeyId")
imm_access_key_secret = os.getenv("AccessKeySecret")
# 初始化客戶端。
client = Sample.create_client(imm_access_key_id, imm_access_key_secret)
notification_mns = imm_20200930_models.MNS(
topic_name='tf-test-mns-topic'
)
notification = imm_20200930_models.Notification(
mns=notification_mns
)
sources_0 = imm_20200930_models.CreateFacesSearchingTaskRequestSources(
uri='''oss://test-bucket/test-object.jpg
'''
)
create_faces_searching_task_request = imm_20200930_models.CreateFacesSearchingTaskRequest(
project_name='test-project',
dataset_name='test-dataset',
sources=[
sources_0
],
notification=notification,
max_result=100
)
runtime = util_models.RuntimeOptions()
try:
# 復(fù)制代碼運行請自行打印API的返回值。
await client.create_faces_searching_task_with_options_async(create_faces_searching_task_request, runtime)
except Exception as error:
# 如有需要,請打印錯誤信息。
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
步驟四:查看相似人臉?biāo)阉鹘Y(jié)果
相似人臉圖片搜索任務(wù)創(chuàng)建成功后,您可以通過MNS服務(wù)獲取任務(wù)信息。如下以通過Python SDK獲取任務(wù)信息為例。更多信息,請參見步驟四:接收和刪除消息。
在sample目錄中執(zhí)行以下命令。
python recvdelmessage.py tf-test-mns-queue
將控制臺返回的結(jié)果JSON格式化,如下僅列舉Messege中content部分的內(nèi)容。
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "RequestId": "BB9C38A3-BB7A-53B7-A168-6DBC1CF6****", "StartTime": "2023-01-04T05:08:28.582Z", "EndTime": "2023-01-04T05:08:28.785Z", "UserData": "", "TaskType": "FacesSearching", "TaskId": "CreateFacesSearchingTask-dedf1bd9-7edc-4d16-97f2-bbb2a4fc****", "Status": "Succeeded", "Code": "", // Code為空表示處理成功。 "Message": "Success", "SimilarFaces": [ { "URI": "oss://test-bucket/test-object.jpg", "Boundary": { "Width": 109, "Height": 150, "Left": 69, "Top": 49 }, // 相似人臉列表。 "SimilarFaces": [ { "URI": "oss://test-bucket/test-object-1.jpg", "FigureId": "4cacbb71-52fd-4d3f-9d14-0840fecee0bf", "Similarity": 0.73321015 }, { "URI": "oss://test-bucket/test-object-2.jpg", "FigureId": "7a4cd08d-bcd0-4bc4-93f4-1291075819cf", "Similarity": 0.77035695 }, { "URI": "oss://test-bucket/test-object-3.jpg", "FigureId": "da920124-410a-4493-9fd3-1a3b366dca86", "Similarity": 0.9836307 } ] } ] }
說明消息內(nèi)容顯示,在數(shù)據(jù)集test-dataset中,與查詢圖片中的人臉相似的有以下三張圖片:
圖片1:OSS地址為oss://test-bucket/test-object-1.jpg,圖片中的人臉與查詢圖片的人臉相似度為0.73321015。
圖片2:OSS地址為oss://test-bucket/test-object-2.jpg,圖片中的人臉與查詢圖片的人臉相似度為0.77035695。
圖片3:OSS地址為oss://test-bucket/test-object-3.jpg,圖片中的人臉與查詢圖片的人臉相似度為0.9836307。