# optimization **Repository Path**: wxnlP/optimization ## Basic Information - **Project Name**: optimization - **Description**: v8和v5-lite程序优化,全部基于面向对象封装,易于移植使用。 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-11-14 - **Last Updated**: 2025-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 文件划分说明 ``` |--pic (测试图片) |--utils |--data.py (已融合到推理代码封装) |--detect_v5lite.py (yolov5_lite推理代码封装) |--detect_v8.py (yolov8推理代码封装) |--video (测试视频) |--weights (训练结果) |--competition.onnx (工创赛数据集,四大类生活垃圾,v5lite) |--gear.onnx (齿轮缺陷,四类,yolov8) |--insulator.onnx (insulator缺陷,一类, yolov8) |--Main.py (yolov8+齿轮缺陷+QT综合使用案例) |--v8.py (yolov8示例) |--v5lite.py (yolov5-lite示例) ``` 可以去我的文档网站学习模型训练:[YOLO模型训练](https://tonmoon.top/study/yolov5/1/) ## 克隆源码 打开Linux终端,克隆源码 ```shell git clone https://github.com/wxnlP/optimization.git ``` 将utils放到自己的工程文件夹根目录(自备训练结果权重),安装依赖 ```shell #更新系统包列表 sudo apt update #安装opencv-python pip install opencv-python #安装numpy pip install numpy #安装onnxruntime pip install onnxruntime #安装pyserial(如果需要通信可以安装) pip install pyserial #yolov8需要库 pip install ultralytics ``` ## v5lite ### 初始化 根据自己的文件目录修改必要参数 ```python from utils.detect_v5lite import Detect import cv2 """ 对象初始化,对应传入参数如下 label_value: "训练是列的标签,注意自己的顺序" label_key: "标签对应序列,数据类型为列表" model_path: "ONNX文件的目录,注意:Linux报错要换成绝对路径" """ # 示例如下,为垃圾分类标签 labels = [ "0-plastic_bottle", "0-drink_can", "0-paper", "0-carton", "0-milkCarton", "1-pericarp", "1-vegetable_leaf", "1-radish", "1-potato", "1-fruits", "2-battery", "2-Expired_drug", "2-button cell", "2-thermometer", "3-tile", "3-cobblestone", "3-brick", "3-paperCup", "3-tableware", "3-chopsticks", "3-butt", "3-mask"] model_path = "weights/competition.onnx" label_key = list(range(22)) APP = Detect(model_path=model_path, label_key=label_key, label_value=labels) ``` > 根据自己系统和目录修改路径 > ### yolov5_lite.py使用方法 将utils文件夹放到工程根目录 ```python # 续 “初始化” 后 # 照片识别 APP.detect_pic(img) # 视频处理,传入视频地址--默认输出视频存放地址--'/home/pi/optimization/video/output_video.mp4' # 根据设备自行修改 APP.detect_video(path) ``` ### 实时检测 ```python # 续 “初始化” 后 """摄像头处理示例""" video = 0 cap = cv2.VideoCapture(video) while True: success, img = cap.read() if success: data = APP.detect_pic(img) print("*" * 50) # 返回值使用方法 print(data[0].name) ``` ### 单个照片处理 ```python """照片处理示例""" img = cv2.imread("/home/pi/optimization/pic/image.png") data = APP.detect_pic(img) # 保存检测图像 cv2.imwrite('/home/pi/optimization/results/result_v5lite.jpg', img) # 返回值使用方法 print(data[0].name) ``` ### 视频处理 ```python """视频处理示例""" APP.detect_video(video_path) ``` ## v8 ### 初始化 ```python from utils.detect_v8 import Detect """检测对象初始化""" model_path = "/home/sunrise/v8/weights/gear.onnx" label_dic = { 0: "MissingTeeth", 1: "Potholes", 2: "Scratches", 3: "Gear" } # parts参数是单独为此工程场景定制【1】 part_label = [3] APP = Detect(model_path=model_path, label_dic=label_dic, parts=part_label) ``` 【1】: 因为数据集中`0-2`为缺陷,为`3`为产品名称,故为了排除`3`显示为缺陷,特定了`parts`参数,不使用这个功能可以忽略传入空列表即可。 ### detect_v8使用 将utils文件夹放到工程根目录 ```python # pic_path: 图片路径,kd: 返回参数选择--1:自定义DetectData数据--0: 照片数据(cv2可读取) APP.get_pic(pic_path, kd=1) # 获取当前帧,照片数据(cv2可读取),便于同时获取 “自定义DetectData数据” “照片数据” APP.get_capFrame() ``` ### 多照片推理 ```python """多照片推理""" pic_path = [ "/home/lzh/optimization/pic/gear (1).jpg", "/home/lzh/optimization/pic/gear (2).jpg", "/home/lzh/optimization/pic/gear (3).jpg" ] for i in pic_path: APP.get_pic(i) img = APP.get_capFrame() ``` ### 视频推理 ```python """视频推理""" # 传入视频路径就可以,输出视频默认保存在"/home/sunrise/v8/video/output.mp4",定位到get_video函数去修改 APP.get_video(video_path) ```