原文链接

一、项目背景

  海参分拣是将海参按照不同的标准,如大小、重量、形态、品质等进行分类的过程。传统的海参分拣主要依靠人工经验操作,而现在随着技术的发展,出现了智能海参分拣机,集成机器视觉识别、智能算法与自动化控制技术,通过高清摄像头捕捉海参图像,利用深度学习算法识别其特征,完成自动化分拣

  海参加工产业快速发展背景下,传统人工分拣模式暴露三大瓶颈:

效率低下:日均处理量仅为机械臂的 1/5,高密度作业时效率瓶颈显著。

成本高企:旺季人力成本占比超 30%,用工缺口达 40%,制约规模化生产。

损耗严重:海参自分解特性导致损耗率超 15%,经济损失突出。 现有分选设备在灵活性、精准度及品质识别能力上存在明显不足,难以适应产业需求。

二、项目简介

  传统海参分拣面临人工分拣效率低、成本高、损耗重等痛点。本团队基于 OpenVINO 研发刺参 AI 分拣系统,融合视觉识别与机械臂技术,通过YOLOv7 算法优化实现智能分拣,分拣效率提升 5 倍、成本降 50%、损耗率≤5%,树立产业智能化升级标杆。

三、项目运行

工具说明

①OpenVINO开源AI工具套件
  OpenVINO™ 工具套件是一款开源工具套件,可以缩短延迟,提高吞吐量,加速 AI 推理过程,同时保持精度,缩小模型占用空间,优化硬件使用。它简化了计算机视觉、大型语言模型 (LLM) 和生成式 AI 等领域的 AI 开发和深度学习集成。

 ②NeZha开发套件

  哪吒开发板搭载Intel N97处理器,配备8GB LPDDR5内存和64GB eMMC存储空间,支持Windows、Linux两个操作系统,支持高分辨率显示,提供HDMI接口使检测结果能更好的展示。

 系统配置与开发环境搭建

1. Ubuntu 系统基础部署

① 系统安装与网络配置

  • Ubuntu 安装教程:参考 Intel 官方指南完成系统烧录(推荐 Ubuntu 20.04 LTS)。
  • https://ubuntu.com/download/iot/intel-iot?login=from_csdn

  • USB 共享网络:若设备无网口,可通过手机 USB 共享网络,需在手机的 “个人热点” 中启用 “USB共享网络”——应急方案

网卡驱动安装(以绿联 CM448 为例),步骤如下:

1、安装 DKMS 工具:

sudo apt install dkms


2、克隆驱动仓库:

git clone https://github.com/brektrou/rtl8821CU.git

3、编译安装 

 cd rtl8821CU/
  sudo ./dkms-install.sh

2.远程开发环境搭建

① SSH 远程连接配置

1、安装 SSH 服务:

sudo apt install openssh-server


2、启动服务:

sudo systemctl start ssh


3、查看 IP:(通过局域网 IP 连接,如ssh username@192.168.1.100)

ip addr show


② 可视化远程工具(MobaXterm)

  下载安装 MobaXterm 后,新建 SSH 会话,输入设备 IP 与用户名,支持图形化文件传输与终端分屏。https://blog.csdn.net/qq_44074697/article/details/118544904

 3.编程环境配置(Python + OpenVINO)

① Python 环境管理(Miniconda 方案)
        下载安装(以 Python 3.10 为例):

        1、从清华源获取 Miniconda:

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_23.10.0-1-Linux-x86_64.sh


        2、执行安装脚本:

bash Miniconda3-py310_23.10.0-1-Linux-x86_64.sh


        3、激活环境:

source ~/.bashrc


② OpenVINO 深度学习框架部署
        1、创建专用虚拟环境:

conda create -n openvino_t python=3.9  # Python 3.9适配性最佳
conda activate openvino_t              # 激活环境

        2、安装 OpenVINO(2024.4.0 版本):

pip install openvino==2024.4.0         # 包含基础推理组件
pip install openvino-dev              # 可选:安装开发工具包

        3、验证安装:

# 新建test.py文件
from openvino.runtime import Core
ie = Core()
print("OpenVINO版本:", ie.get_property("OPENVINO_VERSION"))


       执行python test.py,若输出版本信息则安装成功。

项目开发

使用yolov7训练自己的数据集论文代码下载地址:

https://gitcode.com/gh_mirrors/yo/yolov7?utm_source=csdn_github_accelerator&isLogin=1&isLogin=1&login=from_csdn

接下来进入目标文件夹,在根目录有一个requirements.txt,里面有关于yolo需要的环境 

加入清华镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple


进行测试,运行detect.py,效果如下:

接下来制作自己的数据集,本项目进行图片收集并自制数据集

图片数量(jpg文件个数):1200,标注数量(xml文件个数):1200

标注类别数:3

标注类别名称:['High-quality sea cucumber', 'Ugly sea cucumber', 'Incomplete sea cucumber']

使用标注工具:MakeSense,标注规则:对类别进行画矩形框

接下来进行模型训练主要参考以下部分,需要替换为自己的标签文件,在训练轮数方面可以先使用10轮训练成功后进行增加提高准确率

数据集替换:修改coco.yaml

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./data/images/train
val: ./data/images/val
 
# number of classes
nc: 3
 
# class names
names: ['High-quality sea cucumber', 'Ugly sea cucumber', 'Incomplete sea cucumber']


 训练轮次修改:修改为100轮

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolov7.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    parser.add_argument('--data', type=str, default='data/coco.yaml', help='data.yaml path')
    parser.add_argument('--hyp', type=str, default='data/hyp.scratch.p5.yaml', help='hyperparameters path')
    parser.add_argument('--epochs', type=int, default=100)
    parser.add_argument('--batch-size', type=int, default=4, help='total batch size for all GPUs')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--notest', action='store_true', help='only test final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
    parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')
    parser.add_argument('--project', default='runs/train', help='save to project/name')
    parser.add_argument('--entity', default=None, help='W&B entity')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--linear-lr', action='store_true', help='linear LR')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
    parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
    parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
    parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
    parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone of yolov7=50, first3=0 1 2')
    parser.add_argument('--v5-metric', action='store_true', help='assume maximum recall as 1.0 in AP calculation')
    opt = parser.parse_args()
 
    # Set DDP variables
    opt.world_size = int(os.environ['WORLD_SIZE']) if 'WORLD_SIZE' in os.environ else 1
    opt.global_rank = int(os.environ['RANK']) if 'RANK' in os.environ else -1
    set_logging(opt.global_rank)
    #if opt.global_rank in [-1, 0]:
    #    check_git_status()
    #    check_requirements()

最终运行效果如下:

四、未来前景

       随着智能化技术与海洋产业的深度融合,本刺参 AI 分拣系统具备广阔的发展空间与战略价值。在技术层面,深度优化算法与硬件,引入 Transformer 架构提升粘连检测精度至 95% 以上,进一步提升分级精度;同时结合边缘计算与云端协同,构建 “设备端实时分拣 + 云端大数据分析” 的智慧管理平台,为企业提供生产优化、市场预测等增值服务。

       在应用领域,系统将从海参分拣向鲍鱼、贝类等更多水产品延伸,推动整个水产加工行业的智能化升级。此外,随着 “双碳” 目标推进与海洋生态保护需求提升,该系统的幼苗识别与放生功能有望成为行业标准,助力渔业资源可持续发展,引领绿色智能制造新趋势。

Logo

为开发者提供丰富的英特尔开发套件资源、创新技术、解决方案与行业活动。欢迎关注!

更多推荐