添加获取系统中员工/访客图片功能

This commit is contained in:
haotianmingyue 2025-09-18 18:10:13 +08:00
parent 4ee2379efa
commit 6118778bba
7 changed files with 144 additions and 9 deletions

View File

@ -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())

View File

@ -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
View File

@ -0,0 +1,3 @@
a
b
c

View File

@ -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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

4
visitor/visitorIds.txt Normal file
View File

@ -0,0 +1,4 @@
a
b
c
d