添加获取系统中员工/访客图片功能
This commit is contained in:
parent
4ee2379efa
commit
6118778bba
@ -2,7 +2,7 @@ from util.haikang_util import HaikangUtil
|
||||
import asyncio
|
||||
import base64
|
||||
import json
|
||||
|
||||
import os
|
||||
|
||||
|
||||
|
||||
@ -101,6 +101,84 @@ async def query_visitor_record():
|
||||
async def query_visitor_record_pictures_service(svrIndexCode, picUri):
|
||||
await HaikangUtil.query_visitor_record_pictures(svrIndexCode, picUri)
|
||||
|
||||
|
||||
async def get_all_visitor_pictures(pageNo=1, pageSize=10, visitorStatus=1):
|
||||
|
||||
|
||||
result = await HaikangUtil.query_visitor_record(pageNo=pageNo, pageSize=pageSize, visitorStatus=visitorStatus)
|
||||
|
||||
visitor_list = list()
|
||||
if result[0]:
|
||||
total = result[1]['total']
|
||||
visitor_list += result[1]['list']
|
||||
while pageNo*pageSize < total:
|
||||
pageNo += 1
|
||||
result = await HaikangUtil.query_visitor_record(pageNo=pageNo+1, pageSize=pageSize, visitorStatus=visitorStatus)
|
||||
if result[0]:
|
||||
visitor_list += result[1]['list']
|
||||
else:
|
||||
break
|
||||
#
|
||||
# print(visitor_list)
|
||||
|
||||
with open("./visitor/visitorIds.txt", "r", encoding="utf-8") as f:
|
||||
visitor_ids = [line.rstrip('\n') for line in f]
|
||||
# print(visitor_ids)
|
||||
visitor_ids_add = list()
|
||||
for visitor in visitor_list:
|
||||
if visitor["visitorId"] not in visitor_ids:
|
||||
visitor_ids_add.append(visitor["visitorId"])
|
||||
# 获取图片
|
||||
try:
|
||||
await HaikangUtil.query_visitor_record_pictures(visitor["svrIndexCode"], visitor["picUri"], f"./visitor/face_images/{visitor['visitorName']}.jpg")
|
||||
await asyncio.sleep(1)
|
||||
except Exception as e:
|
||||
print(e, visitor["visitorId"])
|
||||
|
||||
with open("./visitor/visitorIds.txt", "a", encoding="utf-8") as f:
|
||||
for visitor_id in visitor_ids_add:
|
||||
f.write(visitor_id + "\n")
|
||||
|
||||
|
||||
|
||||
async def get_all_employee_pictures(pageNo=1, pageSize=500):
|
||||
|
||||
result = await HaikangUtil.get_person_list(pageNo=pageNo, pageSize=pageSize)
|
||||
|
||||
employee_list = list()
|
||||
if result[0]:
|
||||
total = result[1]['total']
|
||||
employee_list += result[1]['list']
|
||||
while pageNo * pageSize < total:
|
||||
pageNo += 1
|
||||
result = await HaikangUtil.get_person_list(pageNo=pageNo + 1, pageSize=pageSize, )
|
||||
if result[0]:
|
||||
employee_list += result[1]['list']
|
||||
else:
|
||||
break
|
||||
|
||||
|
||||
with open("./employee/personIds.txt", "r", encoding="utf-8") as f:
|
||||
person_ids = [line.rstrip('\n') for line in f]
|
||||
# print(visitor_ids)
|
||||
person_ids_add = list()
|
||||
for employee in employee_list:
|
||||
if employee["visitorId"] not in person_ids:
|
||||
person_ids_add.append(employee["visitorId"])
|
||||
# 获取图片
|
||||
try:
|
||||
await HaikangUtil.get_person_picture(employee["serverIndexCode"], employee["picUri"], f"./employee/face_images/{employee['personName']}.jpg")
|
||||
await asyncio.sleep(1)
|
||||
except Exception as e:
|
||||
print(e, employee["visitorId"])
|
||||
|
||||
with open("./employee/personIds.txt", "a", encoding="utf-8") as f:
|
||||
for person_id in person_ids_add:
|
||||
f.write(person_id + "\n")
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
#asyncio.run(get_door_list_service())
|
||||
# print("*"*100)
|
||||
@ -113,12 +191,13 @@ if __name__ == '__main__':
|
||||
|
||||
#asyncio.run(get_face_group_service())
|
||||
|
||||
# image_path = "./a7b3c794281902041c9b823df7667ce7.jpg"
|
||||
# image_path = "./测试图片1.jpg"
|
||||
# asyncio.run(face_group_1vN_search_service(image_path))
|
||||
#asyncio.run(face_picture_check(image_path))
|
||||
|
||||
#asyncio.run(query_visitor_record())
|
||||
asyncio.run(query_visitor_record_pictures_service("80890167-b8d4-4e33-af35-94db87c90816"
|
||||
, "/pic?0de900=71f0ip-4eo881-342*fo1=9=8522*4l5373169147*1t1=0*0ps==418b*=6127*38da35a12-8338cd-9*l168od0f1f1=002"))
|
||||
# asyncio.run(query_visitor_record_pictures_service("80890167-b8d4-4e33-af35-94db87c90816"
|
||||
# , "/pic?0de900=71f0ip-4eo881-342*fo1=9=8522*4l5373169147*1t1=0*0ps==418b*=6127*38da35a12-8338cd-9*l168od0f1f1=002"))
|
||||
#asyncio.run(door_online_status_service(["d4a610b6554d4544bc35dd3138f128b0"]))
|
||||
asyncio.run(get_all_visitor_pictures())
|
||||
|
||||
|
||||
Binary file not shown.
@ -35,6 +35,11 @@ class HaiKangSettings:
|
||||
HAIKANG_VISITOR_RECORD_SEARCH = '/api/visitor/v2/appointment/records'
|
||||
HAIKANG_VISITOR_RECORD_PICTURES = '/api/visitor/v1/record/pictures'
|
||||
|
||||
HAIKANG_PERSON_LIST = '/api/resource/v2/person/personList'
|
||||
HAIKANG_GET_PERSON_PICTURE = '/api/resource/v1/person/picture'
|
||||
|
||||
HAIKANG_FACE_SAVE_PATH = "./face_images"
|
||||
|
||||
|
||||
class GetConfig:
|
||||
"""
|
||||
|
||||
3
employee/personIds.txt
Normal file
3
employee/personIds.txt
Normal file
@ -0,0 +1,3 @@
|
||||
a
|
||||
b
|
||||
c
|
||||
@ -98,12 +98,10 @@ class HaikangUtil:
|
||||
response = await client.request(
|
||||
method, url, headers=headers, content=body, timeout=60
|
||||
)
|
||||
|
||||
if response.status_code in (301, 302, 303, 307, 308):
|
||||
location = response.headers.get("Location")
|
||||
# 可能需要处理成 GET 请求或保留原方法
|
||||
# 可能需要处理成 GET 请求或保留原方法
|
||||
response = await client.get(location, headers=headers)
|
||||
|
||||
response.raise_for_status()
|
||||
# if response.status_code >= 400:
|
||||
# logger.error(f"发送请求失败: {url} , {response.status_code} {response.text}")
|
||||
@ -466,7 +464,7 @@ class HaikangUtil:
|
||||
|
||||
# 获取访客记录中的图片
|
||||
@classmethod
|
||||
async def query_visitor_record_pictures(cls, svrIndexCode: str, picUri: str):
|
||||
async def query_visitor_record_pictures(cls, svrIndexCode: str, picUri: str, save_path: str="persion.jpg"):
|
||||
"""获取访客记录中的图片
|
||||
|
||||
Args:
|
||||
@ -490,7 +488,53 @@ class HaikangUtil:
|
||||
|
||||
back = await cls.send_request("POST", url, headers, body_json, False)
|
||||
|
||||
with open("person.jpg", 'wb') as f:
|
||||
with open(save_path, 'wb') as f:
|
||||
for chunk in back.iter_bytes(chunk_size=8192):
|
||||
if chunk: # 忽略 keep-alive 的空 chunk
|
||||
f.write(chunk)
|
||||
|
||||
|
||||
|
||||
# 获取人员列表
|
||||
@classmethod
|
||||
async def get_person_list(cls, pageNo: int = 1, pageSize: int = 10):
|
||||
url = f"{HaiKangConfig.HAIKANG_URL}:{HaiKangConfig.HAIKANG_PORT}/artemis{HaiKangConfig.HAIKANG_PERSON_LIST}"
|
||||
body_dict = {
|
||||
"pageNo": pageNo,
|
||||
"pageSize": pageSize,
|
||||
}
|
||||
body_json = json.dumps(body_dict, separators=(",", ":"))
|
||||
|
||||
headers = cls.build_signed_headers(
|
||||
"POST", url, body_json, HaiKangConfig.HAIKANG_AK, HaiKangConfig.HAIKANG_SK
|
||||
)
|
||||
|
||||
back = await cls.send_request("POST", url, headers, body_json)
|
||||
|
||||
if back["code"] == "0":
|
||||
return [True, back["data"]]
|
||||
else:
|
||||
return [False, back["code"], back["msg"]]
|
||||
|
||||
# 提取人员图片
|
||||
@classmethod
|
||||
async def get_person_picture(cls, serverIndexCode, picUri, save_path: str="persion.jpg"):
|
||||
|
||||
url = f"{HaiKangConfig.HAIKANG_URL}:{HaiKangConfig.HAIKANG_PORT}/artemis{HaiKangConfig.HAIKANG_GET_PERSON_PICTURE}"
|
||||
body_dict = {
|
||||
"serverIndexCode": serverIndexCode,
|
||||
"picUri": picUri,
|
||||
}
|
||||
|
||||
body_json = json.dumps(body_dict, separators=(",", ":"))
|
||||
|
||||
headers = cls.build_signed_headers(
|
||||
"POST", url, body_json, HaiKangConfig.HAIKANG_AK, HaiKangConfig.HAIKANG_SK
|
||||
)
|
||||
|
||||
back = await cls.send_request("POST", url, headers, body_json, False)
|
||||
|
||||
with open(save_path, 'wb') as f:
|
||||
for chunk in back.iter_bytes(chunk_size=8192):
|
||||
if chunk: # 忽略 keep-alive 的空 chunk
|
||||
f.write(chunk)
|
||||
|
||||
BIN
visitor/face_images/测试图片1.jpg
Normal file
BIN
visitor/face_images/测试图片1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 273 KiB |
4
visitor/visitorIds.txt
Normal file
4
visitor/visitorIds.txt
Normal file
@ -0,0 +1,4 @@
|
||||
a
|
||||
b
|
||||
c
|
||||
d
|
||||
Loading…
Reference in New Issue
Block a user