概要
本文主要总结了识别检测类系统该如何做,其步骤有哪些
这里以火焰识别系统为列来说明
前期准备
首先是完成数据采集与标准的工作,这里推荐使用精灵标注助手
其次是训练模型的选取,一般识别系统都是基于图片或者视频来实现的,所以模型的般都是通过对图像进行卷积操作进行特征提取。现在用的比较多的神经网络框架有SSD、YOLO、VGG、Fasrer R-CNN等,在后面会详细介绍
最后都准备好后就可以进行模型训练了,因为标注的文件读取需要按照一定规则,pytroch中需要重写utils文件中data的Dataset类,在U-Net语义分割中,小编详细阐述过。训练后就可以得到系统的识别模型了
识别目标的可疑区域提取
该部分就到如何识别了,所有的识别检测类系统都是通过寻找识别目标的可疑区域,再通过机器学习或者深度学习的方法对可疑区域进行识别,筛选出识别目标所在的区域。提取可疑区域主流方法有以下几种:规则限定、神经网络、机器学习
特征提取
特征提取主要是通过计算特征,找到大概的图片位置,如火焰检测可以通过火焰的颜色特征确定火焰的大概位置,小编共实验了多个颜色空间
RGB颜色空间规则如下:
def rule_rgb(image):
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
r = image[:, :, 0]
g = image[:, :, 1]
b = image[:, :, 2]
# r_avg = np.mean(r)
g_avg = np.mean(g)
tmp1 = cv2.compare(r, ColorSpace.redThre, cv2.CMP_GT)
tmp2 = cv2.compare(g, g_avg, cv2.CMP_GT)
tmp_1 = cv2.multiply(tmp1, tmp2)
tmp1 = cv2.compare(r, g, cv2.CMP_GT)
tmp2 = cv2.compare(g, b, cv2.CMP_GT)
tmp_2 = cv2.multiply(tmp1, tmp2)
tmp = cv2.multiply(tmp_1, tmp_2)
empty_img = cv2.convertScaleAbs(tmp, 1.0 / 255)
return empty_img
效果如图: