Skip to content

juniperrock/RapidVideOCR

 
 

Repository files navigation



简体中文 | English

Open in Colab

  • 支持字幕语言:中文 | 英文 | 日文 (其他可以支持的语言参见:支持语种列表)

  • 想法源自 videocr

  • 可加入QQ群:706807542

  • 更快更准确地提取内嵌在视频的字幕,并提供txt|SRT|docx三种格式

    • 更快
      • 采用Decord作为读取视频的库,更快;对于整个输入的视频,并不全部提取,因为存在大量重复字幕内容;
      • 这里采用预先找到出现不同字幕的关键帧,再送入OCR部分,因此更快
    • 更准
      • 整个项目完全为全离线CPU运行,OCR部分采用的是RapidOCR,模型均来自PaddleOCR
      • 当然也可以在GPU运行,只要根据机器配置,安装对应版本的onnxruntime-gpu,即可自动在英伟达显卡上运行。具体教程参见:onnxruntime-gpu版推理配置
    • 更方便
      • 采用大小仅为2M左右的ONNXRuntime推理引擎,不安装PaddlePaddle框架,部署更加方便
  • 🐱如果想要识别纯英文、日文、韩文等字幕,可以在config_ocr.yaml中更改对应模型文件即可。

    • 纯英文模型
      Rec:
          module_name: ch_ppocr_v3_rec
          class_name: TextRecognizer
          model_path: resources/rapid_ocr/models/en_number_mobile_v2.0_rec_infer.onnx
    • 日文模型
      Rec:
          module_name: ch_ppocr_v3_rec
          class_name: TextRecognizer
          model_path: resources/rapid_ocr/models/japan_rec_crnn.onnx

仓库分支说明

  • add_remove_bg_module:
    • 基于图像分割UNet算法来去除字幕图像背景图,只剩下文字内容,训练对应代码为pytorch-unet
    • 没有并入主仓库原因:模型较大,处理速度较慢,同时泛化性能不是太好,有提升空间,可自行探索。
  • add_asr_module:
    • 推理代码来源:RapidASR
    • 没有并入主仓库原因:处理速度较慢,配置环境复杂,效果较差,有提升空间,可自行探索。

更新日志(more

✨2022-06-26 update:

  • 参数化配置相关参数,包括rapid_ocrrapid_videocr两部分,更加灵活

🌼2022-05-08 update:

  • 添加交互式确定二值化字幕图像阈值操作,仅仅支持Windows系统,可以通过is_select_threshold=True来使用
  • 优化代码

整体框架

flowchart LR
	subgraph Step
	direction TB
	B(1.Read each frame) --> C(2.Obtain the key frame) --> D(3.RapidOCR) --> E(4.Merge duplicate frames) --> F(5.Convert)
	end
	
	A[/Video file/] --> Step --> M(Output) --> G{Which format}
    G --> H(SRT) & I(Txt) & J(Word)

Loading

常见问题 FAQ

视频OCR动态

未来的应用场景探索

  • 基于视频文本OCR的视频内容理解,结合图像特征+图像中文本特征
  • 视频字幕自动翻译
  • 基于视频文本特征的视频检索

耗时基准

配置 测试MP4 总帧数 每帧大小 耗时(s)
Intel(R) Core(TM) i7-6700 CPU @3.40GHz 3.41 GHz assets/test_video/2.mp4 71 1920x800 4.681s
Intel(R) Core(TM) i5-4210M CPU @2.60GHz 2.59 GHz assets/test_video/2.mp4 71 1920x800 6.832s

使用步骤

  1. 下载RapidOCR使用的模型和字典文件所在目录rapidocr(百度网盘 | Google Drive)

  2. 将所下载的rapid_ocr目录放到当前resources下,具体目录结构如下:

    resources/
    └── rapid_ocr
       └── models
           ├── ch_PP-OCRv3_rec_infer.onnx
           ├── ch_ppocr_mobile_v2.0_cls_infer.onnx
           └── ch_PP-OCRv3_det_infer.onnx
    
  3. 搭建运行环境

    • 推荐Windows,整个项目目前只在Windows下测试过
    • 安装相应的包
      $ cd RapidVideOCR
      $ pip install -r requirements.txt -i https://pypi.douban.com/simple/
    • 也可以在Google Colab下快速查看运行Demo。
  4. 运行

    • 代码
      $ cd RapidVideOCR
      $ python main.py
    • 当操作系统是Windows和参数is_select_threshold=True时,可以交互式选择二值化阈值
      • 左右滑动滑块,使得下面图中文字清晰显示,按Enter退出,需要选择三次
      • 示例: interactive_select_threshold
    • 输出日志如下:
      Loading assets/test_video/2.mp4
      Get the key frame: 100%|██████| 71/71 [00:03<00:00, 23.46it/s]
      Extract content: 100%|██████| 4/4 [00:03<00:00,  1.32it/s]
      The srt has been saved in the assets\test_video\2.srt.
      The txt has been saved in the assets\test_video\2.txt.
      The docx has been saved in the assets\test_video\2.docx.
      
  5. 可以去video所在目录查看输出的文件

config_videocr.yaml中相关参数

参数名称 取值范围 含义
batch_size [1, all_frames] 获取关键帧时,批量比较的batch大小,理论上,越大越快
is_dilate bool 是否腐蚀字幕所在背景图像
is_select_threshold bool 是否交互式选择二值化值
subtitle_height default:None 字幕文本的高度,默认自动获取
error_num [0, 1], default:0.005 值越小,两张图之间差异点会更敏感
output_format ['txt', 'srt', 'docx', 'all'] 输出最终字幕文件,all前面三个格式都输出
time_start 开始提取字幕的起始时间点 开始提取字幕的起始时间点, 示例:'00:00:00'
time_end 开始提取字幕的起始时间点 需要大于time_start-1表示到最后, 示例:'-1'

About

视频硬字幕提取,自动生成对应srt和带有关键帧的docx文件。采用OCR技术,离线即可运行,,更快更准更方便

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 100.0%