Capturing images from USB(UVC) webcam on linux machines.
-std=c11
and -std=c++14
On linux machines:
npm install v4l2camera
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)
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
and format.interval.denominator
: Capturing interval per numerator/denominator
seconds
(e.g. 30fps is 1/30)cam.configSet(format)
: Set capture width
, height
, interval
per numerator/denominator
sec
if the members exist in the format
objectcam.configGet()
: Get a format
object of current configCapturing API (control flow)
cam.start()
cam.stop(afterStoped)
config(format)
or re-start()
in afterStoped()
callbackcam.capture(afterCaptured)
: Do cache a current captured frame
cam.frameRaw()
in afterCaptured(true)
callbackCapturing API (frame access)
cam.frameRaw()
: Get the cached raw frame as Uint8Array
(YUYU frame is array of YUYV..., MJPG frame is single JPEG compressed data)cam.toYUYV()
: Get the cached frame as Uint8Array
of pixels YUYVYUYV...
(will be deprecated method)cam.toRGB()
: Get the cached frame as Uint8Array
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 cameraControl API
cam.controls
: Array of the control informationcam.controlGet(id)
: Get int value of the control of the id
(id is one of cam.controls[n].id)cam.controlSet(id, value)
: Set int value of the control of the id
var control = cam.controls[n]
: Control spec
control.id
: Control id
for controlGet and controlSetcontrol.name
: Control name stringcontrol.type
: "int"
, "bool"
, "button"
, "menu"
or other typescontrol.max
, control.min
, control.step
: value should be
min <= v
and v <= 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"
.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.