Pārlūkot izejas kodu

AI识别捕获UnidentifiedImageError异常

zhangdongming 1 gadu atpakaļ
vecāks
revīzija
e7e8f28337
2 mainītis faili ar 21 papildinājumiem un 25 dzēšanām
  1. 16 24
      Controller/AiController.py
  2. 5 1
      Object/SageMakerAiObject.py

+ 16 - 24
Controller/AiController.py

@@ -128,30 +128,6 @@ class AiView(View):
                 if (now_time - add_time) <= (3600 * 24 * 3):
                     ai_server = 'rekognition'
 
-            redis_obj = RedisObject(db=6)
-            APP_NOTIFY_KEY = f'ASJ:NOTIFY:PUSH:{uid}:{channel}'  # 推送间隔缓存KEY
-            push_cache_data = redis_obj.get_data(APP_NOTIFY_KEY)
-            is_push = False if push_cache_data else True
-
-            notify_data = uid_push_qs[0]['uid_set__msg_notify']
-
-            # APP推送提醒状态
-            notify = self.is_ai_push(uid, notify_data) if is_push else is_push
-
-            if ai_server == 'sageMaker':  # 自建模型sageMaker AI
-                sage_maker = SageMakerAiObject()
-                ai_result = sage_maker.sage_maker_ai_server(uid, file_list)  # 图片base64识别AI标签
-                if ai_result:
-                    res = sage_maker.get_table_name(uid, ai_result, detect_group)
-                    if not res:  # 当前识别结果未匹配
-                        return response.json(0)
-                    # 保存推送消息
-                    sage_maker.save_push_message(uid, n_time, uid_push_qs, channel, res, file_list, notify)
-                    self.add_push_cache(APP_NOTIFY_KEY, redis_obj, push_cache_data,
-                                        uid_push_qs[0]['uid_set__new_detect_interval'])
-                    return response.json(0)
-                TIME_LOGGER.info(f'uid={uid},sagemakerAI识别失败')
-
             push_thread = threading.Thread(target=self.image_label_detection,
                                            kwargs={'ai_server': ai_server, 'uid': uid, 'file_list': file_list,
                                                    'detect_group': detect_group, 'n_time': n_time,
@@ -208,6 +184,22 @@ class AiView(View):
             # APP推送提醒状态
             notify = self.is_ai_push(uid, notify_data) if is_push else is_push
 
+            if ai_server == 'sageMaker':  # 自建模型sageMaker AI
+                sage_maker = SageMakerAiObject()
+                ai_result = sage_maker.sage_maker_ai_server(uid, file_list)  # 图片base64识别AI标签
+                if ai_result:
+                    if ai_result == 'imageError':
+                        return
+                    res = sage_maker.get_table_name(uid, ai_result, detect_group)
+                    if not res:  # 当前识别结果未匹配
+                        return
+                    # 保存推送消息
+                    sage_maker.save_push_message(uid, n_time, uid_push_qs, channel, res, file_list, notify)
+                    self.add_push_cache(APP_NOTIFY_KEY, redis_obj, push_cache_data,
+                                        uid_push_qs[0]['uid_set__new_detect_interval'])
+                    return
+                TIME_LOGGER.info(f'uid={uid},sagemakerAI识别失败')
+
             TIME_LOGGER.info(f'*****现执行Reko,uid={uid}识别类型={ai_server}')
             dir_path = os.path.join(BASE_DIR, 'static/ai/' + uid + '/' + str(n_time))
             if not os.path.exists(dir_path):

+ 5 - 1
Object/SageMakerAiObject.py

@@ -16,7 +16,7 @@ from io import BytesIO
 import boto3
 import cv2
 import numpy as np
-from PIL import Image
+from PIL import Image, UnidentifiedImageError
 
 from AnsjerPush.Config.aiConfig import AI_IDENTIFICATION_TAGS_DICT
 from AnsjerPush.config import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, CONFIG_US, CONFIG_EUR
@@ -78,6 +78,10 @@ class SageMakerAiObject:
                 return False
 
             return results
+        except UnidentifiedImageError as e:
+            LOGGER.info('***sage_maker_ai_server***uid={},errLine={errLine}, errMsg={errMsg}'
+                        .format(uid, errLine=e.__traceback__.tb_lineno, errMsg=repr(e)))
+            return 'imageError'
         except Exception as e:
             LOGGER.info('***sage_maker_ai_server***uid={},errLine={errLine}, errMsg={errMsg}'
                         .format(uid, errLine=e.__traceback__.tb_lineno, errMsg=repr(e)))