From 973ca8113c9d1547d5d35535c12205a34a401987 Mon Sep 17 00:00:00 2001 From: liubiren Date: Fri, 5 Dec 2025 15:20:51 +0800 Subject: [PATCH] =?UTF-8?q?251205=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/client.py | 87 +++++++++------ 票据理赔自动化/SQLite.db | Bin 274432 -> 274432 bytes 票据理赔自动化/SQLite_old.db | Bin 0 -> 274432 bytes 票据理赔自动化/main.py | 206 ++++++++++++++++++----------------- 4 files changed, 161 insertions(+), 132 deletions(-) create mode 100644 票据理赔自动化/SQLite_old.db diff --git a/utils/client.py b/utils/client.py index e193b20..7521acb 100644 --- a/utils/client.py +++ b/utils/client.py @@ -90,7 +90,7 @@ class MySQLClient: class CacheClient: """缓存客户端""" - def __init__(self, cache_ttl: int = 360, database: str = "Caches.db"): + def __init__(self, cache_ttl: int = 360, database: str = "SQLite.db"): """ :param cache_ttl: 缓存生存时间,单位为天 :param database: 缓存数据库名称 @@ -154,20 +154,31 @@ class CacheClient: :return: 缓存 """ with threading.Lock(): # 线程锁,保证并发安全 - with self.connection.cursor() as cursor: - # noinspection PyBroadException - try: - # 根据缓存唯一标识查询有效缓存 - cursor.execute( - "SELECT cache FROM caches WHERE guid = ? AND timestamp >= ?", - (guid, time.time() - self.cache_ttl * 86400), - ) - if result := cursor.fetchone(): - return json.loads(result[0]) - return None - except Exception: - self.connection.rollback() - return None + # noinspection PyBroadException + try: + # 创建游标 + cursor = self.connection.cursor() + # 根据缓存唯一标识查询有效缓存 + cursor.execute( + "SELECT cache FROM caches WHERE guid = ? AND timestamp >= ?", + (guid, time.time() - self.cache_ttl * 86400), + ) + if result := cursor.fetchone(): + print() + return json.loads(result[0]) + return None + # 若发生异常则回滚事务并返回None + except Exception: + self.connection.rollback() + return None + finally: + # 确保游标关闭(关键:释放资源) + if cursor: + # noinspection PyBroadException + try: + cursor.close() + except Exception: + pass def update(self, guid: str, cache: Dict) -> bool: """ @@ -177,24 +188,34 @@ class CacheClient: :return: 成功返回True,失败返回False """ with threading.Lock(): # 线程锁,保证并发安全 - with self.connection.cursor() as cursor: - # noinspection PyBroadException - try: - # 新增或覆盖缓存 - cursor.execute( - "INSERT OR REPLACE INTO caches (guid, cache, timestamp) VALUES (?, ?, ?)", - ( - guid, - json.dumps(cache, ensure_ascii=False), - time.time(), - ), - ) - # 提交事务 - self.connection.commit() - return True - except Exception: - self.connection.rollback() # 异常回滚事务 - return False + # noinspection PyBroadException + try: + # 创建游标 + cursor = self.connection.cursor() + # 新增或覆盖缓存 + cursor.execute( + "INSERT OR REPLACE INTO caches (guid, cache, timestamp) VALUES (?, ?, ?)", + ( + guid, + json.dumps(cache, ensure_ascii=False), + time.time(), + ), + ) + # 提交事务 + self.connection.commit() + return True + # 若发生异常则回滚事务并返回None + except Exception: + self.connection.rollback() + return False + finally: + # 确保游标关闭(关键:释放资源) + if cursor: + # noinspection PyBroadException + try: + cursor.close() + except Exception: + pass """ diff --git a/票据理赔自动化/SQLite.db b/票据理赔自动化/SQLite.db index 006b8eaf608b6a81a0348070c78d3523359f7036..5b061248f5d10e006529e0e7ef4fde317b41e8bf 100644 GIT binary patch delta 2178 zcmciEUrbw790%}o+tQY9x0gY&6vUl%W2I&64`j|wV3e&{G!$kfv6>8uYga3F!_g@O z&D|xDnV2kv#_U0pQE|99Ug~sAr&3{?8nX~xd|7zlL9-Y$eXubRP4xS_Eu>A1Pm?yk zw4Za%J@@AH_xq)%mr71AmBgzy9AblFc~X0r*(k-SsOZd{bxxXazv?&0?Ap#8oc zSZVgeO!!ST(p@HHq`N6)%$$lpF4U~o8U**9_IT^^VXtPL)==!e)8Lz$2wwZQ)$)I? z7NiXJ7XP@f@2ld<`;z$Gs7QeP0*#w*?EG(2|I518~%X9IKz-xf-`m|j7 z!$Z)ZDxPSo2Kor|llzPh0^KV1yI!vXo*>L!u1{712URp*sjvZi2w!|TXsG~PDts?Z zT7hap`c_Tn13-z2WA6@^16n}#&EE6ZTkvE4PE)hv!fwBj zG9*Tr{Gj?qF%VXv%~*}VGlX~eiKqea5|ST=ZtHRU8A?=C~4*|l*~!>~PuKC#QbkLSL;x{}^a zg3en{tN51eqLnpvEXhy$879q0i`f#X6cRffI@(&_pxLbT7Sr`3fvJFS*iQ%WejzoQ6*AlQn6C?QaMw7Q}t7CK<{B_IgFYHbrEzN zwg-V`!`z5wL=$2^VlRUJ7_=hLf7qi4G)d+{I2qf{keLi^j-k6T^i_;7wgbTtRQTwJ Uj4GQ7T9Z;Hg_-y4x~Ii|0R0o6mH+?% delta 7174 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 diff --git a/票据理赔自动化/SQLite_old.db b/票据理赔自动化/SQLite_old.db new file mode 100644 index 0000000000000000000000000000000000000000..006b8eaf608b6a81a0348070c78d3523359f7036 GIT binary patch literal 274432 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

NPK5_saD-g^)E=C4G?3Hb-=IGTw01Hf{S z5)=gm_H~(ttV0%PE@pfD71y7pIy@wx9+rjm$uo9wIc~H{atK^}^uer{kH26+z`4%J zbMgzTt!iBd{B8sBCc+Fz!GrH=GLH(4(2ZW~_VQiu@b(?ag3${weW6w(orJLp!i;26 zW`iz#DkYofV^qT$md4scKDI#U+r(@fIX zt}dLjer7RUoXb@eZ*FhaQRld#Pr)`XhR?#_q_Bj8Jda01Dj)@?2|3#CN@f)@uwG_MiZ?cWETX<9%FJAmH67%~b7!oh+#bvk&$iG=XG3|q71&md$* z!kUdpWPebEmMAwZX_YM)uLA&a;@#CvCTKBzL4bVgsvym+6RS%%u}~WIK@Q<4iz|}~ zZ@>l;KwJv|qChCHU9K(CDH17?C$C?~Qq)AfmzOPmb1(9>F6JhxZ?N_t5LL1BdOAkk|D|MCghKjvlMw(ZStY z{^7vUJ%{l3w`%*w_a7KLFn)OK*zPSgeU@zO$i8twP6T7_#fb7>(g`mt9(i})_`CYV z;=fw|LwN6I?~#KCevIk%9NwomEse{@f1Se{+LyK1Dm2dTS#I8=kJdh%ZJoIx1+KkI0!+-!YQEPK;|Nh9h+=45{QNP{t^=Z~%B4?7RUOn}AFdlerlU@#vW)A^rw zZ-t~c@#MdM99!q6SI?3W(o~BjjoJWB^ z5syeDdD$X>DO?B^~5kGoSYhN6$s8NBN>&2Avxl)qaiKVG|x*ji+S zSC^*Qyv~I2v0Q>5u?Us~DQx|!q~NVwf=!Mq3Fnzt6&-)K1|$zc3^I(JnG&G6sL6VJx4^F89Ir{CTbu%DCX^~l4Co0Qz>hg;5wwVMd*?iik4wV5XDsW*|03tB@&!h* z5jDQWW^0Z%`+RdAuY~pM#cTa^W$nf_h!loF7bo$!khFPpCbmhTw4>2i+tH}w8vycY zV6Gue+!My|(~2;Km3*%`I{1$n9LQ-}*A~z^l6}r=jcSQdjk{EUE5?RG0S!LGe7(wA zjap?q$O`xyCJ}-*G1ET%@9ub2sKTgJiE@P{{Kf8et2Yz>-yE#>C;tCtV|Zw!(de%? z_u#?5f&Go<_}+c>v7xcC;qiL2InWr}yJzp%SpVL!p}jB9|KI4Zi2s)j75x8=#z^v3 z;0y5oH~RZW=>Na^+uy$Tf9B)(UHtpc@D1W?;v2=+z&DKV+xQ0X{Q*9CFYx>Lw&42~ zzCXp+kFO739p9hedmZ1Og#K#p@C0Fmd35AcoBnRL+WzuS!W0f%w zbA!Xsqz!qQ0o& z&^(_LhXk(2ip(yaa;y!7b1y(188Hy9xvb|<_SU-?GwX}Tca(_gvK$DOzHk$u&m9nV zc-Q?!CK`qT&&B#dz$wavhWL>3j!$)NJ>j9^Pk4inrMH2YM9B;dSC`B$vkk4Zsp@@D#QxR8@(^O&& zQt>cBl+IK$HH(Rj(UlH`X19CG=Cv?=GMld#h>%>EL#{vI;h`b0fU={tF%=dsf^@or zQo>2JF*MV6Aq6u-5~U?h!nCUD0hxoLlR0nW0V-kRe%Ovmj}IIH0SEah#`cHWk@#!O zhp;&~glIC|YF)&hS&b5`WnUJr>SM_i*{>12ULeVpL zsGkKJHoq*U3RKaUy2g1qbc|hb{rsfm*TpraDWH&=&KbO2hN0~F02)6^NTLiGwvy@S zS&h`uC{JCQF)-#MWBl0ag|sDA!~kh?8li~uzH%Z;KmzM{AVL*;eyBj;{`pe->KPXJ zt%8b9jw;t+hH)OeiiOe`?7=grddNq6|J|YSclLa5fN%W7K?;?XWjPAxwOdzEuYiM> zTI6Dimktgycq~kSLvXf*>gO!h_4y{O1n20@=(2_neg%VM`{MD=#(9rHK=rk1z1v^A6knuHux~y@(Zo c22 Tuple[numpy.ndarray | None, str | None, bytes | None]: + """ + 本地打开并读取影像件 + :param image_path: 影像件路径对象 + :return: 影像件数组、影像件格式和影像件字节流 + """ + # noinspection PyBroadException + try: + # 影像件打开并读取(默认转为单通道灰度图) + image_ndarray = cv2.imread(image_path.as_posix(), cv2.IMREAD_GRAYSCALE) + if image_ndarray is None: + raise RuntimeError("影像件打开并读取发生异常") - # 编码为图像字节流 - # noinspection PyShadowingNames - success, image_bytes = cv2.imencode(f".{globals()["image_format"]}", image_ndarray) - if not success or image_bytes is None: - return None + # 影像件格式 + image_format = image_path.suffix.lower() - return image_bytes + # 按照影像件格式将影像件数组编码 + success, image_ndarray_encoded = cv2.imencode(image_format, image_ndarray) + if not success or image_ndarray_encoded is None: + raise RuntimeError("编码为图像字节数组发生异常") + # 将编码后图像数组转为字节流 + image_bytes = image_ndarray_encoded.tobytes() + + return image_ndarray, image_format, image_bytes + except Exception: + return None, None, None -def images_compression(**kwargs) -> tuple[str | None, str | None]: - """影像件压缩并BASE64编码""" +# noinspection PyShadowingNames +def images_compress( + image_ndarray, image_format, image_bytes, image_size_specified=2 +) -> Optional[str]: + """ + 影像件压缩 + :param image_ndarray: 影像件数组 + :param image_format: 影像件格式 + :param image_bytes: 影像件字节流 + :param image_size_specified: 指定影像件大小,单位为兆字节(MB) + :return: 压缩后影像件BASE64编码 + """ + # 将指定影像件大小单位由兆字节转为字节 + image_size_specified = image_size_specified * 1024 * 1024 - # 影像件格式 - image_format = kwargs.get("image_format", globals()["image_format"]) - if image_format is None: - return None, None - - # 影像件 - image = kwargs.get("image", globals()["image"]) - if image is None: - return None, None - - # 编码为图像字节流 - success, image_bytes = cv2.imencode(ext=f".{image_format}", img=image) - # 若发生异常则返回NONE - if not success or image_bytes is None: - return None, None - - # 生成影像件唯一标识 - image_guid = hashlib.md5(image_bytes.tobytes()).hexdigest().upper() - - # BASE64编码 - image_base64 = b64encode(image_bytes.tobytes()).decode("utf-8") - - # 将指定影像件大小单位由MB转为B - image_size_specified = kwargs.get("image_size_specified", 2) * 1048576 - - # 若影像件BASE64编码后大小小于指定影像件大小则返回 + # 影像件BASE64编码 + image_base64 = b64encode(image_bytes).decode("utf-8") if len(image_base64) <= image_size_specified: - return image_guid, image_base64 + return image_base64 - # 双循环压缩影像件 - # 外循环压缩:通过降低影像件质量实现压缩影像件大小 - for quality in range(90, 0, -10): - - image_copy = image.copy() - - # 内循环压缩:通过等比例调整影像件尺寸实现压缩影像件大小 + # 通过调整影像件质量和尺寸达到压缩影像件目的 + # 外循环压缩:通过调整影像件质量实现压缩影像件大小 + for quality in range(90, 50, -10): + image_ndarray_copy = image_ndarray.copy() + # 内循环压缩:通过调整影像件尺寸实现压缩影像件大小 for i in range(25): - - success, image_bytes = cv2.imencode( - ext=f".{image_format}", - img=image_copy, + # 按照影像件格式和影像件质量将影像件数组编码 + success, image_ndarray_encoded = cv2.imencode( + image_format, + image_ndarray_copy, params=( [cv2.IMWRITE_PNG_COMPRESSION, 10 - quality // 10] if image_format == "png" else [cv2.IMWRITE_JPEG_QUALITY, quality] ), ) - if not success or image_bytes is None: + if not success or image_ndarray_encoded is None: break - image_base64 = b64encode(image_bytes.tobytes()).decode("utf-8") + # 影像件BASE64编码 + image_base64 = b64encode(image_ndarray_encoded.tobytes()).decode("utf-8") if len(image_base64) <= image_size_specified: - return image_guid, image_base64 + return image_base64 # 调整影像件尺寸 - image_copy = cv2.resize( - src=image_copy, - dsize=(int(image_copy.shape[0] * 0.9), int(image_copy.shape[1] * 0.9)), + image_ndarray_copy = cv2.resize( + image_ndarray_copy, + ( + int(image_ndarray_copy.shape[0] * 0.9), + int(image_ndarray_copy.shape[1] * 0.9), + ), interpolation=cv2.INTER_AREA, ) - - # 若调整后影像件尺寸中长或宽小于200像素则停止调整影像件尺寸 - if min(image_copy.shape[:2]) < 200: + # 若调整后影像件尺寸中长或宽小于350像素则停止调整影像件尺寸 + if min(image_ndarray_copy.shape[:2]) < 350: break - # 若仍未压缩至指定影像件大小则返回NONE - return None, None + return None -def images_classification(**kwargs) -> tuple[str | None, str | None]: - """影像件分类""" +def images_classify( + image, image_ndarray, image_format, image_bytes +) -> tuple[str | None, str | None]: + """ + 影像件分类并旋正 + :param image: 影像件数据 + :param image_ndarray: 影像件数组 + :param image_format: 影像件格式 + :param image_bytes: 影像件字节流 + :return: 压缩后影像件BASE64编码 + """ + # 影像件唯一标识 + image_uuid = image["影像件唯一标识"] + with CacheClient() as client: + # 根据作业环节和影像件唯一标识生成缓存唯一标识 + cache_guid = md5(("初审" + image_uuid).encode("utf-8")).hexdigest().upper() + cache = client.query(cache_guid) - # 影像件全局唯一标识:优先使用关键词变量,其次使用全局变量,再次使用随机唯一标识 - image_guid = kwargs.get( - "image_guid", globals().get("image_guid", uuid.uuid4().hex.upper()) - ) - - # 影像件格式 - image_format = kwargs.get("image_format", globals()["image_format"]) - if image_format is None: - return None, None - - # 影像件BASE64编码 - image_base64 = kwargs.get("image_base64", globals()["image_base64"]) - if image_base64 is None: - return None, None + if cache is not None: + # 影像件类型 + image_type = cache["image_type"] + # 影像件方向 + image_o # 请求深圳快瞳影像件分类接口 response = globals()["http_client"].post( @@ -1180,39 +1188,38 @@ if __name__ == "__main__": for image_index, image_path in enumerate( sorted( [ - image_path - for image_path in case_path.glob(pattern="*") - if image_path.is_file() - and image_path.suffix.lower() in [".jpg", ".jpeg", ".png"] + x + for x in case_path.glob(pattern="*") + if x.is_file() and x.suffix.lower() in [".jpg", ".jpeg", ".png"] ], # 实际作业亦仅支持JPG、JPEG或PNG - key=lambda x: x.name, + key=lambda x: x.stat().st_ctime, # 根据影像件创建时间顺序排序 ), 1, ): # 初始化影像件数据 image = { "原始影像件": { - "影像件地址": image_path.as_posix(), + "影像件地址": image_path.as_posix(), # 将影像件路径对象转为字符串 "影像件名称": (image_name := image_path.stem), - "影像件格式": (image_format := image_path.suffix.lower()), }, } - # 本地读取影像件(实际从影像件服务器下载) - image_bytes = image_read() - if image_bytes is None: - # noinspection PyTypeChecker - image["影像件唯一标识"] = None - continue + # 本地打开并读取影像件(实际作业为从作业系统的影像件服务器下载并读取影像件,因赔案签收时会转存影像件至影像件服务器,若下载并读取影像件发生异常则技术支持排查) + image_ndarray, image_format, image_bytes = image_read(image_path) + # 若本地打开并读取影像件发生异常则跳过该影像件 + if image_format is None or image_bytes is None: + raise RuntimeError("本地打开并读取影像件发生异常") + image["原始影像件"]["影像件格式"] = image_format # 生成影像件唯一标识 # noinspection PyTypeChecker - image["影像件唯一标识"] = ( - image_guid := hashlib.md5(image_bytes.tobytes()).hexdigest().upper() - ) + image["影像件唯一标识"] = md5(image_bytes).hexdigest().upper() + + # 影像件分类 print(image) exit() +""" # 影像件压缩(输出BASE64编码) image_guid, image_base64 = images_compression() @@ -1586,3 +1593,4 @@ if __name__ == "__main__": } ) ) +"""