【问题标题】:Grabbing snapshots from webcams in ruby从 ruby​​ 中的网络摄像头抓取快照
【发布时间】:2010-01-14 22:30:17
【问题描述】:

如何在 ruby​​ 中从网络摄像头拍摄快照?我知道网络摄像头设备位于 /dev/video0,但如何从中获取图片?

【问题讨论】:

    标签: ruby linux webcam


    【解决方案1】:

    我是Hornetseye 的开发者。您可以使用 HornetEye 的 V4L2 接口捕获图像,如下所示。

    require 'rubygems'
    require 'hornetseye_v4l2'
    require 'hornetseye_xorg'
    require 'hornetseye_rmagick'
    include Hornetseye
    input = V4L2Input.new '/dev/video0'
    img = X11Display.show { input.read }
    img.to_ubytergb.save_ubytergb 'test.png'
    

    目前支持的色彩空间有 UYVY、YUYV、YUV420、GREY、RGB24。请注意,目前不支持其他色彩空间,例如 MJPEG。

    【讨论】:

    • 宝石是hornetseye-v4l2
    • 但这在 macOS 上不起作用,OpenCV 示例有效:stackoverflow.com/a/39938139/407213
    • @Dorian 是的,没错。它仅适用于 GNU/Linux。
    • 这是一个非常有趣的项目。当我看到这样的努力时,我希望 ruby​​ 炒作火车仍在运行。
    • @nurettin 谢谢
    【解决方案2】:

    我从未真正使用过它,但hornetseye 看起来不错。这个问题也有人问过here

    【讨论】:

    • 我一直在尝试使用hornetseye,但它似乎并没有完全奏效。
    【解决方案3】:

    由于您使用的是 Linux,请尝试videodog。这是一个小程序,它做一件事并且做得很好:从 /dev/video0 设备捕获帧。从那时起,您可以使用任何您想要处理从 videodog 获得的 JPEG 图像的 Ruby 技术。

    【讨论】:

      【解决方案4】:

      Video4Linux API 涉及将特殊的ioctls 发送到/dev/video* 设备,数据采用打包结构;用 Ruby 做这件事并不容易。 (C 语言也没有那么有趣。)

      ruby-v4l 是一个扩展库,用于使用 Video4Linux 在 Ruby 中捕获图片。

      Orphaned 在 Debian 中,因为它的维护者自 2005 年以来一直没有活跃,所以如果它不起作用,我认为你将无法获得太多支持。

      更现代的解决方案可能是为 Ruby 创建正确的 libv4l 绑定。但是,我不知道目前有这方面的工作。

      【讨论】:

        【解决方案5】:

        使用ruby-opencv gem:

        require "opencv"
        
        capture = OpenCV::CvCapture.open
        sleep 1 # Warming up the webcam
        capture.query.save("image.jpg")
        capture.close
        

        在 macOS 上安装 OpenCV:brew install homebrew/science/opencv --HEAD

        【讨论】:

          猜你喜欢
          • 2017-12-25
          • 1970-01-01
          • 2010-11-07
          • 2013-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多