UNPKG

raspicam-js

Version:

A Node.js-based controller module for the Raspberry Pi camera based on a command structure similar to Johnny-Five

222 lines (136 loc) 8.31 kB
# node-raspicam A Node.js-based controller module for the Raspberry Pi camera. This was forked from https://github.com/troyth/node-raspicam and changes were made to work with the latest JS technologies (es6, react, webpack) _Note_: This should work well for photo and timelapse, video has yet to be tested but may work as well. ## To Install npm install raspicam ## To Use Require raspicam in your node app, then used the exposed constructor to create a RaspiCam object that you can use to take photos, start a timelapse, or record video. var RaspiCam = require("raspicam"); var camera = new RaspiCam({ opts }); //to take a snapshot, start a timelapse or video recording camera.start( ); //to stop a timelapse or video recording camera.stop( ); //listen for the "start" event triggered when the start method has been successfully initiated camera.on("start", function(){ //do stuff }); //listen for the "read" event triggered when each new photo/video is saved camera.on("read", function(err, timestamp, filename){ //do stuff }); //listen for the "stop" event triggered when the stop method was called camera.on("stop", function(){ //do stuff }); //listen for the process to exit when the timeout has been reached camera.on("exit", function(){ //do stuff }); ### RaspiCam Constructor The RaspiCam() constructor creates an object that can then be triggered to take a snapshot or start a timelapse or video recording. The constructor options mirror those offered by the raspistill and raspivideo commands provided by the Raspberry Pi Camera API. ### RaspiCam Constructor Options for Photo and Timelapse #### Required * `mode` : String - "photo" or "timelapse" * `output` : String - the path and filename where you want to store the photos (use sprintf-style variables, like %d, for incrementing timelapse photos) #### Optional ##### Image parameter commands ###### Parameters with Values * `w`, `width` : Integer or String - Set image width <size> * `h`, `height` : Integer or String - Set image height <size> * `q`, `quality` : Integer or String - Set jpeg quality <0 to 100> * `t`, `timeout` : Integer or String - Time (in ms) before takes picture and shuts down (if not specified, set to 5s) * `th`, `thumb` : String - Set thumbnail parameters (x:y:quality) * `e`, `encoding` : String - Encoding to use for output file (jpg, bmp, gif, png) * `x`, `exif` : String - EXIF tag to apply to captures (format as 'key=value') * `tl`, `timelapse` : Integer or String - Timelapse mode. Takes a picture every <t>ms ###### Flags * `r`, `raw` : Add raw bayer data to jpeg metadata * `v`, `verbose` : Output verbose information during run * `d`, `demo` : Run a demo mode (cycle through range of camera options, no capture) ##### Preview parameter commands ###### Flags Note: I've kept these in for completeness, but I'm not sure how they will be useful. * `p`, `preview` : Preview window settings <'x,y,w,h'> * `f`, `fullscreen` : Fullscreen preview mode * `op`, `opacity` : Preview window opacity (0-255) * `n`, `nopreview` : Do not display a preview window ###### Image parameter commands ###### Parameters with Values * `sh`, `sharpness` : Integer or String - Set image sharpness (-100 to 100) * `co`, `contrast` : Integer or String - Set image contrast (-100 to 100) * `br`, `brightness` : Integer or String - Set image brightness (0 to 100) * `sa`, `saturation` : Integer or String - Set image saturation (-100 to 100) * `ISO`, `ISO` : Integer or String - Set capture ISO * `ev`, `ev` : Integer or String - Set EV compensation * `ex`, `exposure` : String - Set exposure mode (off,auto,night,nightpreview,backlight,spotlight,sports,snow,beach,verylong,fixedfps,antishake,fireworks) * `awb`, `awb` : String - Set AWB mode (off,auto,sun,cloud,shade,tungsten,fluorescent,incandescent,flash,horizon) * `ifx`, `imxfx` : String - Set image effect (none,negative,solarise,sketch,denoise,emboss,oilpaint,hatch,gpen,pastel,watercolour,film,blur,saturation,colourswap,washedout,posterise,colourpoint,colourbalance,cartoon) * `cfx`, `colfx` : String - Set colour effect (U:V) * `mm`, `metering` : String - Set metering mode (average,spot,backlit,matrix) * `rot`, `rotation` : Integer or String - Set image rotation (0-359) ###### Flags * `vs`, `vstab` : Turn on video stablisation * `hf`, `hflip` : Set horizontal flip * `vf`, `vflip` : Set vertical flip ### RaspiCam Constructor Options for Video #### Required * `mode` : String - "video" * `output` : String - the path and filename where you want to store the video (to write to stdout, use '-') #### Optional ##### Image parameter commands ###### Parameters with Values * `w`, `width` : Integer or String - Set image width <size> (Default is 1920) * `h`, `height` : Integer or String - Set image height <size> (Default is 1080) * `b`, `bitrate` : Integer or String - Set bitrate. Use bits per second (e.g. 10MBits/s would be 10000000) * `t`, `timeout` : Integer or String - Time (in ms) to capture for. If not specified, set to 5s. Zero to disable * `fps`, `framerate` : Integer or String - Specify the frames per second to record * `g`, `intra` : Integer or String - Specify the intra refresh period (key frame rate/GoP size) ###### Flags * `v`, `verbose` : Output verbose information during run * `d`, `demo` : Run a demo mode (cycle through range of camera options, no capture) * `e`, `penc` : Display preview image _after_ encoding (shows compression artifacts) ##### Preview parameter commands ###### Flags Note: I've kept these in for completeness, but I'm not sure how they will be useful. * `p`, `preview` : Preview window settings <'x,y,w,h'> * `f`, `fullscreen` : Fullscreen preview mode * `op`, `opacity` : Preview window opacity (0-255) * `n`, `nopreview` : Do not display a preview window ###### Image parameter commands ###### Parameters with Values * `sh`, `sharpness` : Integer or String - Set image sharpness (-100 to 100) * `co`, `contrast` : Integer or String - Set image contrast (-100 to 100) * `br`, `brightness` : Integer or String - Set image brightness (0 to 100) * `sa`, `saturation` : Integer or String - Set image saturation (-100 to 100) * `ISO`, `ISO` : Integer or String - Set capture ISO * `ev`, `ev` : Integer or String - Set EV compensation * `ex`, `exposure` : String - Set exposure mode (off,auto,night,nightpreview,backlight,spotlight,sports,snow,beach,verylong,fixedfps,antishake,fireworks) * `awb`, `awb` : String - Set AWB mode (off,auto,sun,cloud,shade,tungsten,fluorescent,incandescent,flash,horizon) * `ifx`, `imxfx` : String - Set image effect (none,negative,solarise,sketch,denoise,emboss,oilpaint,hatch,gpen,pastel,watercolour,film,blur,saturation,colourswap,washedout,posterise,colourpoint,colourbalance,cartoon) * `cfx`, `colfx` : String - Set colour effect (U:V) * `mm`, `metering` : String - Set metering mode (average,spot,backlit,matrix) * `rot`, `rotation` : Integer or String - Set image rotation (0-359) ###### Flags * `vs`, `vstab` : Turn on video stablisation * `hf`, `hflip` : Set horizontal flip * `vf`, `vflip` : Set vertical flip ### RaspiCam Object Methods #### RaspiCam.start( ) Depending on the `mode`, this will either take a snapshot ("photo"), start a timelapse ("timelapse") or start a video recording ("video"). You can only call start() once on a RaspiCam object, as the same physical camera cannot do multiple captures at once. Returns `false` if any errors, otherwise returns `true`. Emits the following signals: * `start` with payload (err, timestamp) when the capture process was started by a .start() method call * `read` with payload (err, timestamp, filename) when a new file is saved (very useful for timelapses) * `exit` with payload (timestamp) when the capture process exits via timeout #### RaspiCam.stop( ) This stops any ongoing camera process. Returns `true` if it stopped a process, otherwise returns `false`. Emits the following signals: * `stop` with payload (err, timestamp) when the capture process was stopped by a .stop() method call #### RaspiCam.set( opt, value ) This is a setter - it sets any option you give it. Opt must be a string (eg. "width"). #### RaspiCam.get( opt ) This is a getter - it returns any option you give it. Opt must be a string (eg. "width").