文本定位

难度分析:
字幕文字的字体、大小、色彩和透明度等因素影响

 

传统方法有:

字幕定位需要区分字幕区域和背景区域,有效的区分特征包括以下几点:

字幕的颜色、字体较为规整,且与背景有较为明显的颜色差异;
字幕区域的笔画丰富,角点和边缘特征比较明显;
字幕中字符间距固定,排版多沿水平或竖直方向;
同一视频中字幕出现的位置较为固定,且同一段字幕一般会停留若干秒的时间。

基于边缘密度的字幕定位:

首先,对于视频帧灰度图像进行边缘检测,得到边缘图。

然后,在边缘图上分别进行水平和竖直方向的投影分析,通过投影直方图的分布,大致确定字幕的候选区域。如果存在多个候选区域,则根据字幕区域的尺寸和宽高比范围滤除不合理的检测结果。

最后,通过多帧检测结果对比融合,进一步去除不稳定的检测区域。这样,基本可以得到可信的检测结果。

在某些复杂场景下,上述方法检测的区域可能会存在字幕边界检测不准的情况,尤其是垂直与字幕方向的两端边界。这时,可以进一步借助连通域分析的方法,求出字幕所在行区域的连通域,通过连通域的颜色、排列规整性来微调检测结果。

 

简单的应用——车牌识别

python opencv实现机器视觉基础技术https://www.cnblogs.com/ITXiaoAng/p/12593782.html#2%E8%BE%B9%E7%BC%98%E6%8F%90%E5%8F%96

 

字幕切换检测

截取字幕
def tailor(path1,path2,begin,end,step_size):  #截取字幕
    for i in range(begin,end,step_size):
        fname1=path1 % str(i)
        print(fname1)
        img = cv2.imread(fname1)
        print(img.shape)
        cropped = img[500:600, 100:750]  # 裁剪坐标为[y0:y1, x0:x1]
        imgray = cv2.cvtColor(cropped, cv2.COLOR_BGR2GRAY)
        thresh = 200
        ret, binary = cv2.threshold(imgray, thresh, 255, cv2.THRESH_BINARY)  # 输入灰度图,输出二值图
        binary1 = cv2.bitwise_not(binary)  # 取反
        cv2.imwrite(path2 % str(i), binary1)
对字幕进行灰度处理,目的是使截取的字幕更加清晰。

 

深度学习方法:

自然场景文本检测识别技术综述

视觉领域常规物体检测方法(SSD, YOLO, Faster-RCNN等)直接套用于文字检测任务效果并不理想

 

深度学习时代的文字检测与识别技术

这些进展被分成 5 个类别:1)从语义分割和目标检测方法中汲取灵感,2)更简化的 Pipeline,3)处理任意形态文字,4)使用 Attention,5)使用合成数据

更简化的 Pipeline

旷视科技在 CVPR 2017 收录论文《EAST:An Efficient and Accurate Scene Text Detector》提出一种高度简化的 Pipeline 结构。

在精度和速度上都优于传统方法,且在精度和速度质检取得了极佳的平衡。EAST 已成为为行业标准方法,且代码开源,有趣的是,这是由热心网友 @argman 完成的(旷视贡献了部分代码)有兴趣的童鞋可以尝试;如果只想使用不想看源代码,目前 EAST 也作为官方模块,集成到最新版 OpenCV 之中。

你可能感兴趣的:(OCR(文本检测和识别))