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 formats -
var format = cam.formats[n]
-
format.formatName
: Name of pixel format. e.g."YUYV"
,"MJPG"
-
format.format
: ID number of pixel format -
format.width
: Frame width -
format.height
: Frame height -
format.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
object -
cam.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 camera -
cam.height
: pixel height of the camera
Control API
-
cam.controls
: Array of the control information -
cam.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 spec-
control.id
: Controlid
for controlGet and controlSet -
control.name
: Control name string -
control.type
:"int"
,"bool"
,"button"
,"menu"
or other types -
control.max
,control.min
,control.step
: value should bemin <= v
andv <= max
and(v - min) % step === 0
-
control.default
: default value of the control -
control.flags
: Several bool flags of the controls -
control.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):