我已经使用了Google的Vision OCR,它非常准确。我想知道我是否可以在视频文件或视频流上进行OCR。说,我有一些监控视频,我想在整个视频中获取所有文字。在谷歌的视频智能API中,我只能获得标签,我猜测它正在使用Google Vision的标签检测API。我认为OCR在每一帧视频上可能都会遇到挑战,但仍然想尝试开始讨论如何做到这一点。可能没有一个完美的解决方案,但即使我们获得了50%,它总比没有好。
答案 0 :(得分:1)
这是我做的:
访问此网站下载此样本免费视频: https://www.videvo.net/video/people-walking-past-the-911-memorial-sign-in-new-york/5283/
下载并安装VLC视频播放器
按照本教程中的步骤从视频中提取图像:
一个。转到工具 - >喜好。在左下方的cofner中,单击单选按钮“All”。
湾单击左侧的视频类别以展开它。再次点击“过滤器”以展开它。
℃。选择“场景过滤器”并选择设置(参见下图)。
d。单击过滤器类别,然后选中“场景视频过滤器”复选框(参见下图)
即点击右下角的“保存”后,打开您下载的视频并播放。图像将自动保存。
更多详情here。
转到此CLOUD VISION API页面,您可以拖放任何生成的图片,以查看API功能的示例。
答案 1 :(得分:1)
以下是使用Google Cloud Vision API制作视频的FFmpeg + Python方法:
使用FFmpeg:
将视频中的帧提取到frames_path
目录
import os
import subprocess
def extract_frames_from_video(video_path, frames_path):
subprocess.call("ffmpeg -r 1 -i {video_path} -r 1 {out_path}".format(
video_path=video_path,
out_path=os.path.join(frames_path, "frame_%06d.png")), shell=True)
为提取的帧调用Vision API。
如果要突出显示图像中的检测项,然后从处理过的帧中重建视频,可以使用以下方法:
从框架中创建无声视频:
def convert_frames_to_video(frames_path, output_video_path, fps):
subprocess.call(
"ffmpeg -r {frame_rate} -f image2 "
"-i {frames_path} -vcodec libx264 -crf {quality} -pix_fmt yuv420p "
"{out_path}".format(
frame_rate=fps,
frames_path=os.path.join(frames_path, "frame_%06d.png"),
quality=15, # Lower is better
out_path=output_video_path), shell=True)
将输入视频中的声音添加到最终输出视频中:
def add_sound_from_video_to_video(sound_video_path, soundless_video_path,
output_video_path):
subprocess.call(
"ffmpeg "
"-i {video_path_without_audio} "
"-i {video_path_with_audio} "
"-c copy -map 0:0 -map 1:1 -shortest {output_video_path}".format(
video_path_without_audio=soundless_video_path,
video_path_with_audio=sound_video_path,
output_video_path=output_video_path), shell=True)
Here是我为面部检测编程的整个管道。
答案 2 :(得分:0)
现在,Google Cloud Video Intelligence API为视频提供了OCR。它汇总了来自多个帧的检测,与单帧OCR检测相比,它提供了更一致的结果。您可以在https://cloud.google.com/video-intelligence/docs/text-detection中检查该功能。