diff --git a/README.md b/README.md index 7368fdb..e83ae87 100644 --- a/README.md +++ b/README.md @@ -32,11 +32,13 @@ As it is currently only linux compatible we have created an image on DockerHub u * Download the image and create and run a daemon container, giving it access to your default camera and a port through which to host a webserver. -```sudo docker run -itd -p 8080:8080 -p 3000:3000 --privileged \ --name gesture \ +``` +sudo docker run -itd -p 8080:8080 -p 3000:3000 --privileged \ +--name gesture \ -v /dev/video0:/dev/video0 \ -v /tmp/.X11-unix:/tmp/.X11-unix \ --e DISPLAY=$DISPLAY admobilize/gesture``` +-e DISPLAY=$DISPLAY admobilize/gesture +``` * Execute a command inside the docker, to run the node sample `handTracker.js` @@ -46,7 +48,8 @@ As it is currently only linux compatible we have created an image on DockerHub u It will return a `JSON` object with the location (both center (xc,yc) and top left corner (x,y)), size, hand type, and unique id. -```{ +``` +{ "results": [{ "hand_type":0, @@ -58,7 +61,8 @@ It will return a `JSON` object with the location (both center (xc,yc) and top le "y":196, "yc":288 }] -}``` +} +``` For those running mac/windows, you would have to create a VirtualBox running linux to be able to access the camera from docker. Docker-engine runs a basic linux that doesn't recognize the camera. Docker is currently beta testing their new mac/windows docker which will be compatible with this library and you will be able to access your camera. Alternatively you can run detection through a node server in the node SDK where you can access it through `localhost:3000` in a browser. @@ -66,6 +70,35 @@ For those running mac/windows, you would have to create a VirtualBox running lin (We have had some permission problems with google chrome and safari blocking the server on mac, but firefox works fine) +#### P.S + 1. Err fix + + Error response from daemon: Conflict. + + 1-1. Stop a running gesture container: + + ```docker stop gesture``` + + 1-2. Force remove a running gestrue container: + + ```docker rm -f gestrue``` + + 2. webcam in VirtualBox Guest OS on Windows Host. + https://reurl.cc/rQGAN + + Windows Host + + 2-1. Install 'Oracle VM VirtualBox Extrnsion Pack'. + + 2-2. open cmd. + + ```cd c:\Program Files\Oracle\VirtualBox``` + + 2-3. open VirtualBox. + + ```VboxManage controlvm "Ubuntu16" webcam attach .1``` + + *Replace "Ubuntu16" with your guest OS name. ### Using without Docker As long as you have the required dependencies enter the node sdk directory and run: @@ -76,7 +109,26 @@ or if you are root ```npm install && npm run-root-setup``` -Run some examples! +### Note for gesture detection over video stream +1. A secure channel is required for the video stream, i.e. https. You'll need to get/configure the Nodejs ssl key pair. +2. The keys path are specified in file examples/detection-server/server.js + ``` +const privateKey = fs.readFileSync('YOUR_KEY_PATH/privkey.pem', 'utf8'); +const certificate = fs.readFileSync('YOUR_KEY_PATH/cert.pem', 'utf8'); +const ca = fs.readFileSync('YOUR_KEY_PATH/fullchain.pem', 'utf8'); +``` +3. check if the port for https (3000 in this example) is allowed to access from the firewall. +4. start the server by run the following command: + + ``` npm run start-test-server ``` + +5. You'll see message ``` listening on *:3000``` +6. Launch your browser and access the web page at https://YOUR_DOMAIN:3000 +7. You should be able to see the page as below: + + + +Run some other examples! `node examples/handTracker.js` or `npm run start-test-server` @@ -87,4 +139,4 @@ The documentation can be found [here](http://gesture.ai/#/develop "Gesture.ai Do Gesture.ai anonymously aggregates data from people using the SDK to improve the detection of gestures and to provide the best SDK possible. This data aggregation can be turned off from the client side but it is opt-out. To opt out, run `set_data_submit(false)` on creation of a `Gesture` class. ### Community -Visit and join our community [here](http://community.gesture.ai "Gesture.ai Community") \ No newline at end of file +Visit and join our community [here](http://community.gesture.ai "Gesture.ai Community") diff --git a/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/facedetect.o.d b/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/facedetect.o.d new file mode 100644 index 0000000..446aec5 --- /dev/null +++ b/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/facedetect.o.d @@ -0,0 +1,10 @@ +cmd_Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/facedetect.o := g++ '-DNODE_GYP_MODULE_NAME=gesture' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/willem/.node-gyp/0.12.10/include/node -I/home/willem/.node-gyp/0.12.10/src -I/home/willem/.node-gyp/0.12.10/deps/uv/include -I/home/willem/.node-gyp/0.12.10/deps/v8/include -I../node_modules/nan -I../../admobilize-detection-manager/lib/pico -I../src/libs -I../-I/usr/local/include/opencv -I../-I/usr/local/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -I/usr/local/include/opencv -I/usr/local/include -Wall -g -w -std=c++11 -O3 -ffunction-sections -fdata-sections -fno-tree-vrp -fno-tree-sink -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/facedetect.o.d.raw -c -o Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/facedetect.o ../../admobilize-detection-manager/lib/pico/facedetect.cpp +Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/facedetect.o: \ + ../../admobilize-detection-manager/lib/pico/facedetect.cpp \ + ../../admobilize-detection-manager/lib/pico/facedetect.hpp \ + ../../admobilize-detection-manager/lib/pico/constants.hpp \ + ../../admobilize-detection-manager/lib/pico/face-all.h +../../admobilize-detection-manager/lib/pico/facedetect.cpp: +../../admobilize-detection-manager/lib/pico/facedetect.hpp: +../../admobilize-detection-manager/lib/pico/constants.hpp: +../../admobilize-detection-manager/lib/pico/face-all.h: diff --git a/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/motiondetector.o.d b/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/motiondetector.o.d new file mode 100644 index 0000000..ada2f89 --- /dev/null +++ b/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/motiondetector.o.d @@ -0,0 +1,6 @@ +cmd_Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/motiondetector.o := g++ '-DNODE_GYP_MODULE_NAME=gesture' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/willem/.node-gyp/0.12.10/include/node -I/home/willem/.node-gyp/0.12.10/src -I/home/willem/.node-gyp/0.12.10/deps/uv/include -I/home/willem/.node-gyp/0.12.10/deps/v8/include -I../node_modules/nan -I../../admobilize-detection-manager/lib/pico -I../src/libs -I../-I/usr/local/include/opencv -I../-I/usr/local/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -I/usr/local/include/opencv -I/usr/local/include -Wall -g -w -std=c++11 -O3 -ffunction-sections -fdata-sections -fno-tree-vrp -fno-tree-sink -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/motiondetector.o.d.raw -c -o Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/motiondetector.o ../../admobilize-detection-manager/lib/pico/motiondetector.cpp +Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/motiondetector.o: \ + ../../admobilize-detection-manager/lib/pico/motiondetector.cpp \ + ../../admobilize-detection-manager/lib/pico/motiondetector.hpp +../../admobilize-detection-manager/lib/pico/motiondetector.cpp: +../../admobilize-detection-manager/lib/pico/motiondetector.hpp: diff --git a/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/uniqueness2.o.d b/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/uniqueness2.o.d new file mode 100644 index 0000000..39d4f40 --- /dev/null +++ b/docker/build/Release/.deps/Release/obj.target/admobilize-detection-manager/lib/pico/uniqueness2.o.d @@ -0,0 +1,16 @@ +cmd_Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/uniqueness2.o := g++ '-DNODE_GYP_MODULE_NAME=gesture' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/willem/.node-gyp/0.12.10/include/node -I/home/willem/.node-gyp/0.12.10/src -I/home/willem/.node-gyp/0.12.10/deps/uv/include -I/home/willem/.node-gyp/0.12.10/deps/v8/include -I../node_modules/nan -I../../admobilize-detection-manager/lib/pico -I../src/libs -I../-I/usr/local/include/opencv -I../-I/usr/local/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -I/usr/local/include/opencv -I/usr/local/include -Wall -g -w -std=c++11 -O3 -ffunction-sections -fdata-sections -fno-tree-vrp -fno-tree-sink -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/uniqueness2.o.d.raw -c -o Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/uniqueness2.o ../../admobilize-detection-manager/lib/pico/uniqueness2.cpp +Release/obj.target/gesture/../admobilize-detection-manager/lib/pico/uniqueness2.o: \ + ../../admobilize-detection-manager/lib/pico/uniqueness2.cpp \ + ../../admobilize-detection-manager/lib/pico/brief.hpp \ + ../../admobilize-detection-manager/lib/pico/uniqueness2.hpp \ + ../../admobilize-detection-manager/lib/pico/constants.hpp \ + ../../admobilize-detection-manager/lib/pico/facedetect.hpp \ + ../../admobilize-detection-manager/lib/pico/posedetector.h \ + ../../admobilize-detection-manager/lib/pico/uniqueness.hpp +../../admobilize-detection-manager/lib/pico/uniqueness2.cpp: +../../admobilize-detection-manager/lib/pico/brief.hpp: +../../admobilize-detection-manager/lib/pico/uniqueness2.hpp: +../../admobilize-detection-manager/lib/pico/constants.hpp: +../../admobilize-detection-manager/lib/pico/facedetect.hpp: +../../admobilize-detection-manager/lib/pico/posedetector.h: +../../admobilize-detection-manager/lib/pico/uniqueness.hpp: diff --git a/docker/build/Release/.deps/Release/obj.target/gesture.node.d b/docker/build/Release/.deps/Release/obj.target/gesture.node.d index 45b8e2c..dd585b7 100644 --- a/docker/build/Release/.deps/Release/obj.target/gesture.node.d +++ b/docker/build/Release/.deps/Release/obj.target/gesture.node.d @@ -1 +1 @@ -cmd_Release/obj.target/gesture.node := g++ -shared -pthread -rdynamic -m64 -Wl,-soname=gesture.node -o Release/obj.target/gesture.node -Wl,--start-group Release/obj.target/gesture/admobilize-detection-manager/lib/pico/facedetect.o Release/obj.target/gesture/admobilize-detection-manager/lib/pico/motiondetector.o Release/obj.target/gesture/admobilize-detection-manager/lib/pico/picornt.o Release/obj.target/gesture/admobilize-detection-manager/lib/pico/uniqueness2.o Release/obj.target/gesture/src/gesture_manager.o Release/obj.target/gesture/src/gesture_manager_impl.o Release/obj.target/gesture/src/curl_handler.o Release/obj.target/gesture/src/drawing.o Release/obj.target/gesture/src/sha1.o Release/obj.target/gesture/src/gesture_recognition.o -Wl,--end-group -L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core -lcurl +cmd_Release/obj.target/gesture.node := g++ -shared -pthread -rdynamic -m64 -Wl,-soname=gesture.node -o Release/obj.target/gesture.node -Wl,--start-group Release/obj.target/gesture/admobilize-detection-manager/lib/pico/facedetect.o Release/obj.target/gesture/admobilize-detection-manager/lib/pico/uniqueness2.o Release/obj.target/gesture/admobilize-detection-manager/lib/pico/motiondetector.o Release/obj.target/gesture/src/gesture_manager.o Release/obj.target/gesture/src/gesture_manager_impl.o Release/obj.target/gesture/src/gesture_recognition.o -Wl,--end-group -L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core diff --git a/docker/build/Release/.deps/Release/obj.target/gesture/src/gesture_manager.o.d b/docker/build/Release/.deps/Release/obj.target/gesture/src/gesture_manager.o.d index 9f3fbe7..9301844 100644 --- a/docker/build/Release/.deps/Release/obj.target/gesture/src/gesture_manager.o.d +++ b/docker/build/Release/.deps/Release/obj.target/gesture/src/gesture_manager.o.d @@ -7,8 +7,7 @@ Release/obj.target/gesture/src/gesture_manager.o: \ ../admobilize-detection-manager/lib/pico/motiondetector.hpp \ ../admobilize-detection-manager/lib/pico/uniqueness2.hpp \ ../admobilize-detection-manager/lib/pico/facedetect.hpp \ - ../admobilize-detection-manager/lib/pico/posedetector.h \ - ../src/curl_handler.h ../src/sha1.h ../src/libs/json.hpp + ../admobilize-detection-manager/lib/pico/posedetector.h ../src/gesture_manager.cpp: ../src/gesture_manager.h: ../src/gesture_manager_impl.h: @@ -18,6 +17,3 @@ Release/obj.target/gesture/src/gesture_manager.o: \ ../admobilize-detection-manager/lib/pico/uniqueness2.hpp: ../admobilize-detection-manager/lib/pico/facedetect.hpp: ../admobilize-detection-manager/lib/pico/posedetector.h: -../src/curl_handler.h: -../src/sha1.h: -../src/libs/json.hpp: diff --git a/docker/build/Release/.deps/Release/obj.target/gesture/src/gesture_manager_impl.o.d b/docker/build/Release/.deps/Release/obj.target/gesture/src/gesture_manager_impl.o.d index c83a52e..66b655a 100644 --- a/docker/build/Release/.deps/Release/obj.target/gesture/src/gesture_manager_impl.o.d +++ b/docker/build/Release/.deps/Release/obj.target/gesture/src/gesture_manager_impl.o.d @@ -7,8 +7,7 @@ Release/obj.target/gesture/src/gesture_manager_impl.o: \ ../admobilize-detection-manager/lib/pico/uniqueness2.hpp \ ../admobilize-detection-manager/lib/pico/facedetect.hpp \ ../admobilize-detection-manager/lib/pico/posedetector.h \ - ../src/gesture_manager.h ../src/curl_handler.h ../src/sha1.h \ - ../src/libs/json.hpp + ../src/gesture_manager.h ../src/gesture_manager_impl.cpp: ../src/gesture_manager_impl.h: ../admobilize-detection-manager/lib/pico/facedetect.hpp: @@ -18,6 +17,3 @@ Release/obj.target/gesture/src/gesture_manager_impl.o: \ ../admobilize-detection-manager/lib/pico/facedetect.hpp: ../admobilize-detection-manager/lib/pico/posedetector.h: ../src/gesture_manager.h: -../src/curl_handler.h: -../src/sha1.h: -../src/libs/json.hpp: diff --git a/docker/build/Release/gesture.node b/docker/build/Release/gesture.node index ba20bc9..b49e76f 100755 Binary files a/docker/build/Release/gesture.node and b/docker/build/Release/gesture.node differ diff --git a/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/facedetect.o b/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/facedetect.o new file mode 100644 index 0000000..9c94215 Binary files /dev/null and b/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/facedetect.o differ diff --git a/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/motiondetector.o b/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/motiondetector.o new file mode 100644 index 0000000..24c4cd8 Binary files /dev/null and b/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/motiondetector.o differ diff --git a/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/uniqueness2.o b/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/uniqueness2.o new file mode 100644 index 0000000..062b466 Binary files /dev/null and b/docker/build/Release/obj.target/admobilize-detection-manager/lib/pico/uniqueness2.o differ diff --git a/docker/build/Release/obj.target/gesture.node b/docker/build/Release/obj.target/gesture.node index ba20bc9..b49e76f 100755 Binary files a/docker/build/Release/obj.target/gesture.node and b/docker/build/Release/obj.target/gesture.node differ diff --git a/docker/build/Release/obj.target/gesture/admobilize-detection-manager/lib/pico/uniqueness2.o b/docker/build/Release/obj.target/gesture/admobilize-detection-manager/lib/pico/uniqueness2.o index a0267d2..472ed44 100644 Binary files a/docker/build/Release/obj.target/gesture/admobilize-detection-manager/lib/pico/uniqueness2.o and b/docker/build/Release/obj.target/gesture/admobilize-detection-manager/lib/pico/uniqueness2.o differ diff --git a/docker/build/Release/obj.target/gesture/src/gesture_manager.o b/docker/build/Release/obj.target/gesture/src/gesture_manager.o index 73d8a6d..679b6fe 100644 Binary files a/docker/build/Release/obj.target/gesture/src/gesture_manager.o and b/docker/build/Release/obj.target/gesture/src/gesture_manager.o differ diff --git a/docker/build/Release/obj.target/gesture/src/gesture_manager_impl.o b/docker/build/Release/obj.target/gesture/src/gesture_manager_impl.o index fcfd46c..a1d431a 100644 Binary files a/docker/build/Release/obj.target/gesture/src/gesture_manager_impl.o and b/docker/build/Release/obj.target/gesture/src/gesture_manager_impl.o differ diff --git a/docker/build/Release/obj.target/gesture/src/gesture_recognition.o b/docker/build/Release/obj.target/gesture/src/gesture_recognition.o index c1f4752..950845b 100644 Binary files a/docker/build/Release/obj.target/gesture/src/gesture_recognition.o and b/docker/build/Release/obj.target/gesture/src/gesture_recognition.o differ diff --git a/docker/build/gesture.target.mk b/docker/build/gesture.target.mk index 16fc5d6..6940fcd 100644 --- a/docker/build/gesture.target.mk +++ b/docker/build/gesture.target.mk @@ -90,14 +90,10 @@ INCS_Release := \ OBJS := \ $(obj).target/$(TARGET)/admobilize-detection-manager/lib/pico/facedetect.o \ - $(obj).target/$(TARGET)/admobilize-detection-manager/lib/pico/motiondetector.o \ - $(obj).target/$(TARGET)/admobilize-detection-manager/lib/pico/picornt.o \ $(obj).target/$(TARGET)/admobilize-detection-manager/lib/pico/uniqueness2.o \ + $(obj).target/$(TARGET)/admobilize-detection-manager/lib/pico/motiondetector.o \ $(obj).target/$(TARGET)/src/gesture_manager.o \ $(obj).target/$(TARGET)/src/gesture_manager_impl.o \ - $(obj).target/$(TARGET)/src/curl_handler.o \ - $(obj).target/$(TARGET)/src/drawing.o \ - $(obj).target/$(TARGET)/src/sha1.o \ $(obj).target/$(TARGET)/src/gesture_recognition.o # Add to the list of files we specially track dependencies for. @@ -151,8 +147,7 @@ LIBS := \ -lopencv_ml \ -lopencv_imgproc \ -lopencv_flann \ - -lopencv_core \ - -lcurl + -lopencv_core $(obj).target/gesture.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) $(obj).target/gesture.node: LIBS := $(LIBS) diff --git a/docker/examples/detection-server/public/index.html b/docker/examples/detection-server/public/index.html index 7108635..86fd0f6 100644 --- a/docker/examples/detection-server/public/index.html +++ b/docker/examples/detection-server/public/index.html @@ -16,17 +16,11 @@
node + var t0 = document.createTextNode("Detecting ..."); // Create a text node + para0.appendChild(t0); // Append the text to
+ resultsContent.appendChild(para0); socket.on('detection', function(results){ console.log('client,results:', results); @@ -23,6 +29,7 @@ window.onload = function(argument){ ) } + var boxHeight = (results[0].yc)/4.8; player.setVolume(boxHeight); setTimeout(function() { @@ -34,40 +41,48 @@ window.onload = function(argument){ }, 1000); - //var para = document.createElement("P"); // Create a
node - //var t = document.createTextNode(JSON.stringify(results)); // Create a text node - //para.appendChild(t); // Append the text to
- //resultsContent.appendChild(para); + var para = document.createElement("P"); // Create a
node + var t = document.createTextNode(JSON.stringify(results)); // Create a text node + para.appendChild(t); // Append the text to
+ // resultsContent.appendChild(para); + resultsContent.prepend(para); }); - navigator.getUserMedia = navigator.getUserMedia || + // navigator.getUserMedia = navigator.getUserMedia || + // navigator.webkitGetUserMedia || navigator.mozGetUserMedia; + navigator.mediaDevices.getUserMedia = navigator.mediaDevices.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; + var localMediaStream = null; var constraints = { audio: false, video: true }; + var video = document.querySelector('video'); var dataURL; function successCallback(stream) { - window.stream = stream; // stream available to console - //record(stream); - localMediaStream = stream; - if (window.URL) { - video.src = window.URL.createObjectURL(stream); - } else { - video.src = stream; - } - - - setInterval(snapshot, 20); - } + console.log('navigator.mediaDevices.getUserMedia success!', stream); + window.stream = stream; // stream available to console + //record(stream); + localMediaStream = stream; + if (window.URL) { + // video.src = window.URL.createObjectURL(stream); + video.srcObject = stream; + } else { + video.srcObject = stream; + } + + + setInterval(snapshot, 50); +} function errorCallback(error) { console.log('navigator.getUserMedia error: ', error); } - navigator.getUserMedia(constraints, successCallback, errorCallback); + navigator.mediaDevices.getUserMedia(constraints, successCallback, errorCallback); + function snapshot(){ if (localMediaStream) { @@ -76,10 +91,6 @@ window.onload = function(argument){ socket.emit('frame', dataURL); } } - - - - } // 2. This code loads the IFrame Player API code asynchronously. diff --git a/docker/examples/detection-server/public/style/main.css b/docker/examples/detection-server/public/style/main.css index 962bd09..5eac555 100644 --- a/docker/examples/detection-server/public/style/main.css +++ b/docker/examples/detection-server/public/style/main.css @@ -19,7 +19,7 @@ canvas{ } #scroll { - height: 600px; + height: 300px; overflow: auto; width: 608px; float: left; @@ -28,7 +28,7 @@ canvas{ #scrollThis { color: gray; font-family: helvetica; - height: 600px; + height: 300px; overflow: scroll; padding: 2px 29px; width: 208px; diff --git a/docker/examples/detection-server/server.js b/docker/examples/detection-server/server.js index f93f34f..cf6913c 100644 --- a/docker/examples/detection-server/server.js +++ b/docker/examples/detection-server/server.js @@ -1,11 +1,26 @@ var express = require('express'); var app = express(); var http = require('http').Server(app); -var io = require('socket.io')(http); +// var io = require('socket.io')(http); var Gesture = require('../../lib/gesture'); var gesture = new Gesture.detector(); -var isProcessing = false; + +// Certificate +const fs = require('fs'); +const privateKey = fs.readFileSync('YOUR_KEY_PATH/privkey.pem', 'utf8'); +const certificate = fs.readFileSync('YOUR_KEY_PATH/cert.pem', 'utf8'); +const ca = fs.readFileSync('YOUR_KEY_PATH/fullchain.pem', 'utf8'); + +const credentials = { + key: privateKey, + cert: certificate, + ca: ca +}; + +const https = require('https').Server(credentials, app); +var io = require('socket.io')(https); + gesture.setTimeToCountDetection(.3); gesture.setDraw(false); gesture.setShow(false); @@ -18,6 +33,7 @@ app.get('/', function (req, res) { res.sendFile(__dirname + '/public/index.html'); }); + io.on('connection', function(socket){ console.log('a user connected'); socket.on('disconnect', function(){ @@ -25,24 +41,24 @@ io.on('connection', function(socket){ }); socket.on('frame', detectGesture); + gesture.on('detection', function(results){ io.emit('detection', results); }); }); -http.listen(3000, function(){ + + +https.listen(3000, function(){ console.log('listening on *:3000'); }); + + function detectGesture(imageBase64){ var imageBase64 = imageBase64.replace('data:image/png;base64,',''); var bufferImage = new Buffer(imageBase64, 'base64'); - if(isProcessing === false) { - isProcessing = true; - gesture.detectTrack(bufferImage, [Gesture.PALM, Gesture.THUMB_UP, Gesture.FIST], function(){ - isProcessing = false; - }); - } + gesture.detectTrack(bufferImage, [Gesture.PALM, Gesture.THUMB_UP, Gesture.FIST], function(){}); } diff --git a/docker/examples/gestureAI.png b/docker/examples/gestureAI.png new file mode 100644 index 0000000..eef3367 Binary files /dev/null and b/docker/examples/gestureAI.png differ diff --git a/docker/examples/handTracker.js b/docker/examples/handTracker.js index 2bd69d8..a6df307 100755 --- a/docker/examples/handTracker.js +++ b/docker/examples/handTracker.js @@ -9,7 +9,7 @@ gesture.setShow(true); gesture.setFrameFlip(true); -gesture.runTracking([Gesture.PALM, Gesture.THUMB_UP, Gesture.PINCH]); +gesture.detectTrackStream([Gesture.PALM, Gesture.THUMB_UP, Gesture.FIST]); //events diff --git a/docker/lib/gesture.js b/docker/lib/gesture.js index b79775e..d8bc760 100755 --- a/docker/lib/gesture.js +++ b/docker/lib/gesture.js @@ -9,15 +9,15 @@ var binding = require(binding_path); var GestureRecognition = binding.GestureRecognition; var processRunning = false; -var stopProccess = false; +var stopProcess = false; var self; var Gesture = function(camera) { self = this; - if(typeof camera !== "undefined"){ - this.gestureRecognition = new GestureRecognition(camera); - }else{ - this.gestureRecognition = new GestureRecognition(); - } + if(typeof camera !== "undefined"){ + this.gestureRecognition = new GestureRecognition(camera); + }else{ + this.gestureRecognition = new GestureRecognition(); + } }; @@ -26,104 +26,109 @@ util.inherits(Gesture, events.EventEmitter); -Gesture.prototype.runDetection = function(type){ +Gesture.prototype.detectStream = function(type){ processRunning = true; self.detect(type, function(error, response){ - if(error){ - self.emit('error', error); - processRunning = false; - self.emit('stop'); - }else{ - self.emit('frame', response); - if(!stopProccess){ - self.runDetection(type); - }else{ - stopProccess = true; - processRunning = false; - self.emit('stop'); - } - } - }); -} - - - -Gesture.prototype.runTracking = function(types) { + if(error){ + self.emit('error', error); + processRunning = false; + self.emit('stop'); + }else{ + self.emit('frame', response); + if(!stopProcess){ + self.detectStream(type); + }else{ + stopProcess = true; + processRunning = false; + self.emit('stop'); + } + } + }); +} + + + +Gesture.prototype.detectTrackStream = function(types) { processRunning = true; - this.gestureRecognition.trackingDetect(types, function(error, response){ - if(error){ - self.emit('error', error); - processRunning = false; - self.emit('stop'); - }else{ - self.emit('frame', response); - if(!stopProccess){ - self.runTracking(types); - }else{ - stopProccess = false; - processRunning = false; - self.emit('stop'); - } - - } - }); + this.gestureRecognition.trackingDetect(types, function(error, response){ + if(error){ + self.emit('error', error); + processRunning = false; + self.emit('stop'); + }else{ + self.emit('frame', response); + if(!stopProcess){ + self.detectTrackStream(types); + }else{ + stopProcess = false; + processRunning = false; + self.emit('stop'); + } + + } +}); } Gesture.prototype.detect = function(buffer, type, callback) { -if(typeof (type) == 'function'){ - callback = type; - type = buffer; - this.gestureRecognition.detect(type, callback); + if(typeof (type) == 'function'){ + callback = type; + type = buffer; + this.gestureRecognition.detect(type, function(error, response){ + var response = JSON.parse(response); + if(response.results){ + self.emit('detection', response.results) + } + callback(error, response); + }); }else{ - this.gestureRecognition.detect(buffer, type, callback); - } + this.gestureRecognition.detect(buffer, type, function(error, response){ + var response = JSON.parse(response); + if(response.results){ + self.emit('detection', response.results) + } + callback(error, response); + }); +} } -Gesture.prototype.trackingDetect = function(buffer, types, callback) { +Gesture.prototype.detectTrack = function(buffer, types, callback) { -if(typeof types === "function"){ - callback = types; - types = buffer; - this.gestureRecognition.trackingDetect(types, function(error, response){ + if(typeof types === "function"){ + callback = types; + types = buffer; + this.gestureRecognition.trackingDetect(types, function(error, response){ + var response = JSON.parse(response); if(response.results){ - self.emit('detection', response.results) - } - callback(); - }); - }else{ - this.gestureRecognition.trackingDetect(buffer, types, function(error, response){ + self.emit('detection', response.results) + } + callback(error, response); + }); + }else{ + this.gestureRecognition.trackingDetect(buffer, types, function(error, response){ + var response = JSON.parse(response); if(response.results){ - self.emit('detection', response.results) - } - callback(); - }); - } + self.emit('detection', response.results) + } + callback(error, response); + }); + } } - -function onDetectResponse(error, result){ - if(result.results){ - self.emit('detection', results); - - } - -} - Gesture.prototype.stop = function(){ if(processRunning){ - stopProccess = true; - self.stopVideoCapture(); - } + stopProcess = true; + self.stopVideoCapture(); + } } @@ -164,10 +169,6 @@ Gesture.prototype.setKalman = function(kalman) { } -Gesture.prototype.setDataSubmit = function(dataSubmit) { - this.gestureRecognition.setDataSubmit(dataSubmit); -} - Gesture.prototype.detectionQuality = function(detectionQuality) { this.gestureRecognition.detectionQuality(detectionQuality); } @@ -181,7 +182,7 @@ Gesture.prototype.stopVideoCapture = function() { module.exports = { PALM : 0, - PINCH : 1, + FIST : 1, THUMB_UP : 2, detector: Gesture }; diff --git a/docker/package.json b/docker/package.json old mode 100755 new mode 100644 index fbc3f99..f774d4e --- a/docker/package.json +++ b/docker/package.json @@ -4,8 +4,12 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, + "test": "echo \"Error: no test specified\" && exit 1", + "setup": "npm install examples/detection-server/ && sudo cp -r classifiers /usr/local/bin/", + "root-setup": "npm install examples/detection-server && cp -r classifiers /usr/local/bin/", + "build-test-server": "npm install examples/detection-server/ ", + "start-test-server": "node examples/detection-server/server.js " +}, "repository": { "type": "git", "url": "git+ssh://git@bitbucket.org/admobilize/admobilize-gesture.git"