从Ruby中的网络摄像头抓取快照

slmsl1lt  于 2022-10-04  发布在  Ruby
关注(0)|答案(6)|浏览(177)

我怎样才能用Ruby的网络摄像头拍摄快照呢?我知道网络摄像头设备在/dev/Video0上,但我如何从它获得照片?

gorkyyrv

gorkyyrv1#

我是Hornetseye的开发者。您可以使用HornetsEye的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、GREAD、RGB24。请注意,目前不支持其他颜色空间,如MJPEG。

n7taea2i

n7taea2i2#

我从来没有真正用过它,但hornetseye看起来很好。这个问题在这里也已经被问过了

6jygbczu

6jygbczu3#

因为您使用的是Linux,所以可以尝试使用videodog。这是一个小程序,它只做一件事,而且做得很好:从您的/dev/Video0设备捕获一帧。在这一点上,您可以使用任何Ruby技术来处理从VIDEODOG获得的JPEG图像。

wribegjk

wribegjk4#

Video4Linux API涉及向/dev/video*设备发送特殊的ioctl,数据采用打包结构;这不是Ruby容易做到的事情。(对于C语言来说,这也不是很有趣。)
ruby-v4l是一个扩展库,用于使用Video4Linux捕获Ruby中的图片。

Orphaned在Debian中,因为它的维护者自2005年以来一直不活跃,所以如果它不能工作,我认为你不会得到太多的支持。

更现代的解决方案可能是为Ruby创建适当的libv4l绑定。然而,我不知道目前有任何关于这方面的工作。

u1ehiz5o

u1ehiz5o5#

使用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

5rgfhyps

5rgfhyps6#

我已经为新的OpenCV编写了一个小的 Package 器-gem,因为Ruby-OpenCV停留在OpenCV2上,而OpenCV2在一些现代系统上是不可用的。只要安装了OpenCV,它应该可以在MacOS和Linux上运行。

这就是:https://github.com/khasinski/framegrabber

在您的情况下,它将是:

Framegrabber.open(0) # 0 is the device id
image = Framegrabber.grab_image # Gets you a Magick::Image object
Framegrabber.release # turns off the webcam

相关问题