人脸注册比对流程示例
python3代码示例:
import requests
import json
import base64
box_ip = "192.168.1.22" #AI智能盒IP
permission_name = "测试权限组" #创建人脸比对权限组
image_file_path ="./test.jpg" #测试注册人脸图片路径
pc_ip = "192.168.1.63" #开发者机器ip,用于测试时,模拟设备ip
upload_event_url= "http://www.xxx.com/event_recieve" #开发者服务器用于接收产生的比对事件的接口
#1.创建权限组
def create_permission():
#1.1创建权限组===================================================================
headers = {'Content-Type': 'application/json'}
url = 'http://{}:5555/SophonFogSys/api/permissions?'.format(box_ip) #权限组restful接口
result = {}
post_data = {
"permission_name": permission_name,
"description": "测试权限组",
}
json_post_data = json.dumps(post_data)
response = requests.post(url, data=json_post_data, headers=headers, verify=False) #调用创建人脸
if response.status_code == 200:
result = response.json()
else:
result = response.json()
return result
def search_permission():
#1.2查询已经创建的权限组信息,特铁是permission_id信息==================================
permission_id = ""
permissionfindurl = "http://{}:5555/SophonFace/api/permissions?info.name={}&exact=true".format(box_ip,permission_name)
permissions_result = requests.get(permissionfindurl, verify=False)
if permissions_result.status_code == requests.codes.ok:
permissions_result_json = permissions_result.json()
if permissions_result_json['data']:
for per_permission_info in permissions_result_json['data']:
if permission_name == per_permission_info['info']['name']:
permission_id = per_permission_info['_id']
info_dict = per_permission_info['info']
# 如果没有找到对应的组返回error
if not permission_id:
raise RuntimeError("not found the permission")
else:
raise RuntimeError("get permission info error")
return permission_id
#2.添加用户
def add_user(permission_id):
headers = {'Content-Type': 'application/json'}
url = 'http://{}:5555/SophonFogSys/api/users'.format(box_ip)
result = {}
#读取需要注册的人脸图片
image_base64_str = ''
with open(image_file_path, 'rb') as fp:
image_binary = fp.read()
image_base64_str = base64.b64encode(image_binary).decode("utf-8")
#按照接口文档,准备好注册人员的信息
post_data = {
"group_name": "default_group",
"identity_id": "666666",
"reg_photo": image_base64_str,
"create_no_exit_permission": False,
"ignore_exist": False,
"info": {
"name": "张明",
"type": 1, #注册类型为1,即员工
"permission_ids": [permission_id] #需要注册的权限组id
},
"fiqa_level": "custom"
}
json_post_data = json.dumps(post_data)
#2.1调用人脸注册接口进行==========================================================
response = requests.post(url, data=json_post_data, headers=headers, verify=False)
if response.status_code == 200:
result = response.json()
else:
result = response.json()
return result
#3.添加设备, 此处将开发者服务器ip模拟为闸机ip
def add_device(permission_id):
#3.1 获取group_id==========================================================
headers = {'Content-Type': 'application/json'}
groupfindurl = "http://{}:5555/SophonFace/api/groups?info.name=default_group&exact=true".format(box_ip)
group_id = ""
groups_result = requests.get(groupfindurl, verify=False)
if groups_result.status_code == requests.codes.ok:
groups_result_json = groups_result.json()
if groups_result_json['data']:
# 更新分组人员
for per_group_info in groups_result_json['data']:
if "default_group" == per_group_info['info']['name']:
group_id = per_group_info['_id']
# 如果没有找到对应的组返回error
if not group_id:
raise RuntimeError("not found the group")
else:
raise RuntimeError("get group info error")
# 3.2获取permission_id=======================================================
permission_id = ""
permissionfindurl = "http://{}:5555/SophonFace/api/permissions?info.name={}&exact=true".format(box_ip,
permission_name)
permissions_result = requests.get(permissionfindurl, verify=False)
if permissions_result.status_code == requests.codes.ok:
permissions_result_json = permissions_result.json()
if permissions_result_json['data']:
for per_permission_info in permissions_result_json['data']:
if permission_name == per_permission_info['info']['name']:
permission_id = per_permission_info['_id']
info_dict = per_permission_info['info']
# 如果没有找到对应的组返回error
if not permission_id:
raise RuntimeError("not found the permission")
else:
raise RuntimeError("get permission info error")
# 3.3在盒子上添加设备=========================================================
url = 'http://{}:5555/SophonDevice/api/Devices'.format(box_ip)
try:
new_dict = {}
new_dict = {
"devices_list":[
{
"device_type":"photo",
"netRelay":{
},
"is_start_rtmp":False,
"device_name":"63",
"device_key":pc_ip,
"group_id":group_id,
"permission_id":permission_id
}
]
}
response = requests.post(url, json=new_dict, headers=headers, verify=False)
if response.status_code == 200:
result = response.json()
else:
result = response.json()
except ConnectionError as e:
raise e
#3.4发送人脸比对图片===========================================================
headers = {'Content-Type': 'application/json', "Connection": "close"}
url = 'http://%s:5555/SophonMatch/api/PictureMatch' % (box_ip)
with open(image_file_path, 'rb') as f:
image = f.read()
rgb_image_base64 = base64.encodebytes(image).decode('utf-8')
data = {
"rgb_image_base64" :rgb_image_base64,
"device_ip": pc_ip #模拟的采集端设备ip,此处为开发者服务器模拟的闸机ip
}
json_data = json.dumps(data)
result = requests.post(url, json_data, headers=headers, verify=False, timeout=5)
if result.status_code == requests.codes.ok:
print("send ok")
else:
print(result.json())
return "success"
#4.事件上传地址配置
def event_upload():
#4.1 配置设备上传地址
headers = {'Content-Type': 'application/json', "Connection": "close"}
url = 'http://%s:5555/SophonFogSys/api/HistoryEventUrl' % (box_ip)
data = {
"history_upload_event_url": [upload_event_url],
"content-type": "json",
"reported_peroid": 1,
"history_need_recognize_face": False,
"history_need_reg_pic": True,
"history_need_spot_pic": False
}
json_data = json.dumps(data)
result = requests.post(url, json_data, headers=headers, verify=False, timeout=5)
if result.status_code == requests.codes.ok:
print("send ok")
else:
print(result.json())
return "success"
if __name__ == '__main__':
#1.创建权限组
create_permission()
#2.获取权限组id
permission_id = search_permission()
#3.添加用户
add_user(permission_id)
#4.添加设备
add_device(permission_id)
#5.配置事件上传
event_upload()
Last updated