基于视频的火焰的检测
如果通过采集监控摄像头的画面,监控广大区域,发现着火区域,能够快速报警的话,就可以有效提高监控的效果,提早报警,大大减少财产损失和人员伤亡.
我们视觉上发现火灾的途径有2个:
- 通过观察火焰,及时发现火灾.
- 通过观察烟雾,及时发现火情.
我们今天就对火焰的视觉检测做个简单的实验.
火焰检测的算法
一般情况下火焰的颜色都是明亮的红色.采用颜色过滤的方法,增加一个高低的过滤掩码层,就可以把火焰从图片中单独过滤出来,这个方法比简单,也适用于对特定颜色物体的跟踪.
一般是这样处理的:
- 采集图像
- 把BGR颜色空间转换成HSV空间
- 定义高通和低通的滤波
- 生产过滤的掩码与图像运算
- 最终生成过滤后的火焰图像
import cv2
import numpy as np
video_file = "test.mov"
video = cv2.VideoCapture(video_file)
while True:
(grabbed, frame) = video.read()
if not grabbed:
break
blur = cv2.GaussianBlur(frame, (21, 21), 0)
hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV)
lower = [18, 50, 50]
upper = [35, 255, 255]
lower = np.array(lower, dtype="uint8")
upper = np.array(upper, dtype="uint8")
mask = cv2.inRange(hsv, lower, upper)
output = cv2.bitwise_and(frame, hsv, mask=mask)
cv2.imshow("output", output)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
本次代码测试获得的图像只是过滤其他背景或火焰的图像,当然在理想条件下可以检测火焰.
可是在实际的过程中,灯光或火光的映射或其他橘红色的物体反射都可以透过过滤显示出来,使得火焰的检测准确性大大降低.
考虑的我们人类判断火焰的经验还是靠形状和颜色的特征来判断,所以最终的算法还是需要深度学习模型来处理,只是用上火焰的过滤算法,让火焰的特征更加明显,使得深度学习处理起来更加精确和快速.
下一步我们将把火焰的图像通过过滤后形成特征图像,作为训练集,真正做一个火焰检测模型.