| .idea | ||
| 20240410RGBtest1 | ||
| 20240419RGBtest2 | ||
| 20240529RGBtest3 | ||
| 20240627test4 | ||
| spectrum | ||
| .gitignore | ||
| README.md | ||
泉州多品类果蔬智能分选项目(番茄&百香果)
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 | 返回空果 |
数据
预热数据包:‘Y’‘R’,不包含数据字段,仅有长度字段+指令字段
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] | ... |
返回空果数据包:‘K’‘O’,不包含数据字段,仅有长度字段+指令字段