【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
从目前发展的情况来看,视频处理会慢慢变成一种主流趋势。这里面的原因很多,比如说现在嵌入式soc的算力越来越强、获取图像的手段越来越方便、视频相比较图像信息更丰富等等的。不管怎么说,视频相比较图像而言,除了对soc的算力有一定要求之外,几乎没有什么缺点。就算是处理单张图片的信息,我们也可以从视频当中挑选质量最好的那一张来处理,这样对采集设备本身的要求也会降低很多。
1、视频图像信息更多
视频,简单一点说,就可以看成是流动的图像。如果视频没有明显的卡顿,那么只需要1秒钟的帧率超过24即可。所以对于采集设备来说,完全可以从24帧的数据当中挑选质量最好的那一张来处理。因为光源、光源控制、镜头、曝光时间,这些因素都聚集到一起,有的时候需要连续拍摄才能获取到质量最好的那一张图片,某种意义上说和摄影是一样的。
2、更多的采集设备
和之前相比较,现在的图像采集设备更多,比如说手机、pad、电脑、随身记录仪、工业摄像头设备、安防设备等等。这些设备都有一个共同的特点,那就是既支持图像的拍摄,也支持网络传输。所以,对于上层处理软件来说,基本上只要一根网线,或者有一个WiFi设备,就可以很顺利地把这些设备上的图像拿到,后续的处理基本上就和这些设备没啥关系了。
3、更强的芯片性能
这里说的处理设备有两种,一种是pc,一种是soc本身。pc越来越强,core越来越多,频率也越来越高,这些都毋庸置疑的。而嵌入式soc越来越强,cpu的频率普遍达到了2G Hz,而且很多高端的soc都集成了isp、gpu、npu这些复杂的ip core,处理图像更加地得心应手。这使得之前只能在pc端实现的功能,现在同样可以放到嵌入式终端实现,一下子增加了很多的应用场景,扩展了原先产品的种类和类型。
4、更安全的处理算法
之前图像处理的时候,由于只有一张图像,整个安全措施还是不太高的。比如大家取款的时候,需要进行人脸识别认证,如果仅仅是一张图片,那么作假的成本其实比较低,比如说拿出一张素描来代替人脸。但是如果是视频认证,就需要进行摇头、眨眼、前进、后退等动作,这样安全性会一下子高很多,这是之前单纯图像处理没有办法比拟的。所以,从安全性的角度来说,视频比图像处理也更加地合适。
5、视频在opencv上的处理
对于opencv来说,不管是图像处理,还是视频处理,这方面的差距并不会很大。因为,对于它来说,图像的采集也是通过一个frame、一个frame去处理的,所以这里提供了一个最简单的opencv视频采集脚本,大家可以回头自己动手测试下,
# -*- coding: utf-8 -*-
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
print("Unable to read frame.")
break
cv2.imshow('Camera', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
6、视频处理的挑战
对于算法来说,视频处理和图像处理其实差别不大。不过视频中的信息,前后frame一般有一定的关联性,所以算法上还是存在优化空间的。但是对于单张图片而言,这里面就会存在一个问题,那就是单张图片处理的时间必须要尽可能地少,通常来说,必须要少于40ms,即保持画面连续播放的最低要求。或者换一种说法,单张图片的时间可以是40ms以上,但是pipeline结果输出的时间必须要小于40ms。因为一旦大于这个时间,很容易发生卡顿的现象,客户使用体验极差。记得之前在做车载设备时、也就是adas的dms系统的时候,如果单张图像处理时间过长,卡顿非常明显,一般来说,客户都是很难认可和接受的。