实现拉取访客图片,并上传compreface功能

This commit is contained in:
haotian 2025-09-24 11:10:05 +08:00
parent 2bd20f5464
commit 19ba2446b8
6 changed files with 60 additions and 38 deletions

View File

@ -102,6 +102,10 @@ HAIKANG_FACE_DELETE = '/api/frs/v1/face/deletion'
HAIKANG_FACE_SAVE_PATH = "./face_images"
HAIKANG_VISITOR_PICTURES_SAVE_PATH = "./visitor/face_images/"
HAIKANG_VISITOR_RECORD_TXT = "./visitor/visitorIds.txt"
#---------------------------------海康平台配置end----------------------------------
# # 人脸分组1vN检索
# HAIKANG_APPLICATION_ONETOMANY_URL = '/api/frs/v1/application/oneToMany'

View File

@ -14,7 +14,7 @@ def face_recognition_file(image_path, url):
return response.json()
if __name__ == '__main__':
image_path = './haotian.jpg'
image_path = './moshengren.jpg'
url = 'http://10.0.0.202:9099/system/compreface/face_recognition'
# print(face_recognition_stream(image_path, url))
print(face_recognition_file(image_path, url))

View File

@ -192,6 +192,8 @@ class HaiKangSettings:
HAIKANG_FACE_DELETE = '/api/frs/v1/face/deletion'
HAIKANG_FACE_SAVE_PATH = "./face_images"
HAIKANG_VISITOR_PICTURES_SAVE_PATH = "./visitor/face_images/"
HAIKANG_VISITOR_RECORD_TXT = "./visitor/visitorIds.txt"

View File

@ -32,10 +32,10 @@ async def face_recognition(request: Request, file: UploadFile = File(None)) -> d
return ResponseUtil.success(data=result)
def my_job():
print("任务执行时间:", datetime.datetime.now())
# def my_job():
# print("任务执行时间:", datetime.datetime.now())
from config.get_scheduler import scheduler
from apscheduler.triggers.cron import CronTrigger
trigger = CronTrigger(minute='*', second=0)
scheduler.add_job(my_job, trigger=trigger)
# from config.get_scheduler import scheduler
# from apscheduler.triggers.cron import CronTrigger
# trigger = CronTrigger(minute='*', second=0)
# scheduler.add_job(my_job, trigger=trigger)

View File

@ -1,8 +1,10 @@
from utils.haikang_util import HaikangUtil
from module_admin.entity.vo.haikang_vo import VisitorReservationQueryModel
from config.env import HaiKangConfig
import json
import base64
import asyncio
import os
class HaiKangService:
"""
@ -136,26 +138,36 @@ class HaiKangService:
visitor_list += result[1]['list']
else:
break
# else:
# return []
#
# print(visitor_list)
os.makedirs(os.path.dirname(HaiKangConfig.HAIKANG_VISITOR_PICTURES_SAVE_PATH), exist_ok=True)
with open("./visitor/visitorIds.txt", "r", encoding="utf-8") as f:
with open(HaiKangConfig.HAIKANG_VISITOR_RECORD_TXT, "r", encoding="utf-8") as f:
visitor_ids = [line.rstrip('\n') for line in f]
# print(visitor_ids)
visitor_save_path_name_list = list()
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']}")
result = await HaikangUtil.query_visitor_record_pictures(visitor["svrIndexCode"], visitor["picUri"], f"{HaiKangConfig.HAIKANG_VISITOR_PICTURES_SAVE_PATH}{visitor['visitorName']}")
await asyncio.sleep(1)
visitor_save_path_name_list.append(result)
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")
return visitor_save_path_name_list

View File

@ -457,15 +457,15 @@ class HaikangUtil:
back = await cls.send_request("POST", url, headers, body_json)
if back["code"] == "0":
# logger.info(f"查询访客预约记录成功")
logger.info(f"查询访客预约记录成功")
return [True, back["data"]]
else:
# logger.error(f"查询访客预约记录失败 ", back["code"], back["msg"])
logger.error(f"查询访客预约记录失败 ", back["code"], back["msg"])
return [False, back["code"], back["msg"]]
# 获取访客记录中的图片
@classmethod
async def query_visitor_record_pictures(cls, svrIndexCode: str, picUri: str, save_path):
async def query_visitor_record_pictures(cls, svrIndexCode: str, picUri: str, save_path:str):
"""获取访客记录中的图片
Args:
@ -490,12 +490,16 @@ class HaikangUtil:
back = await cls.send_request("POST", url, headers, body_json, False)
os.makedirs(save_path, exist_ok=True)
save_path = os.path.join(save_path, picUri.split('/')[-1]+".jpg")
name = save_path.split('/')[-1]
save_path = os.path.join(save_path, name+".jpg")
with open(save_path, 'wb') as f:
for chunk in back.iter_bytes(chunk_size=8192):
if chunk: # 忽略 keep-alive 的空 chunk
f.write(chunk)
return [save_path, name]
@ -1019,34 +1023,34 @@ class HaikangUtil:
return [False, back["code"], back["msg"]]
# 查询访客预约记录, visitorStatus: 0 待审核, 1 正常, 2 迟到, 3 失效, 4 审核退回, 9 审核失效, 10 邀约中, 11 邀约失效
@classmethod
async def query_visitor_record(
cls, **args
):
"""查询访客预约记录
# @classmethod
# async def query_visitor_record(
# cls, **args
# ):
# """查询访客预约记录
Args:
pageNo (int, optional): 页码. Defaults to 1.
pageSize (int, optional): 每页个数. Defaults to 10.
visitorStatus (int, optional): 访客状态. Defaults to 1.
# Args:
# pageNo (int, optional): 页码. Defaults to 1.
# pageSize (int, optional): 每页个数. Defaults to 10.
# visitorStatus (int, optional): 访客状态. Defaults to 1.
Returns:
_type_: _description_
"""
url = f"{HaiKangConfig.HAIKANG_URL}:{HaiKangConfig.HAIKANG_PORT}/artemis{HaiKangConfig.HAIKANG_VISITOR_RECORD_SEARCH}"
body_dict = args
# Returns:
# _type_: _description_
# """
# url = f"{HaiKangConfig.HAIKANG_URL}:{HaiKangConfig.HAIKANG_PORT}/artemis{HaiKangConfig.HAIKANG_VISITOR_RECORD_SEARCH}"
# body_dict = args
body_json = json.dumps(body_dict, separators=(",", ":"))
# body_json = json.dumps(body_dict, separators=(",", ":"))
headers = cls.build_signed_headers(
"POST", url, body_json, HaiKangConfig.HAIKANG_AK, HaiKangConfig.HAIKANG_SK
)
# 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)
# back = await cls.send_request("POST", url, headers, body_json)
if back["code"] == "0":
logger.info(f"查询访客预约记录成功")
return [True, back["data"]]
else:
logger.error(f"查询访客预约记录失败 ", back["code"], back["msg"])
return [False, back["code"], back["msg"]]
# if back["code"] == "0":
# logger.info(f"查询访客预约记录成功")
# return [True, back["data"]]
# else:
# logger.error(f"查询访客预约记录失败 ", back["code"], back["msg"])
# return [False, back["code"], back["msg"]]