From 1f7dd0393ced586fe797f59d3cad919cfb4d0769 Mon Sep 17 00:00:00 2001 From: haotianmingyue <2421912570@qq.com> Date: Thu, 18 Sep 2025 16:53:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 001测试海康api.py | 18 ++++++++---- config/__pycache__/env.cpython-310.pyc | Bin 3055 -> 2587 bytes config/env.py | 1 + util/haikang_util.py | 37 +++++++++++++++++++++++-- 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/001测试海康api.py b/001测试海康api.py index 628f42c..d67b382 100644 --- a/001测试海康api.py +++ b/001测试海康api.py @@ -57,7 +57,10 @@ async def face_group_1vN_search_service(image_path): image_data = f.read() encoded_image = base64.b64encode(image_data).decode('utf-8') - + + with open("image_base64.txt", "w", encoding="utf-8") as f: + f.write(encoded_image) + result = await HaikangUtil.face_group_1vN_search( facePicBinaryData=encoded_image, pageNo=1, @@ -88,11 +91,16 @@ async def face_picture_check(image_path): # 查询访客预约记录 async def query_visitor_record(): - result = await HaikangUtil.query_visitor_record(pageNo=1, pageSize = 10) + result = await HaikangUtil.query_visitor_record(pageNo=1, pageSize=10, visitorStatus=1) print(result) with open("query_visitor_record.json", "w", encoding="utf-8") as f: f.write(json.dumps(result[1])) + +# 查询访客预约记录图片 +async def query_visitor_record_pictures_service(svrIndexCode, picUri): + await HaikangUtil.query_visitor_record_pictures(svrIndexCode, picUri) + if __name__ == '__main__': #asyncio.run(get_door_list_service()) # print("*"*100) @@ -105,11 +113,11 @@ if __name__ == '__main__': #asyncio.run(get_face_group_service()) - image_path = "./a7b3c794281902041c9b823df7667ce7.jpg" - asyncio.run(face_group_1vN_search_service(image_path)) + # image_path = "./a7b3c794281902041c9b823df7667ce7.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()) #asyncio.run(door_online_status_service(["d4a610b6554d4544bc35dd3138f128b0"])) diff --git a/config/__pycache__/env.cpython-310.pyc b/config/__pycache__/env.cpython-310.pyc index 668b9a54ea3d80c57d07110abbbc24eae0b087e4..413bfa94f1c5d396abc3415b259c5bf8635af88a 100644 GIT binary patch delta 616 zcmYk3O=}ZD7{_O}+uhmMybzkSR#CxXEoPgIX_FE>*o)|)h}gqimSty67Mg6_*@8V3 z!IWMl%ti5{M-fjw3Z4bQ50G!*$*vn(V7<+M^bgF5 zyN+K^ws<9W$A}i-`*~}b>P(}A>C|9^n#`aUGpWri>M)zS%%KJ5 z(jqH>s7TAK1j4cy<7RiIpXVdK=Xs5eUvKQR>+Me6Z*C`FF+!C1o%W93X|!mi`Q(TX zqLYw4cyWC1V04(iZ8BhtcnDn1$SDhokUa}}^F4$Zw+MnXK{2$^q06_#3Y+r6y Kb8FgNTloXF`F0Ti delta 1067 zcmZuvK~EDw6rL&D?RML4OR2$1D@27@MOs>nhKR8OA_0n_7~&ky*JN7-`geK=Mxc( z?7dI<579L#f}gIPE}t4h)I+_ih>4^^pLTNGtV|APvC9R;!3psX*Q|mj~nVfzfzND5K&W#=X(ZP2BXQRW~;!=rqFw4gP1jJ#k zg>wM@cM8~WL70W{5q#K+;BXaqIP3nI^w^bxekZG%rdG<8D`Bw<#sRPGtAv_-`xAX^ zCKJiQ^U2CdL&+^bhBNuX)Z$DrQyEQ8k7TsW?C4#xm>wXrnZne_cw(xUiSdS;F=sV5 zJaY`a03^U(o1C7LFQ>Dk^7WZXVzXkN^tEw$V)Ta5P|R-FR)kqmfH$zp0zgAPh>TjD z&M3ZQ4LN%{oi#*x>RLrLOkAo!1?skKHx)s=$1?;A9^KJ2042O*yY;|%(yaKm`wzctzTQ2HfgpCTi@^b^HiKsIn+$%kux=Das1g}d&0(8XA7k2# z+t}iVFlRu;tY5D6(7zdtPPqQtdL;~2#r>UPNm-)|_RowK1}7N6XGL{y*;GtzzNngc zo!S}p@!V_HQHXsHs~iMi%@Q~+C1Q>jv4fYe!Omlcj6T?m0mK3JS~uOKYO805L}W4= zg|?rs`>rb51XRDF(q=<^%`!H9d-`^n)P)O0ovswri>xVSmRdjp7O;1BqN)^>+9iR% JCA3Ih#~;t0>plPg diff --git a/config/env.py b/config/env.py index a80f487..ab43f22 100644 --- a/config/env.py +++ b/config/env.py @@ -33,6 +33,7 @@ class HaiKangSettings: HAIKANG_FACE_GROUP_URL = '/api/frs/v1/face/group' HAIKANG_VISITOR_RECORD_SEARCH = '/api/visitor/v2/appointment/records' + HAIKANG_VISITOR_RECORD_PICTURES = '/api/visitor/v1/record/pictures' class GetConfig: diff --git a/util/haikang_util.py b/util/haikang_util.py index 6ebc7af..471cc46 100644 --- a/util/haikang_util.py +++ b/util/haikang_util.py @@ -90,7 +90,7 @@ class HaikangUtil: # 发送请求 @classmethod - async def send_request(cls, method: str, url: str, headers: dict, body: str | None): + async def send_request(cls, method: str, url: str, headers: dict, body: str | None, json=True): @@ -102,7 +102,9 @@ class HaikangUtil: # if response.status_code >= 400: # logger.error(f"发送请求失败: {url} , {response.status_code} {response.text}") # raise HTTPException(status_code=response.status_code, detail=response.text) - return response.json() + if json: + return response.json() + return response # 获取access_token @classmethod @@ -455,3 +457,34 @@ class HaikangUtil: else: # 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): + """获取访客记录中的图片 + + Args: + visitorRecordIndexCode (str): 访客记录索引码 + + Returns: + _type_: _description_ + """ + url = f"{HaiKangConfig.HAIKANG_URL}:{HaiKangConfig.HAIKANG_PORT}/artemis{HaiKangConfig.HAIKANG_VISITOR_RECORD_PICTURES}" + + body_dict = { + "svrIndexCode": svrIndexCode, + "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) + + with open("person.jpg", 'wb') as f: + for chunk in back.iter_content(chunk_size=8192): + if chunk: # 忽略 keep-alive 的空 chunk + f.write(chunk)