一种基于mask
‑
rcnn识别鱼类状态的检测方法
技术领域
1.本发明涉及图像识别技术领域,尤其涉及一种基于mask
‑
rcnn识别鱼类状态的检测方法。
背景技术:2.在水产养殖业,饲料成本永远是所有投入中最大的项目,优化投喂方案将大大降低成本。附加地,饲料利润率的提升,也可以减少残饵降解产生的毒素,减轻环境和养殖水体的压力,所以现代化的养殖工艺中一个优秀的投喂方案是重中之重。
3.现有技术方案是使用人工投喂养殖,只能靠饲养人员的个人经验和观察料台来投喂饲料。而往往在水产养殖中,养殖生物处在不断的生长过程中,所以需要实时的调整投喂方案,于是需要开发可以识别鱼虾的生长特性,从而实现自动投喂的系统。
4.现有鱼类养殖中还存在以下问题:
5.1、投喂时间无法准确把控:鱼类处在不断的生长过程中,传统的人工养殖方式投喂饲料时间都是固定的,无法根据鱼类的饥饿状态判断何时投喂。
6.2、鱼类死亡无法及时监控:通常鱼类死亡一段时间后会浮出水面,此时氨化作用已经进行一大半,死鱼体内的油脂就已经开始外渗,未能及时发现和处理外渗的油脂就会对水体造成污染。
技术实现要素:7.本发明解决的技术问题:通过k
‑
means算法标签鱼饥饿状态,为准确提供投喂时间提供依据;通过检测鱼白占比标签鱼的死亡,从而准确打捞死鱼提供依据;通过mask
‑
rcnn模型的softmax分类器对鱼饥饿状态和死亡状态准确分类。
8.本发明所采用的技术方案:一种基于mask
‑
rcnn识别鱼类状态的检测方法,包括以下步骤:
9.s1、通过设置在鱼缸上的摄像机采集鱼类视频流数据,从采集到的视频流数据中选取一段数据作为视频数据一,对视频数据一进行灰度化处理、压缩、间隔m1帧选取一个图像数据帧形成样本一;
10.s2、对样本一中选取连续m2帧图像数据进行时空卷积和降采样处理;
11.s3、对样本一的每个图像数据帧赋予一个标签数据一,如果正常行为状态标签为1,异常行为状态为2;
12.s4、再对样本一中的图像数据帧进行灰度化处理、压缩,在压缩后的图像数据帧中,间隔m3帧选取一个图像数据帧形成样本二;
13.s5、将样本二中的每个图像数据帧利用大小为m
×
m像素的滑窗分成t个分块;
14.s6、给每个分块赋予一个标签数据二,当标签数据二的值与所在图像的标签数据一的值相等时,进入下一步;
15.s7、将所有分块融合成一个m
×
m
×
t行、n列的输入矩阵,同时形成一个n行、1列的
标签矩阵;对输入矩阵和标签矩阵求互信息,并求出每m
×
m行的互信息总和,对各互信息总和降序排序;保留互信息总和排序第一的行、n列的矩阵,并按列拆解,对某一列,每m行作为新矩阵的一列,形成m行m列的新矩阵,对每个新矩阵做转置,最终获得n个大小为m
×
m的新分块矩阵;
16.s8、对s7得到的n个互信息最高的新分块矩阵,按每m4帧个连续分块的输入矩阵进行时空卷积和降采样处理,得到m5帧个特征图及对应的标签矩阵;
17.s9、将s8得到的m5帧个特征图与标签矩阵输入mask
‑
rcnn模型的softmax分类器中进行训练;
18.s10、从采集到鱼视频数据中再选取一段数据作为视频数据二(视频数据一和视频数据二不重复),对视频数据二图像数据帧进行灰度化处理,压缩,每隔m6帧选取一个图像数据帧形成测试样本,对测试样本进行时空卷积和降采样处理;
19.s11、将s10测试样本数据输入训练好的mask
‑
rcnn模型,验证mask
‑
rcnn模型的准确性。
20.进一步的,所述s3的异常行为状态包括鱼饥饿状态和死亡状态。
21.进一步的,鱼饥饿状态检测包括:
22.s311、获取鱼体的坐标参数,计算出鱼的特征点坐标;
23.采用opencv库函数cornerharris()对鱼的图像进行检测,获取鱼的特征点坐标;
24.s312、使用坐标系绘制鱼体的特征点图;
25.使用python绘图库函数matplotlib对鱼的特征点进行绘制;
26.s313、使用k
‑
means聚类算法求出聚类块、中心点、密集度参数;
27.求聚类块、中心点计算过程如下:
28.a)从输入的数据点集合中随机选择一个点作为第一个聚类中心μ1;
29.b)对于数据集中的每一个点xi,计算它与已选择的聚类中心中最近聚类中心的距离d(xi)=argmin||xi
‑
μr||^2
……
r=1,2,...k;
30.c)选择下一个新的数据点作为新的聚类中心,选择的原则是:d(x)较大的点,被选取作为聚类中心的概率较大;
31.d)重复b和c直到选择出k个聚类质心;
32.e)利用这k个质心来作为初始化质心去运行标准的k
‑
means算法;
33.求密集度过程:
34.针对每个聚类块中最外侧的点,将其两两相连,计算其覆盖面积s1,然后再选取该聚类最外侧的点,计算其与中心点的距离l,计算以l为半径的圆的面积s2,密集度为s1/s2;
35.从而计算出饥饿程度=密集度
×
聚类块的面积占比;
36.其中,聚类块面积占比=聚类块面积xn/聚类块总面积为x;使用opencv库中的contourarea()函数,计算得到每个聚类块的面积x1,2,3
…
n,对其求和,可得到聚类块总面积x,第n个聚类块的面积占比即为xn/x;
37.s314、按照不同的聚类块进行分类(如a、b、c组),针对每个聚类块进行求中心以及计算点密度操作;
38.s315、对比投喂食前后,鱼食附近聚类块的密集度变化;如果在短时间内(30秒内),密集度显著增大,比如从20%增加至60%,便判断鱼为饥饿状态;
39.进一步的,鱼死亡检测包括:
40.s321、利用python
‑
opencv库对图像数据的鱼特征点坐标对鱼体部分进行roi的区域提取,得到鱼的图像面积y;
41.采用hsv模型进行提取,hsv模型中颜色的参数分别是:色调(h:hue),饱和度(s:saturation),亮度(v:value),对于白色,其hsv参数如下:h:0~180;s:0~30;v:221~255;
42.s322、将图像进行二值化处理、二值化是指将图像过滤为只有黑白两色,便于对鱼白部分的提取;
43.将图像进行直方图均衡化处理,接着使用opencv库中的inrange()函数对图像进行颜色检测,设置hsv的阈值为h:0~180;s:0~30;v:221~255;
44.s323、检测提取图像中鱼白的占比,计算公式为y1/y,例如当鱼白占比大于阈值30%时,则判断为鱼死亡;
45.通过inrange()函数得到二值化图像,使用opencv函数findcontours()提取该图像中的轮廓,接着再使用contourarea()函数便可计算出鱼白的图像面积y1;
46.进一步的,当鱼死亡达到一定数量后,联动检测系统发出警告,检测系统根据鱼缸中的死鱼数达到预警值触发系统告警提示。
47.本发明的有益效果是:
48.1、利用k
‑
means算法准确标签鱼饥饿状态;
49.2、通过检测鱼白占比,准确标签鱼的死亡状态;
50.3、通过mask
‑
rcnn模型的softmax分类器对鱼饥饿状态和死亡状态准确分类。
附图说明
51.图1是本发明基于基于mask
‑
rcnn识别鱼类状态的检测方法流程图;
52.图2是本发明鱼饥饿状态和正常状态的效果对比图。
具体实施方式
53.下面结合附图和实施例对本发明作进一步说明,此图为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成。
54.一种基于基于mask
‑
rcnn识别鱼类状态的检测方法,如图1所示,s1、对采集到的视频流数据中选取一段数据作为视频数据一,对视频数据一进行灰度化处理、压缩、间隔100ms帧选取一个图像数据帧形成样本一;
55.s2、对样本一中选取连续10ms帧图像数据进行时空卷积和降采样处理;
56.s3、对样本一的每个图像数据帧赋予一个标签数据一,如果正常行为状态标签为1,异常行为状态为2;
57.s4、再对样本一中的图像数据帧进行灰度化处理、压缩,在压缩后的图像数据帧中,间隔10ms帧选取一个图像数据帧形成样本二;
58.s15、将样本二中的每个图像数据帧利用大小为256
×
256像素的滑窗分成10个分块;
59.s16、给每个分块赋予一个标签数据二,当标签数据二的值与所在图像的标签数据一的值相,进入下一步;
60.s7、将所有分块融合成一个256
×
256
×
10行、10列的输入矩阵,同时形成一个10行、1列的标签矩阵;对输入矩阵和标签矩阵求互信息,并求出每256
×
256行的互信息总和,对各互信息总和降序排序;保留互信息总和排序第一的行、10列的矩阵,并按列拆解,对某一列,每256行作为新矩阵的每一列,形成256行256列的新矩阵,对每个新矩阵做转置,最终获得10个大小为256
×
256的新分块矩阵;
61.s18、对s7得到的10个互信息最高的新分块矩阵,按每10ms帧个连续分块的输入矩阵进行时空卷积和降采样处理,得到10ms帧个特征图及对应的标签矩阵;
62.s19、将s18得到的10ms帧个特征图与标签矩阵输入mask
‑
rcnn模型的softmax分类器中进行训练;
63.s20、从采集到鱼视频数据中再选取一段数据作为视频数据二(视频数据一和视频数据二不重复),对视频数据二图像数据帧进行灰度化处理,压缩,每隔10ms帧选取一个图像数据帧形成测试样本,对测试样本进行时空卷积和降采样处理;
64.s21、将s20测试样本数据输入训练好的mask
‑
rcnn模型,验证mask
‑
rcnn模型的准确性
65.进一步的,鱼饥饿状态检测包括:
66.s311、获取鱼体的坐标参数,计算出鱼的特征点坐标;
67.s312、使用坐标系绘制出这些点;
68.s313、使用k
‑
means聚类算法求出聚类块、中心点、密集度参数;
69.求聚类块、中心点:
70.a)从输入的数据点集合中随机选择一个点作为第一个聚类中心μ1;
71.b)对于数据集中的每一个点xi,计算它与已选择的聚类中心中最近聚类中心的距离d(xi)=argmin||xi
‑
μr||^2
……
r=1,2,...k;
72.s314、按照不同的聚类块进行分类(如a、b、c组),针对每个聚类块进行求中心以及计算点密度操作;
73.s315、对比投喂食前后,鱼食附近聚类块的密集度变化;指如果在短时间内,密集度由20%增加60%,便判断鱼为饥饿状态;
74.如图2所示为十四条鱼正常状态和饥饿状态下的特征点坐标图,图2的右图中左下角鱼群密集度明显增大,鱼为饥饿状态。
75.进一步的,鱼死亡检测包括:
76.s321、利用python
‑
opencv库对图像数据的鱼特征点坐标对鱼体部分进行roi的区域提取;
77.s322、将图像进行二值化处理、二值化是指将图像过滤为只有黑白两色,便于对鱼白部分的提取;
78.s323、检测提取图像中鱼白的占比,当鱼白占比大于30%,则判断为鱼死亡。
79.本发明的有益效果:利用图像识别和mask
‑
rcnn算法准确计算鱼的长度,并根据长度计算出重量,从而准确计算出饲料投喂量。利用k
‑
means算法,准确标签鱼饥饿状态;通过检测鱼白占比准确标签鱼的死亡状态。
80.以上述依据本发明的理想实施例为启示,通过上述的说明内容,相关工作人员完全可以在不偏离本项发明技术思想的范围内,进行多样的变更以及修改。本项发明的技术
性范围并不局限于说明书上的内容,必须要根据权利要求范围来确定其技术性范围。