【问题标题】:Can OCR be performed on a video using Google Cloud Vision or Video intelligence API?是否可以使用 Google Cloud Vision 或 Video Intelligence API 对视频执行 OCR?
【发布时间】:2017-12-11 09:07:26
【问题描述】:

我经常使用 Google 的 Vision OCR,它确实非常准确。我想知道是否可以对视频文件或视频流进行 OCR。比如说,我有一些监控视频,我想获取整个视频中的所有文本。在谷歌的视频智能 API 中,我只能获取标签,我猜这是使用谷歌视觉的标签检测 API。我认为 OCR 在视频的每一帧上都可能存在挑战,但仍然想尝试开始讨论如何完成它。可能没有完美的解决方案,但即使我们得到了 50%,也总比没有好。

【问题讨论】:

  • 如果我们首先通过连接在不同帧中捕获的部分文本来重建包含文本的表面,则将获得最佳结果。然后结合同一表面段的几个镜头,我们可以摆脱 mpeg 伪影等。
  • @Nakilon 你能详细说明一下吗?我只得到了一部分。如何连接在不同帧中捕获的部分?我只能获取包含部分的文本。但是跟踪!?
  • 您需要为此找到解决方案。 Google 不提供此类服务。
  • 好的。会试一试的。

标签: video google-cloud-platform ocr google-cloud-vision


【解决方案1】:

这是我所做的:

  1. 访问此网站并免费下载此示例视频: https://www.videvo.net/video/people-walking-past-the-911-memorial-sign-in-new-york/5283/

  2. 下载并安装VLC视频播放器

  3. 按照本教程中的步骤从视频中提取图像:

    一个。转到工具-> 首选项。在左下角单击单选按钮“全部”。

    b.单击左侧的视频类别以将其展开。再次单击“过滤器”以展开它。

    c。选择“场景滤镜”并选择设置(见下图)。

    d。单击过滤器类别并选择“场景视频过滤器”复选框(见下图)

    e。点击右下角的“保存”后,打开下载的视频并播放。图片会自动保存。

    更多详情here.

  4. 转到此 CLOUD VISION API 页面,您可以拖放任何生成的图像以查看 API 功能示例。

【讨论】:

    【解决方案2】:

    这是使用 Google Cloud Vision API 制作视频的 FFmpeg + Python 方法:

    1. 使用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)
      
    2. 为提取的帧调用 Vision API。


    如果你想突出图像中的检测,然后从处理后的帧中重建视频,可以使用以下方法:

    1. 从帧中创建无声视频:

      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)
      
    2. 将输入视频中的声音添加到最终输出视频中:

      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 是我为人脸检测编程的整个管道。

    【讨论】:

      【解决方案3】:

      目前,Google Cloud Video Intelligence API 为视频提供 OCR。它聚合了来自多个帧的检测,与单帧 OCR 检测相比,它提供了更一致的结果。您可以在https://cloud.google.com/video-intelligence/docs/text-detection 中查看该功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-09
        • 2019-12-03
        • 2023-03-02
        • 1970-01-01
        • 2020-10-22
        • 1970-01-01
        相关资源
        最近更新 更多