在图片社交、短视频等行业,用户在导入图片、视频的时候,偶尔会导入一些横屏拍摄的视频,使得图片、视频在呈现给用户观看的时候,是旋转了90度或者270度的图片、视频(180度一般极其少见),从而给用户造成不好的体验,特别是以瀑布流方式展示的app。这类视频,由于导入的时候,拿不到原始的拍摄标识信息,从而无法直接取到图像、视频是否旋转的信息,而必须依赖视觉识别的方式,去判断图像、视频是否旋转。
对图像朝向判断问题,学术上研究得比较少,已有的论文主要还是以深度学习分类的方式去检测,比如:
- Automatic Photo Orientation Detection with Convolutional Neural Networks
- Why My Photos Look Sideways or Upside Down? Detecting Canonical Orientation of Images Using Convolutional Neural Networks
对图像Orientation Detection的难点主要在于:
- 当图片、视频中的物体有倾斜,但是图片、视频本身是正常放置的,容易造成误检。比如拍摄是一张大脸,但大脸有倾斜,或者拍摄的是一个床上斜躺着的宝宝;
- 当拍摄角度是向下或者向上的时,这类视频容易造成误分;比如拍摄天空、拍摄天花板等;
所以图像Orientation Detection,在保证召回较好的前提下,准确率要做得非常好(准确率99%+以上,便于机器自动处理)还是很不容易的,特别是针对单张图片检测更是难上加难。不过,如果是短视频行业,由于短视频行业自身的一些特性,使得这个问题还是可以比较好的解决的。在短视频行业,做图像Orientation Detection可以利用的优势主要有三点:
- 数据优势。训练数据不用标注,直接使用app自带的相机拍摄的视频,这些视频可以认为是0度放置的,通过此种方式,可以获取到无穷无尽的标签噪声非常少的训练数据;
- 多帧检测优势。利用多帧检测的方式,可以极大地提升检测的准确率;
- Orientation Detection类型比较固定。通常主要是0度、90度和270度,180度几乎不会出现,也就是用户导入视频进来的时候,如果有旋转,主要是横屏,几乎不会存在把视频上下反转一下的情况;
有了0度的训练数据,其他角度的数据,比如90度、270度(180度可以丢弃不检测,因为出现这种导入情况的极少)可以通过0度变换一下便可得到。有了0度、90度、270度的训练数据,训练可以采用CNN分类模型直接分类即可。
检测准确率提升
分类模型训练好了后,如果只检测一帧,准确率往往是不够的,比如上面列举的两种情况,就极易以非常高的概率导致误分,为了提升检测的准确率,并保持还不错的召回率,可以通过联合使用下面两种方式使得最终的检测准确率达到99%+,这两种方式分别为:
- 检测多帧。比如一个视频检测3帧;
- 设置的检测概率相对高一点。比如检测3帧,两帧朝向一致,且两帧最小概率大于0.9的,则判断为旋转,旋转方向为两帧朝向的方向;
通过这样两种方式,可以在保持召回还不错的情况下,获得较高的准确率,最终达到机器自动处理的目的。
总结
视频朝向检测有自身多帧的优势,如果是图片社交app,单张图片要达到非常高的准确率是极其困难的(在保持一定召回情况下)。