蓝莓成熟检测
1.新建文件夹之后用#一模一样的结构命名 blueberry_82/ ├── images/ │ ├── train/ # 放 80% 的图片 │ └── val/ # 放 20% 的图片 └── labels/ ├── train/ # 放对应 80% 图片的 txt 标签 └── val/ # 放对应 20% 图片的 txt 标签2. 安装 LabelMe#打开 PyCharm 终端直接用 pip 安装 pip install labelme#安装完成后输入下面的命令就能打开打开界面 labelme如下图左上角点点击“打开”打开需要标签的图片文件3.标签具体步骤先点左侧工具栏的「多边形」按钮。直接在图片上随便点一下先画一个简单的形状哪怕点一个点也行。画多边形沿着它的边缘用鼠标点一圈轮廓双击闭合。画完后会自动弹出一个「输入标签」的对话框这时候就能正常输入了。输入immature点 OK表示未成熟输入mature点 OK表示成熟。保存按Ctrl S软件会自动在你的图片文件夹里生成一个和图片同名的.json文件比如你的图片是Camera 1(1)_1.bmp保存后就会生成Camera 1(1)_1.json。所有图片打完标签后搜索图片后缀.json全选把.json文件另存用于后续标签生成。如下图就是打过标签的图片一定要记得按Ctrl S之后点击左上角的下一张就可以直接跳转到下一张图片4.安装 YOLOv8最好先获取Python 3.12解释器#打开 PyCharm 底部的 Terminal终端先升级 python -m pip install --upgrade pip #再安装 ultralyticsYOLOv8 的官方库 pip install ultralytics #国内镜像下载yolov8n-seg https://mirror.ghproxy.com/https://github.com/ultralytics/ultralytics/releases/download/v8.2.0/yolov8n-seg.pt5.复制下面代码生成YOLO能够识别的txt文件记得更改文件输入、输出路径# ##生成txt标签文件######################### # import json # import os # import numpy as np # # def labelme_to_yolo(json_path, output_dir, class_map, img_dir): # # 将LabelMe的JSON文件转换为YOLO分割格式的TXT文件 # # # 读取JSON文件 # with open(json_path, r, encodingutf-8) as f: # data json.load(f) # # # 获取图片宽高 # img_w data[imageWidth] # img_h data[imageHeight] # # 生成输出文件名 # base_name os.path.splitext(os.path.basename(json_path))[0] # output_path os.path.join(output_dir, f{base_name}.txt) # # # 写入YOLO格式 # with open(output_path, w, encodingutf-8) as out_f: # for shape in data[shapes]: # # 获取类别ID # label shape[label] # if label not in class_map: # print(f警告发现未定义标签 {label}已跳过) # continue # class_id class_map[label] # # # 归一化多边形坐标 # points np.array(shape[points], dtypenp.float32) # points[:, 0] / img_w # points[:, 1] / img_h # # # 拼接成一行字符串class_id x1 y1 x2 y2 ... # points_str .join([f{x:.6f} {y:.6f} for x, y in points]) # out_f.write(f{class_id} {points_str}\n) # print(f✅ 已转换{base_name}.txt)6.在image同级文件下新建blueberry.yaml文件 注意修改文件后缀为.yaml记得修改数据集目录# 数据集根目录 path: D:\BaiduNetdiskDownload\29222462\DB-1\DB-1 # 训练/验证集路径相对于path train: images val: images # 类别数量和名称 nc: 2 names: [immature, mature]7.开始训练专属模型这是学习100次的代码最好查一下每个参数的意思 好针对你的电脑性能修改#pycharm终端输入 yolo segment train datablueberry.yaml modelyolov8n-seg.pt epochs100 imgsz640 device0如下图大面积的0代表有问题请检查步骤1中创建的文件夹是否对是否每个子文件夹都有文件注意运行完后显示训练好的模型如图为E:\new perjectl\pythonProject3\runs\segment\train-48.实际蓝莓成熟识别注意输入输出文件的位置修改from ultralytics import YOLO # 加载你训练好的模型 model YOLO(runs/segment/train-5/weights/best.pt) # 批量处理你的蓝莓图片 results model.predict( sourcerD:\BaiduNetdiskDownload\29222462\DB-3\Generated Images, saveTrue, conf0.25, save_dirrD:\BaiduNetdiskDownload\29222462\DB-3\Images_results # 改成你自己的路径 ) # 统计每一张图的成熟度 for i, result in enumerate(results): mature_count sum(1 for box in result.boxes if int(box.cls[0]) 1) immature_count sum(1 for box in result.boxes if int(box.cls[0]) 0) print(f图片{i1}: 成熟蓝莓{mature_count}颗, 未成熟蓝莓{immature_count}颗) devicecpu其中runs/segment/train-5/weights/best.pt 是你模型的位置具体命名及查看方式步骤7及如下两种跑完这部分代码就可以查看运行结果 至此完成了所有的蓝莓识别步骤