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: + +![alt text](https://github.com/dfeng99/matrix-gesture-node-sdk/raw/master/docker/examples/gestureAI.png "Test over Video Stream") + +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 @@
-
+
+
+
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec ex hendrerit, ultrices risus vitae, imperdiet ex. Curabitur justo quam, porta nec lectus at, lobortis lobortis urna. Nulla maximus sagittis velit, eu dignissim arcu rhoncus a. Morbi metus metus, feugiat pharetra velit vel, egestas iaculis mauris. Nam malesuada neque eget aliquet ultricies. Curabitur elementum varius metus, nec fringilla dolor congue laoreet. Aliquam a enim sem. Curabitur ac laoreet leo. Morbi sed orci erat. - -Phasellus non libero massa. Proin posuere viverra orci eu dignissim. Suspendisse viverra, tellus a lacinia porttitor, nisl dolor facilisis lectus, nec rutrum massa ante non mauris. Morbi sodales tempor turpis ut aliquam. Mauris aliquam sit amet elit ac euismod. Nulla non euismod enim. Suspendisse semper ipsum quis massa facilisis, quis facilisis enim auctor. Duis leo turpis, maximus et pharetra sed, posuere sed nulla. Mauris vel sem eget nulla pulvinar tempor interdum vel lectus. Duis sit amet consectetur justo. Ut in eros vel mauris eleifend luctus. - -Pellentesque feugiat blandit ullamcorper. Donec eget purus nec augue tincidunt dapibus. Aliquam eget felis posuere, egestas lorem vitae, malesuada arcu. Morbi velit tortor, dictum nec consequat vitae, congue eu urna. Sed auctor accumsan bibendum. Sed non auctor sem. Nullam hendrerit pretium ex, ut scelerisque lorem luctus eget. Morbi lacinia accumsan eros at posuere. Quisque vestibulum et odio sed luctus. Nunc neque orci, vehicula vel pulvinar et, maximus quis purus. Donec pretium sed orci sed porta. - -Integer ultrices condimentum mauris, vel rutrum risus auctor mattis. Praesent fringilla eleifend tellus, at laoreet quam vehicula in. Praesent commodo imperdiet odio in laoreet. Sed hendrerit velit et lectus interdum, sit amet luctus metus commodo. Aliquam erat volutpat. Morbi aliquet eros quis consectetur condimentum. Curabitur suscipit, sapien et placerat ultricies, enim arcu lobortis nulla, ut varius augue nulla in metus. Cras porta sed lorem non sodales. Suspendisse faucibus, justo sit amet euismod posuere, diam quam efficitur nisl, at imperdiet metus nisi in orci. In a leo pulvinar, lobortis ex vitae, dapibus dolor. Nulla sodales arcu ut dolor tristique, quis suscipit urna maximus. Sed accumsan sapien id ante egestas ullamcorper. Aenean ac elit a purus porttitor hendrerit vel a nisl. - -Mauris magna ligula, pretium sed volutpat sit amet, porta id erat. Nulla aliquet commodo tellus, ut aliquet diam tincidunt non. Aliquam condimentum tincidunt fringilla. Quisque sed laoreet nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum tincidunt porttitor eros, eget tristique neque venenatis ac. Donec cursus blandit tellus, vel consequat eros eleifend egestas. Pellentesque sagittis lobortis eros eget accumsan. Pellentesque consequat ex eget felis semper hendrerit. Suspendisse cursus elit id metus mattis, consectetur lacinia nunc ornare. Mauris ut odio sed nunc dignissim porta. +

Hello David

diff --git a/docker/examples/detection-server/public/js/camera-capture.js b/docker/examples/detection-server/public/js/camera-capture.js index 0fbe362..eaa0cbc 100644 --- a/docker/examples/detection-server/public/js/camera-capture.js +++ b/docker/examples/detection-server/public/js/camera-capture.js @@ -1,5 +1,6 @@ 'use strict'; + window.onload = function(argument){ @@ -8,7 +9,12 @@ window.onload = function(argument){ var ctx = canvas.getContext('2d'); var localMediaStream = null; var socket = io(); - var resultsContent = document.getElementById('results'); + var resultsContent = document.getElementById('results'); + + var para0 = document.createElement("P"); // Create a

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"