4

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

4

5 回答 5

10

我是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。

于 2010-02-01T14:41:22.027 回答
1

我从来没有真正使用过它,但hornetseye看起来不错。这个问题也已经在这里问过

于 2010-01-15T00:52:27.473 回答
0

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

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

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

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

于 2010-01-15T01:29:30.727 回答
0

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

于 2010-01-14T23:02:42.113 回答
0

使用ruby-opencv宝石:

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:.

于 2016-10-10T16:08:06.760 回答