泉州番茄&百香果分级项目算法
Go to file
2024-07-22 12:42:06 +08:00
.idea feat:新增20240627test4为现场部署版本的测试版(包含传统方法、实例分割、目标检测、图像分类多个模型) 2024-07-21 22:17:46 +08:00
20240410RGBtest1 feat:新增通信协议,修改数据接收+处理部分 2024-06-13 22:04:02 +08:00
20240419RGBtest2 feat:新增通信协议,修改数据接收+处理部分 2024-06-13 22:04:02 +08:00
20240529RGBtest3 feat:补充20240529RGBtest3内胜哥的lab色彩空间test文件 2024-07-21 23:25:05 +08:00
20240627test4 feat:新增20240627test4为现场部署版本的测试版(包含传统方法、实例分割、目标检测、图像分类多个模型) 2024-07-21 22:17:46 +08:00
spectrum feat:新增百香果rgb部分代码; 2024-06-04 22:51:02 +08:00
.gitignore 补充README说明文件 2024-07-22 12:42:06 +08:00
README.md 补充README说明文件 2024-07-22 12:42:06 +08:00

泉州多品类果蔬智能分选项目(番茄&百香果)

2024年4月开始开发的项目项目组成员 薛胜、滕广、吴旻、徐耀、方晓东)

灵魂领袖---薛胜,如有算法方面的疑问或者其他方面的不解请虚心请教薛胜大师兄

❤☺→薛胜←☺❤

项目分支说明

supermachine--tomato-passion_fruit
├── master
├── actual-deployment

该项目下包含两个分支master为主分支包含各个阶段的开发测试程序actual-deployment分支为部署版本分支包含设备实际部署版本程序。

master分支

整体结构

 supermachine--tomato-passion_fruit
 ├── 20240410RGBtest1
 ├── 20240419RGBtest2
 ├── 20240529RGBtest3
 ├── 20240627test4
 ├── spectrum
 ├── README.md
 ├── 通信协议(20240722).md

当前项目包含所有阶段测试程序。

20240410RGBtest1为4月开发第一版以薛胜大师兄为开发主力项目框架参照木地板项目进行编程采用socket通信与吴旻师兄协商定好通信协议。

20240419RGBtest2为4月开发第二版经过实验及实际设备运行证明在数据传输时存在丢图漏图等问题经过老倪的亲自指导烟草项目实际运行一年多管道可靠~将socket通信改为命名管道通信采用windows下的win32包进行pipe命名管道创建及连接使用。

20240529RGBtest3为5月底开发第三版重新梳理了项目框架去除冗余代码新增对百香果的RGB及糖度预测解决方案薛胜大师兄为主力截止目前所有的测试代码均采用传统方法在色彩空间上进行处理。

20240627test4为实际设备部署版本基础上的测试版本为实际开发第4版在当前版本中新增百香果褶皱判别模型图像分类、番茄裂口检测模型yolo目标检测、番茄叶片&果蒂&根分割模型yolo实例分割在番茄传统方法处理中新增lab色彩空间处理用于检测后期发现的小样本姑且认为是白色变质缺陷

spectrum为前期无锡光谱实验中用于处理光谱数据验证光谱检测方案透射or反射的测试程序。

PS:实际部署版本采用pipe命名管道进行通信数据传输采取通信协议进行协商通讯通讯协议见——通信协议(20240722).md

actual-deployment分支

整体结构

 supermachine--tomato-passion_fruit
 文件夹:
 ├── models
 ├── utils
 ├── weights
 代码:
 ├── classifer.py
 ├── config.py
 ├── detetor.py
 ├── export.py
 ├── main.py
 ├── pipe_utils.py
 ├── root_dir.py
 ├── to_seg.py
 文件:
 ├── requirements.txt
 ├── tomato-passion_fruit.log
 补充文件:
 ├── README.md
 ├── 通信协议(20240722).md

核心部分为文件夹&代码。

models文件内包含百香果糖度预测模型权重、百香果褶皱判别模型权重、百香果及番茄传统色彩模型预热图像utils文件夹内为yolo自带weights文件夹内包含各个版本的番茄裂口检测模型权重、番茄分割模型权重。

main.py为入口函数实际运行只启动main.py即可

classifer.py为处理程序内部封装了多个类结构如下所示

    classifer.py
    ├── Tomato
    ├── Passion_fruit
    ├── Spec_predict
    
    {
    ├── BasicBlock
    ├── ResNet
    	├── resnet18
    	├── resnet34
    }
    
    ├── ImageClassifier
    ├── Data_processing

Tomato类内定义了番茄传统方法所用到的函数Passion_fruit类内定义了百香果传统方法所用到的函数Spec_predict类内定义了百香果糖度预测模型{BasicBlock、ResNet、resnet18、resnet34}为百香果褶皱判别模型定义所需ImageClassifier类定义了百香果褶皱判别模型Data_processing类内定义了图像处理所需函数、番茄图像分析函数、百香果图像分析函数、图像数据处理函数。

config.py为项目参数定义代码

detetor.py为番茄裂口检测模型

pipe_utils.py为管道通信及数据解析代码

to_seg.py为番茄分割模型

root_dir.py为根目录检测代码

通讯协议(百香果&西红柿通信)

基于pipe命名管道数据共3个字段长度、指令、数据

长度1 长度2 长度3 长度4 指令1 指令2 数据1 数据2 ... 数据i
8'hzz 8'hzz 8'hzz 8'hzz 8'hzz 8'hzz 8'hzz 8'hzz ... 8'hzz

长度

一个32位无符号数length长度 = 数据字节数i + 2 。
长度1指length[31:24]长度2指length[23:16]长度3指length[15:8]长度4指length[7:0]

指令

ASCII字符共2字节16位比如`指令1`为'T'`指令2`为'O',代表番茄数据包

具体指令:

指令1 指令2 指令含义
Y R 预热数据
T O 番茄数据
P F 百香果数据
R E 返回结果数据
K O 返回空果

数据

预热数据包YR,不包含数据字段,仅有长度字段+指令字段

RGB图像数据包'指令1''指令2 '数据1~数据i包含了图像的行数rows(高度)、列数cols(宽度)、以及图像的RGB数据组合方式为高度+宽度+RGB数据


i-4=rows \times cols \times 3

数据1~数据i的分布具体如下:

行数1 行数2 列数1 列数2 图像数据1 ... 图像数据(i-4)
rows[15:8] rows[7:0] cols[15:8] cols[7:0] ...

光谱数据包:' 指令1''指令2 '数据1~数据i包含了光谱数据的行数rows(高度)、列数cols(宽度)、谱段数bands、以及光谱数据组合方式为高度+宽度+谱段数+光谱数据


i-6=rows \times cols \times bands \times 2

数据1~数据i的分布具体如下:

行数1 行数2 列数1 列数2 谱段1 谱段2 图像数据1 ... 图像数据(i-6)
rows[15:8] rows[7:0] cols[15:8] cols[7:0] bands[15:8] bands[7:0] ...

返回结果数据包:'R''E'数据1~数据i包含了糖度值Brix、颜色占比color、直径long、预估重量weight、缺陷个数num、缺陷面积area、结果图像的行数rows(高度)、列数cols(宽度)、以及结果图像的RGB数据组合方式为糖度值+颜色占比+直径+预估重量+缺陷个数+缺陷面积+高度+宽度+RGB数据


i-16=rows \times cols \times 3

数据1~数据i的分布具体如下:

糖度值2 糖度值1 颜色占比 直径2 直径1 预估重量 缺陷个数1 缺陷个数2 缺陷面积1 缺陷面积2 缺陷面积3 缺陷面积4 行数1 行数2 列数1 列数2 图像数据1 ... 图像数据(i-16)
Brix[15:8] Brix[7:0] color[7:0] long[15:8] long[7:0] weight[7:0] num[15:8] num[7:0] area[31:24] area[23:16] area[15:8] area[7:0] rows[15:8] rows[7:0] cols[15:8] cols[7:0] ...

返回空果数据包KO,不包含数据字段,仅有长度字段+指令字段