目前可以成功动态更换模型运行的
This commit is contained in:
		
							
								
								
									
										61
									
								
								util/model_util.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								util/model_util.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | ||||
| import os | ||||
| import numpy as np | ||||
| import traceback | ||||
| from ultralytics import YOLO | ||||
| from typing import Optional | ||||
|  | ||||
|  | ||||
| def load_yolo_model(model_path: str) -> Optional[YOLO]: | ||||
|     """ | ||||
|     加载YOLO模型(支持v5/v8),并校验模型有效性 | ||||
|     :param model_path: 模型文件的绝对路径 | ||||
|     :return: 加载成功返回YOLO模型实例,失败返回None | ||||
|     """ | ||||
|     try: | ||||
|         # 加载前的基础信息检查 | ||||
|         print(f"\n[模型工具] 开始加载模型:{model_path}") | ||||
|         print(f"[模型工具] 文件是否存在:{os.path.exists(model_path)}") | ||||
|         if os.path.exists(model_path): | ||||
|             print(f"[模型工具] 文件大小:{os.path.getsize(model_path) / 1024 / 1024:.2f} MB") | ||||
|  | ||||
|         # 强制重新加载模型,避免缓存问题 | ||||
|         model = YOLO(model_path) | ||||
|  | ||||
|         # 兼容性校验:使用numpy空数组测试模型 | ||||
|         dummy_image = np.zeros((640, 640, 3), dtype=np.uint8) | ||||
|  | ||||
|         try: | ||||
|             # 优先使用新版本参数 | ||||
|             model.predict( | ||||
|                 source=dummy_image, | ||||
|                 imgsz=640, | ||||
|                 conf=0.25, | ||||
|                 verbose=False, | ||||
|                 stream=False | ||||
|             ) | ||||
|         except Exception as pred_e: | ||||
|             print(f"[模型工具] 预测校验兼容处理:{str(pred_e)}") | ||||
|             # 兼容旧版本YOLO参数 | ||||
|             model.predict( | ||||
|                 img=dummy_image, | ||||
|                 imgsz=640, | ||||
|                 conf=0.25, | ||||
|                 verbose=False | ||||
|             ) | ||||
|  | ||||
|         # 验证模型基本属性 | ||||
|         if not hasattr(model, 'names'): | ||||
|             print("[模型工具] 警告:模型缺少类别名称属性") | ||||
|         else: | ||||
|             print(f"[模型工具] 模型包含类别:{list(model.names.values())[:5]}...")  # 显示前5个类别 | ||||
|  | ||||
|         print(f"[模型工具] 模型加载成功!") | ||||
|         return model | ||||
|  | ||||
|     except Exception as e: | ||||
|         # 详细错误信息输出 | ||||
|         print(f"\n[模型工具] 加载模型失败!路径:{model_path}") | ||||
|         print(f"[模型工具] 异常类型:{type(e).__name__}") | ||||
|         print(f"[模型工具] 异常详情:{str(e)}") | ||||
|         print(f"[模型工具] 堆栈跟踪:\n{traceback.format_exc()}") | ||||
|         return None | ||||
		Reference in New Issue
	
	Block a user