@joepie91/v4l2camera
v1.0.5
Published
Capturing images from USB(UVC) webcam on linux machines (a fork that fixes the time.h bug)
Downloads
4
Maintainers
Readme
node-v4l2camera
IMPORTANT NOTE: This is a fork of the original node-v4l2camera
module. It exists only to fix bellbind/node-v4l2camera#30, which hasn't been fixed upstream yet. This fork will not receive any further updates, once the upstream repository has fixed the issue!
Capturing images from USB(UVC) webcam on linux machines.
Requirements
- node >= 4.x
- video4linux2 headers
- c and c++ compiler with
-std=c11
and-std=c++14
- gcc >= 4.9
Install
On linux machines:
npm install @joepie91/v4l2camera
- package details: https://npmjs.org/package/v4l2camera
Usage
var v4l2camera = require("v4l2camera");
var cam = new v4l2camera.Camera("/dev/video0");
if (cam.configGet().formatName !== "MJPG") {
console.log("NOTICE: MJPG camera required");
process.exit(1);
}
cam.start();
cam.capture(function (success) {
var frame = cam.frameRaw();
require("fs").createWriteStream("result.jpg").end(Buffer(frame));
cam.stop();
});
For more detail see: examples/*.js (required "pngjs" modules)
API
Initializing and Configuration API
var cam = new v4l2camera.Camera(device)
device
: e.g."/dev/video0"
cam.formats
: Array of available frame formatsvar format = cam.formats[n]
format.formatName
: Name of pixel format. e.g."YUYV"
,"MJPG"
format.format
: ID number of pixel formatformat.width
: Frame widthformat.height
: Frame heightformat.interval.numerator
andformat.interval.denominator
: Capturing interval pernumerator/denominator
seconds (e.g. 30fps is 1/30)
cam.configSet(format)
: Set capturewidth
,height
,interval
pernumerator/denominator
sec if the members exist in theformat
objectcam.configGet()
: Get aformat
object of current config
Capturing API (control flow)
cam.start()
cam.stop(afterStoped)
- call re-
config(format)
or re-start()
inafterStoped()
callback
- call re-
cam.capture(afterCaptured)
: Do cache a current captured frame- use
cam.frameRaw()
inafterCaptured(true)
callback
- use
Capturing API (frame access)
cam.frameRaw()
: Get the cached raw frame asUint8Array
(YUYU frame is array of YUYV..., MJPG frame is single JPEG compressed data)cam.toYUYV()
: Get the cached frame asUint8Array
of pixels YUYVYUYV... (will be deprecated method)cam.toRGB()
: Get the cached frame asUint8Array
of pixels RGBRGB... (will be deprecated method)
Capturing API (camera frame info)
cam.device
: the device file name e.g."/dev/video0"
cam.width
: pixel width of the cameracam.height
: pixel height of the camera
Control API
cam.controls
: Array of the control informationcam.controlGet(id)
: Get int value of the control of theid
(id is one of cam.controls[n].id)cam.controlSet(id, value)
: Set int value of the control of theid
var control = cam.controls[n]
: Control speccontrol.id
: Controlid
for controlGet and controlSetcontrol.name
: Control name stringcontrol.type
:"int"
,"bool"
,"button"
,"menu"
or other typescontrol.max
,control.min
,control.step
: value should bemin <= v
andv <= max
and(v - min) % step === 0
control.default
: default value of the controlcontrol.flags
: Several bool flags of the controlscontrol.menu
: Array of items. A control value is the index of the menu item when type is"menu"
.
Build for Development
On linux machines:
cd myproject
mkdir -p node_modules
cd node_modules
git clone https://github.com/bellbind/node-v4l2camera.git v4l2camera
cd v4l2camera
npm install
cd ../..
"build/Release/v4l2camera.node" is exist after the build.
Tested Environments
- Ubuntu wily armhf on BeagleBone Black with USB Buffalo BSW13K10H
- Ubuntu wily amd64 on Acer Aspire One with its screen facecam
- Travis-CI (build only):