简体中文 | English
-
支持字幕语言:中文 | 英文 | 日文 (其他可以支持的语言参见:支持语种列表)
-
想法源自 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)
- 参数化配置相关参数,包括
rapid_ocr和rapid_videocr两部分,更加灵活
- 添加交互式确定二值化字幕图像阈值操作,仅仅支持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)
常见问题 FAQ
- (ICCV 2021) STRIVE: Scene Text Replacement In videos.
- 使用时空转换网络将所有帧中的文字矫正
- 使用图片中文字编辑的方法替换单一参考帧中的文字,并且使用时空转换网络还原矫正的文字
- 提供了一个视频文本编辑的数据集
- 【NeurIPS2021】A Bilingual, OpenWorld Video Text Dataset and End-to-end Video Text Spotter with Transformer | 博客解读
- 【ACM MM 2019】You only recognize once: Towards fast video text spotting
- 基于视频文本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 |
-
下载RapidOCR使用的模型和字典文件所在目录
rapidocr(百度网盘 | Google Drive) -
将所下载的
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 -
搭建运行环境
- 推荐Windows,整个项目目前只在Windows下测试过
- 安装相应的包
$ cd RapidVideOCR $ pip install -r requirements.txt -i https://pypi.douban.com/simple/ - 也可以在Google Colab下快速查看运行Demo。
-
运行
- 代码
$ cd RapidVideOCR $ python main.py - 当操作系统是Windows和参数
is_select_threshold=True时,可以交互式选择二值化阈值 - 输出日志如下:
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.
- 代码
-
可以去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' |

