diff --git a/.travis.yml b/.travis.yml
index eae5110..f846ea2 100755
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,10 +1,70 @@
language: node_js
+
node_js:
- - "0.10"
- - "0.11"
+ - '0.10'
+ - '0.11'
+ - '0.12'
+
+compiler: clang
+
+env:
+ global:
+ - secure: "kCAwXdfcMv4l4ok5lO89ANbKXXwWQpn5/3qupSbhmX2NDIGUxyXze/cs90u9gF5hcT7ebq27ZJPEtu7pRov8MadfQM9BAd4ZZrHcMHWSkA0Iz+nM+m0Urwach6jkp2Iuwx15L2NHSis7f5PUKJcEv4Gnqs8jrCJzHHS7m7dO0Xo="
+ - secure: "lBIk4BhdIkSmJtFUNp93UjDm445i9eF7nKA+oSiLRu+b9i/WeRLiKFI89tehexWeXBlyNhziBN16LrHmx3I86yZfEok9dBMA1JuzYBjrvpjRAflGcqaCFLV3axyyyNQRIh7Q+ziAlg0xg8HL752BpnfXO91g3jfDPjGxcvBb5xQ="
+
before_install:
+ # Fix a problem with apt-get failing later, see http://docs.travis-ci.com/user/installing-dependencies/#Installing-Ubuntu-packages
+ - sudo apt-get update -qq
+ - sudo add-apt-repository -y ppa:kubuntu-ppa/backports
- sudo apt-get update
- - sudo apt-get install libcv-dev
- - sudo apt-get install libopencv-dev
- - sudo apt-get install libhighgui-dev
+ - sudo apt-get install --force-yes libcv-dev libcvaux-dev libhighgui-dev libopencv-dev
+ # get commit message
+ - COMMIT_MESSAGE=$(git show -s --format=%B $TRAVIS_COMMIT | tr -d '\n')
+ # put local node-pre-gyp on PATH
+ - export PATH=./node_modules/.bin/:$PATH
+ # install node-pre-gyp so it is available for packaging and publishing
+ - npm install node-gyp -g
+ # install node-pre-gyp so it is available for packaging and publishing
+ - npm install node-pre-gyp
+ # install aws-sdk so it is available for publishing to AS3
+ - npm install aws-sdk
+ # figure out if we should publish
+ - PUBLISH_BINARY=false
+ # if we are building a tag then publish
+ - if [[ $TRAVIS_BRANCH == `git describe --tags --always HEAD` ]]; then PUBLISH_BINARY=true; fi;
+ # or if we put [publish binary] in the commit message
+ - if test "${COMMIT_MESSAGE#*'[publish binary]'}" != "$COMMIT_MESSAGE"; then PUBLISH_BINARY=true; fi;
+ - platform=$(uname -s | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/")
+
+install:
+ # ensure source install works
+ - npm install --build-from-source
+ # test our module
+ - npm test
+ - node lib/opencv.js
+
+before_script:
+ - echo "Publishing native platform Binary Package? ->" $PUBLISH_BINARY
+ # if publishing, do it
+ - if [[ $PUBLISH_BINARY == true ]]; then node-pre-gyp package publish || true; fi;
+ # cleanup
+ - node-pre-gyp clean
+ - node-gyp clean
+ - sudo apt-get purge libcv-dev
+ - sudo apt-get purge libopencv-dev
+ - sudo apt-get purge libhighgui-dev
+
+script:
+ # if publishing, test installing from remote
+ - INSTALL_RESULT=0
+ - if [[ $PUBLISH_BINARY == true ]]; then INSTALL_RESULT=$(npm install --fallback-to-build=false > /dev/null)$? || true; fi;
+ # if install returned non zero (errored) then we first unpublish and then call false so travis will bail at this line
+ - if [[ $INSTALL_RESULT != 0 ]]; then echo "returned $INSTALL_RESULT";node-pre-gyp unpublish;false; fi
+ # If success then we arrive here so lets clean up
+ - node-pre-gyp clean
+ # Can't compile opencv 32bit in 64 bit env.
+
+after_success:
+ # if success then query and display all published binaries
+ - node-pre-gyp info
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 86c9edb..3b6dc89 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,29 @@
# Changelog
+### 3.0.0
+
+You wait ages for a release, and 2 come along at once...
+
+This one is awesome. It adds prebuilt binaries, so you don't need
+to build opencv for the common platforms.
+
+Many many thanks to @edgarsilva for awesome work here, and
+http://hybridgroup.com/ for hosting the binaries
+
+
+### 2.0.0
+
+- Support for node 0.12
+- Camera Calibration Functions from @queuecumber
+- Fix for Nan 1.5.1 from @IMGNRY
+- More build fixes from @scanlime
+- Matrix crop prototype from @dbpieter
+- Many fixes from @madshall
+
+Thanks to everyone that contributed!
+
+
### 1.0.0
Ok, let's do a proper semver release :)
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..bcacd40
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,34 @@
+VERSION := $(shell node -e "console.log(require('./package.json').version)")
+
+.PHONY: default release smoke
+
+test:
+ npm test
+
+smoke:
+ npm install --build-from-source
+ node smoke/smoketest.js
+ npm test
+
+
+release:
+ @echo "Tagging release $(VERSION)"
+ @git tag -m "$(VERSION)" v$(VERSION)
+
+ @echo "Pushing tags to GitHub"
+ @git push --tags
+
+ @echo "Switching to osx-binaries branch"
+ @git checkout osx-binaries
+
+ @echo "Merging master into osx-binaries"
+ @git merge --no-ff --commit -m "Merge master into osx-binaries [publish binary]" master
+
+ @echo "Pushing osx-binaries"
+ @git push
+
+ @echo "Switching to master branch"
+ @git checkout master
+
+ @echo "Publishing to NPM"
+ @npm publish
diff --git a/README.md b/README.md
index 8060758..0dcd12a 100755
--- a/README.md
+++ b/README.md
@@ -22,6 +22,7 @@ $ npm install opencv
```
## Examples
+Run the examples from the parent directory.
### Face Detection
@@ -172,29 +173,29 @@ See [relevant source code](src/Contours.cc) and [examples](examples/)
```javascript
var contours = im.findContours;
-# Count of contours in the Contours object
+// Count of contours in the Contours object
contours.size();
-# Count of corners(verticies) of contour `index`
+// Count of corners(verticies) of contour `index`
contours.cornerCount(index);
-# Access vertex data of contours
+// Access vertex data of contours
for(var c = 0; c < contours.size(); ++c) {
console.log("Contour " + c);
for(var i = 0; i < contours.cornerCount(c); ++i) {
var point = contours.point(c, i);
- console.log("(" + point.x + "," + point.y + ")");"
+ console.log("(" + point.x + "," + point.y + ")");
}
}
-# Computations of contour `index`
+// Computations of contour `index`
contours.area(index);
contours.arcLength(index, isClosed);
contours.boundingRect(index);
contours.minAreaRect(index);
contours.isConvex(index);
-# Destructively alter contour `index`
+// Destructively alter contour `index`
contours.approxPolyDP(index, epsilon, isClosed);
contours.convexHull(index, clockwise);
```
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..d508c3d
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,105 @@
+# environment variables
+environment:
+ node_pre_gyp_accessKeyId:
+ secure: 3GHZvq0y83PQ8Qi7FOc5rKoULRQvd2OohhtGqRQLZB4=
+ node_pre_gyp_secretAccessKey:
+ secure: AiX8Bx+U8LKu5JZHb5CMth5xOHuWawkQW3il0OFWfV4kodPZnC8dLYIqb4XZeF7f
+
+# try on unstable version of the server to build node-opencv
+os: unstable
+
+# to add several platforms to build matrix:
+platform:
+ - x64
+
+install:
+ - cmd: ECHO "INSTALL OPENCV:"
+ - cmd: choco install OpenCV
+ - cmd: ECHO "APPVEYOR_REPO_COMMIT_MESSAGE ->"
+ - cmd: ECHO %APPVEYOR_REPO_COMMIT_MESSAGE%
+ - cmd: SET COMMIT_MSG="%APPVEYOR_REPO_COMMIT_MESSAGE%"
+ - cmd: SET PUBLISH_BINARY=false
+ # Check to verify the branch is the same than latest tag, if so
+ # then we publish the binaries if everything else is successful.
+ - cmd: git describe --tags --always HEAD > _git_tag.tmp
+ - cmd: SET /p GIT_TAG=<_git_tag.tmp
+ - cmd: ECHO "LATEST LOCAL TAG:"
+ - cmd: ECHO %GIT_TAG%
+ - cmd: ECHO "APPVEYOR REPO BRANCH/TAG:"
+ - cmd: ECHO %APPVEYOR_REPO_BRANCH%
+ - cmd: DEL _git_tag.tmp
+ - cmd: IF x%APPVEYOR_REPO_BRANCH%==x%GIT_TAG% SET PUBLISH_BINARY=true
+ # Or look for commit message containing `[publish binary]`
+ - cmd: IF not x%COMMIT_MSG:[publish binary]=%==x%COMMIT_MSG% SET PUBLISH_BINARY=true
+ - cmd: ECHO "Env Var PUBLISH_BINARY:"
+ - cmd: ECHO %PUBLISH_BINARY%
+ - cmd: git clone https://github.com/marcelklehr/nodist.git c:\nodist 2>&1
+ - cmd: SET PATH=C:\nodist\bin;%PATH%
+ - cmd: SET NODIST_PREFIX=C:\nodist
+
+before_build:
+ - cmd: SET ARCH=x64
+ - cmd: SET NODIST_X64=1
+ - cmd: call nodist update
+ - cmd: call nodist stable
+ - cmd: npm install -g node-gyp
+ - cmd: SET APP_PATH=%CD%
+ - cmd: IF EXIST C:\OpenCV* CD C:\OpenCV*
+ - cmd: SET OPENCV_ROOT_PATH=%CD%\opencv
+ - cmd: CD %APP_PATH%
+ - cmd: SET OPENCV_DIR=%OPENCV_ROOT_PATH%\build\%ARCH%\vc12\bin
+ - cmd: SET PATH=%cd%\node_modules\.bin\;C:\MinGW\bin;C:\GTK\bin;C:\msys\1.0\bin;%OPENCV_DIR%;%PATH%
+ - cmd: SET PKG_CONFIG_PATH=C:\GTK\lib\pkgconfig
+ - cmd: DIR %OPENCV_ROOT_PATH%\build\%ARCH%\vc12\bin
+ - cmd: DIR %OPENCV_ROOT_PATH%\build\%ARCH%\vc12\lib
+ # Here we need to copy the opencv.pc file from the repo into PKG_CONFIG_PATH
+ # trick part is to check for the vc12 folder and use that one
+ - cmd: copy .\utils\opencv_x64.pc C:\GTK\lib\pkgconfig\opencv.pc
+
+# to run your custom scripts instead of automatic MSBuild
+build_script:
+ - cmd: ECHO "BUILDING x64 binary package:"
+ - cmd: npm install --build-from-source --msvs_version=2013
+ - cmd: npm test
+ - cmd: node lib/opencv.js
+ - cmd: ECHO "PUBLISH x64 binary package:"
+ - cmd: npm install aws-sdk
+ - cmd: IF %PUBLISH_BINARY%==true (node-pre-gyp package publish 2>&1)
+ - cmd: node-pre-gyp clean
+ - cmd: node-gyp clean
+ - cmd: npm uninstall -g node-gyp
+ - cmd: rmdir /q /s node_modules
+ - cmd: DEL C:\GTK\lib\pkgconfig\opencv.pc
+
+after_build:
+ - cmd: SET ARCH=x86
+ - cmd: SET OPENCV_DIR=%OPENCV_ROOT_PATH%\build\%ARCH%\vc12\bin
+ - cmd: SET PATH=%OPENCV_DIR%;%PATH%
+ - cmd: SET NODIST_X64=0
+ - cmd: call nodist update
+ - cmd: call nodist stable
+ - cmd: npm install -g node-gyp
+ - cmd: copy .\utils\opencv_x86.pc C:\GTK\lib\pkgconfig\opencv.pc
+ - cmd: ECHO "BUILDING x86 binary package:"
+ - cmd: npm install --build-from-source --msvs_version=2013
+ - cmd: npm test
+ - cmd: node lib/opencv.js
+ - cmd: ECHO "PUBLISH x86 binary package:"
+ - cmd: npm install aws-sdk
+ - cmd: IF %PUBLISH_BINARY%==true (node-pre-gyp package publish 2>&1)
+ - cmd: node-pre-gyp clean
+ - cmd: node-gyp clean
+ - cmd: rmdir /q /s node_modules
+
+on_success:
+ # test installing from binary package works
+ - cmd: ECHO "ON SUCCESS:"
+ - cmd: ECHO "Try installing from binary:"
+ #- cmd: IF %PUBLISH_BINARY%==true npm install --fallback-to-build=false
+ - cmd: npm install --fallback-to-build=false
+ # Print Available Binaries
+ - cmd: node-pre-gyp info
+
+test: OFF
+
+deploy: OFF
diff --git a/binding.gyp b/binding.gyp
index aa089a6..6318322 100755
--- a/binding.gyp
+++ b/binding.gyp
@@ -1,51 +1,80 @@
{
"targets": [{
- "target_name": "opencv"
- , "sources": [
- "src/init.cc"
- , "src/Matrix.cc"
- , "src/OpenCV.cc"
- , "src/CascadeClassifierWrap.cc"
- , "src/Contours.cc"
- , "src/Point.cc"
- , "src/VideoCaptureWrap.cc"
- , "src/CamShift.cc"
- , "src/HighGUI.cc"
- , "src/FaceRecognizer.cc"
- , "src/BackgroundSubtractor.cc"
- , "src/Constants.cc"
- ]
- , 'libraries': [
- '= 2.3.1" )'
- , '-Wall'
- ]
- , 'cflags!' : [ '-fno-exceptions']
- , 'cflags_cc!': [ '-fno-rtti', '-fno-exceptions']
- , "conditions": [
- ['OS=="mac"', {
- # cflags on OS X are stupid and have to be defined like this
- 'xcode_settings': {
- 'OTHER_CFLAGS': [
- "-mmacosx-version-min=10.7",
- "-std=c++11",
- "-stdlib=libc++",
- '= 2.3.1\" )",
+ "-Wall"
]
- , "GCC_ENABLE_CPP_RTTI": "YES"
- , "GCC_ENABLE_CPP_EXCEPTIONS": "YES"
+ }],
+ [ "OS==\"win\"", {
+ "cflags": [
+ "= 2.4.9\" )",
+ "-Wall"
+ ],
+ "msvs_settings": {
+ "VCCLCompilerTool": {
+ "ExceptionHandling": "2",
+ "DisableSpecificWarnings": [ "4530", "4506", "4244" ],
+ },
+ }
+ }],
+ [ # cflags on OS X are stupid and have to be defined like this
+ "OS==\"mac\"", {
+ "xcode_settings": {
+ "OTHER_CFLAGS": [
+ "-mmacosx-version-min=10.7",
+ "-std=c++11",
+ "-stdlib=libc++",
+ "
-
+
+ 16 8 16 8 28
+
+
diff --git a/examples/addweighted.js b/examples/addweighted.js
index dc9379f..ac6c309 100755
--- a/examples/addweighted.js
+++ b/examples/addweighted.js
@@ -1,14 +1,14 @@
var cv = require('../lib/opencv');
-cv.readImage("./files/mona.png", function(err, orig) {
+cv.readImage("./examples/files/mona.png", function(err, orig) {
if (err) throw err;
- cv.readImage("./files/over_text.png", function(err, over_text) {
+ cv.readImage("./examples/files/over_text.png", function(err, over_text) {
if (err) throw err;
var result = new cv.Matrix(orig.width(), orig.height());
result.addWeighted(orig, 0.7, over_text, 0.9);
- result.save("./tmp/weighted.png");
- console.log('Image saved to ./tmp/weighted.png');
+ result.save("./examples/tmp/weighted.png");
+ console.log('Image saved to ./examples/tmp/weighted.png');
});
});
diff --git a/examples/camera.js b/examples/camera.js
index abe885b..96ce808 100755
--- a/examples/camera.js
+++ b/examples/camera.js
@@ -1,12 +1,20 @@
var cv = require('../lib/opencv');
-var camera = new cv.VideoCapture(0);
-var window = new cv.NamedWindow('Video', 0)
-
-setInterval(function() {
- camera.read(function(err, im) {
- if (err) throw err;
- window.show(im);
- window.blockingWaitKey(0, 50);
- });
-}, 20);
+try {
+ var camera = new cv.VideoCapture(0);
+ var window = new cv.NamedWindow('Video', 0)
+ /*
+ setInterval(function() {
+ camera.read(function(err, im) {
+ if (err) throw err;
+ console.log(im.size())
+ if (im.size()[0] > 0 && im.size()[1] > 0){
+ window.show(im);
+ }
+ window.blockingWaitKey(0, 50);
+ });
+ }, 20);
+ */
+} catch (e){
+ console.log("Couldn't start camera:", e)
+}
diff --git a/examples/car-detection.js b/examples/car-detection.js
index 58c2d61..df296d6 100644
--- a/examples/car-detection.js
+++ b/examples/car-detection.js
@@ -1,3 +1,6 @@
+/* For some reason the cascade file is broken on linux :(
+
+
var cv = require('../lib/opencv');
cv.readImage("./files/car1.jpg", function(err, im){
@@ -16,3 +19,4 @@ cv.readImage("./files/car1.jpg", function(err, im){
console.log('Image saved to ./tmp/car-detection.jpg');
});
});
+*/
diff --git a/examples/face-proxy.js b/examples/face-proxy.js
index 541ba7b..307c64f 100755
--- a/examples/face-proxy.js
+++ b/examples/face-proxy.js
@@ -3,7 +3,7 @@ var http = require('http'),
request = require('request'),
cv = require('../lib/opencv');
-http.createServer(function(req, resp){
+var server = http.createServer(function(req, resp){
var url = req.url.slice(1);
request({uri:url, encoding:'binary'}, function(err, r, body){
if (err) return resp.end(err.stack);
@@ -27,4 +27,7 @@ http.createServer(function(req, resp){
});
});
-}).listen(3000, function(){ console.log('Listening on http://localhost:3000'); })
+})
+
+
+//server.listen(3000, function(){ console.log('Listening on http://localhost:3000'); })
diff --git a/examples/salt.js b/examples/salt.js
index d3212b2..737e834 100755
--- a/examples/salt.js
+++ b/examples/salt.js
@@ -1,7 +1,7 @@
var cv = require('../lib/opencv');
cv.readImage("./files/mona.png", function(err, im) {
- salt(im, 1000);
+ salt(im, 100);
im.save("./tmp/salt.png");
console.log('Image saved to ./tmp/salt.png');
});
diff --git a/examples/take-face-pics.js b/examples/take-face-pics.js
index 418809b..79167d6 100644
--- a/examples/take-face-pics.js
+++ b/examples/take-face-pics.js
@@ -1,24 +1,32 @@
var cv = require('../lib/opencv');
-var vid = new cv.VideoCapture(0);
+try {
+ var vid = new cv.VideoCapture(0);
-vid.read(function(err, im){
- if (err) throw err;
-
- im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
+ vid.read(function(err, im){
if (err) throw err;
- if (!faces.length) return console.log("No Faces");
+ if (im.size()[0] > 0 && im.size()[1] > 0){
- var face = faces[0];
- var ims = im.size();
- var im2 = im.roi(face.x, face.y, face.width, face.height)
- /*
- im.adjustROI(
- -face.y
- , (face.y + face.height) - ims[0]
- , -face.x
- , (face.x + face.width) - ims[1])
- */
- im2.save('./tmp/take-face-pics.jpg')
- console.log('Image saved to ./tmp/take-face-pics.jpg');
- })
-});
+ im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
+ if (err) throw err;
+ if (!faces.length) return console.log("No Faces");
+
+ var face = faces[0];
+ var ims = im.size();
+ var im2 = im.roi(face.x, face.y, face.width, face.height)
+ /*
+ im.adjustROI(
+ -face.y
+ , (face.y + face.height) - ims[0]
+ , -face.x
+ , (face.x + face.width) - ims[1])
+ */
+ im2.save('./examples/tmp/take-face-pics.jpg')
+ console.log('Image saved to ./tmp/take-face-pics.jpg');
+ })
+ } else {
+ console.log("Camera didn't return image")
+ }
+ });
+} catch (e){
+ console.log("Couldn't start camera", e)
+}
diff --git a/examples/warp-image.js b/examples/warp-image.js
index 5b6d32d..8549bf9 100644
--- a/examples/warp-image.js
+++ b/examples/warp-image.js
@@ -1,6 +1,6 @@
var cv = require('../lib/opencv');
-cv.readImage("./mona.png", function(err, im) {
+cv.readImage("./files/mona.png", function(err, im) {
if (err) throw err;
var width = im.width();
@@ -11,6 +11,6 @@ cv.readImage("./mona.png", function(err, im) {
var dstArray = [0, 0, width * 0.9, height * 0.1, width, height, width * 0.2, height * 0.8];
var xfrmMat = im.getPerspectiveTransform(srcArray, dstArray);
im.warpPerspective(xfrmMat, width, height, [255, 255, 255]);
- im.save("./warp-image.png");
+ im.save("./tmp/warp-image.png");
console.log('Image saved to ./tmp/warp-image.png');
});
diff --git a/lib/bindings.js b/lib/bindings.js
index 83e0b2e..4acd6c2 100755
--- a/lib/bindings.js
+++ b/lib/bindings.js
@@ -1 +1,7 @@
-module.exports = require('../build/Release/opencv.node');
+var binary = require('node-pre-gyp');
+var path = require('path');
+var binding_path = binary.find(path.resolve(path.join(__dirname,'../package.json')));
+var binding = require(binding_path);
+
+//module.exports = require('../build/Release/opencv.node');
+module.exports = binding;
diff --git a/package.json b/package.json
index 4405141..00d13d6 100755
--- a/package.json
+++ b/package.json
@@ -3,17 +3,23 @@
"description": "Node Bindings to OpenCV",
"author": "Peter Braden ",
"dependencies": {
+ "node-pre-gyp": "0.5.31",
"buffers": "0.1.1",
- "nan": "^1.3.0"
+ "nan": "1.4.3"
},
- "version": "1.0.0",
+ "version": "3.0.1",
"devDependencies": {
- "tape": "^3.0.0"
+ "tape": "^3.0.0",
+ "aws-sdk": "~2.0.21",
+ "glob": "^4.0.6",
+ "request": "^2.45.0"
},
+ "bundledDependencies":["node-pre-gyp"],
"license": "MIT",
"scripts": {
"build": "node-gyp build",
- "test": "node test/unit.js"
+ "test": "node test/unit.js",
+ "install": "node-pre-gyp install --fallback-to-build"
},
"keywords": [
"opencv",
@@ -28,5 +34,12 @@
},
"engines": {
"node": ">=0.10"
+ },
+ "binary": {
+ "module_name" : "opencv",
+ "module_path" : "./build/{module_name}/v{version}/{configuration}/{node_abi}-{platform}-{arch}/",
+ "remote_path" : "./{module_name}/v{version}/{configuration}/",
+ "package_name": "{node_abi}-{platform}-{arch}.tar.gz",
+ "host" : "https://node-opencv.s3.amazonaws.com"
}
}
diff --git a/publish-binaries.md b/publish-binaries.md
new file mode 100644
index 0000000..d2ea375
--- /dev/null
+++ b/publish-binaries.md
@@ -0,0 +1,71 @@
+How to publish the pre compiled binaries.
+=========================================
+
+## Setup for Linux, Windows and OSX
+
+Every time a new tag for the latest release is pushed to github the continous integration
+builds in Travis-CI and AppVeyor will generate the binaries for each platform and architecture,
+package and publish to the AS3 bucket.
+
+This can be checked in the .travis.yml file and appveyor.yml file. Within the files there are two
+methods for publishing new binaries for each version, one is if a `git tag` is detected; the other
+can be triggered by passing the string `[publish binary]` in the commit message itself.
+
+We also have an automated make task, we should always use this task to avoid forgetting any steps
+(like merging into the `osx-binaries` branch).
+
+The process for generating the binaries, publishing and releasing the npm module should be as follows:
+
+1. Merge all changes and new features into master.
+2. Bump up version of npm module in `package.json`.
+3. execute make task: `make release`
+
+This task will do the following for you:
+
+1. Generate new tags based on package.json version number
+2. Push tags to Github
+3. Checkout into `osx-binaries` branch
+4. Merge `master` into `osx-binaries`
+5. Push `osx-binaries`
+6. Checkout master
+7. Finally it will run `npm publish`
+
+With this we will make sure the binaries for all platforms and architectures will be generated each time
+a new version is released.
+
+
+## Config Travis, AppVeyor and Github to generate all of the binaries.
+
+Before we are able to run everything stated above some steps need to be taken.
+Specifically for being able to publish the pre compiled binaries to AWS-S3. The
+correct keys need to be setup in the travis and appveyor `.yml` files. This needs
+to be done by the admin of the repo, in the case of Travis, and the owner of the account,
+in the case of appveyor.
+
+### Setting up secure keys in Travis.
+
+Setting up the keys in Travis is easy if you have ruby and ruby gems installed and working then install:
+
+`gem install travis`
+
+After the travis gem is installed run the following command for each of the required keys:
+
+`travis encrypt SOMEVAR=secretvalue`
+
+And substitute the values in the `.travis.yml` file for the new ones. Detailed instructions can
+be found here: http://docs.travis-ci.com/user/environment-variables/#Secure-Variables
+
+### Setting up secure keys in AppVeyor
+
+It is even easier than Travis, you do not need to install anything, just go to your account and
+click in `encrypt tool`, there enter the values in the input field and click encrypt. Same as with
+Travis we then need to substitute the newly generated values for the old ones.
+
+Detailed instructions can be found here: http://www.appveyor.com/docs/build-configuration#secure-variables
+
+### OSX binaries
+
+Since Travis does not support config file for multiple OSs we need to create a new branch that contains
+a slightly different version of the .travis.yml file to compile for OSX. The branch needs to be called
+`osx-binaries` and be based of `master` once the pre-compiled binaries PR has been merged in.
+
diff --git a/smoke/smoke.sh b/smoke/smoke.sh
deleted file mode 100755
index 84fab84..0000000
--- a/smoke/smoke.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-if [ ! -f smoke/smoketest.js ]; then
- echo "Please run smoke test from the top-level folder of the repository." >&2
- exit 1
-fi
-
-node-gyp build && echo '-- Compiled OK --
-
-' && node smoke/smoketest.js && echo '-- Smoke Done, running tests --
-
-' && npm test # && echo '-- Tests Run, runnning examples --
-#(building example data)
-#' && ./examples/make-example-files.sh && node examples/motion-track.js
diff --git a/smoke/smoketest.js b/smoke/smoketest.js
index d26d474..a34295e 100755
--- a/smoke/smoketest.js
+++ b/smoke/smoketest.js
@@ -1,6 +1,6 @@
-var cv = require('../lib/opencv')
+var cv = require('../lib/opencv');
-var trainingData = []
+var trainingData = [];
/*
for (var i = 1; i< 41; i++){
for (var j = 1; j<10; j++){
@@ -22,5 +22,5 @@ cv.readImage("/Users/peterbraden/Downloads/orl_faces/s6/10.pgm", function(e, im)
*/
cv.readImage("./examples/files/mona.png", function(e, mat){
var th = mat.threshold(200, 200, "Threshold to Zero Inverted");
- th.save('./examples/tmp/out.png')
-})
+ th.save('./examples/tmp/out.png');
+});
diff --git a/src/BackgroundSubtractor.cc b/src/BackgroundSubtractor.cc
index e9de264..b066529 100644
--- a/src/BackgroundSubtractor.cc
+++ b/src/BackgroundSubtractor.cc
@@ -21,7 +21,7 @@ BackgroundSubtractorWrap::Init(Handle