【发布时间】:2010-01-14 22:30:17
【问题描述】:
如何在 ruby 中从网络摄像头拍摄快照?我知道网络摄像头设备位于 /dev/video0,但如何从中获取图片?
【问题讨论】:
如何在 ruby 中从网络摄像头拍摄快照?我知道网络摄像头设备位于 /dev/video0,但如何从中获取图片?
【问题讨论】:
我是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 看起来不错。这个问题也有人问过here
【讨论】:
由于您使用的是 Linux,请尝试videodog。这是一个小程序,它做一件事并且做得很好:从 /dev/video0 设备捕获帧。从那时起,您可以使用任何您想要处理从 videodog 获得的 JPEG 图像的 Ruby 技术。
【讨论】:
Video4Linux API 涉及将特殊的ioctls 发送到/dev/video* 设备,数据采用打包结构;用 Ruby 做这件事并不容易。 (C 语言也没有那么有趣。)
ruby-v4l 是一个扩展库,用于使用 Video4Linux 在 Ruby 中捕获图片。
Orphaned 在 Debian 中,因为它的维护者自 2005 年以来一直没有活跃,所以如果它不起作用,我认为你将无法获得太多支持。
更现代的解决方案可能是为 Ruby 创建正确的 libv4l 绑定。但是,我不知道目前有这方面的工作。
【讨论】:
使用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。
【讨论】: