- Introduction
- Demo Video
- Implementation
- Power Optimization
- Innovation & Difficulties
- System architecture
- Physical Design
- Flow Chart
- Tools
- Required Hardware
- Required Software
- User guide
In the post pandemic era, zero-contact technology has become a trend. Among them, elevators play a significant role in spreading the virus due to the space in elevators are commonly small, closed and crowded. It is easy to be infected because people frequently interact with the elevator button panel and talk to each other in the same elevator. So we want to achieve a smart elevator button panel that can recognize the specific gestures and an always-on system through the benefits of Himax WE-I Plus ultra-low power consumption and AI acceleration. Reduce operation complexity and overall power consumption through a distributed computing architecture of edge computing.
This project combines the advantage of Himax WE-I Plus (ultra low power AI acceleration embedded ASIC) and NVIDIA Jetson Nano. We use cygwin to transfer the pretrained model into Tensorflow Lite’s form, and detect the hand movement through Himax WE-I Plus. After the process of the gesture recognition on NVIDIA Jetson Nano, we send the output to a remote server to control the elevator.
Training model: MobileNet
Results:
Y: Hand detected
N: Hand NOT detect
API: Google MediaPipe
- Idle state
Enter the IDLE state when no hand or any object detected
- Triggered state
Open camera and start gesture recognition
- Identified gesture
“ok” gesture as input trigger signal
“1” ~ “9” gesture as select floors signal
There are also "open" and "close" gesture that can be used to open or close the elevator
Other gesture as unknown
- Elevator Animation
- Control the elevator with gesture recognition
- Always-on system
- Use ultra-low power AI ASIC (Himax WE-I Plus) as the trigger unit
- Low latency, real-time hand detection and gesture recognition
- Support continuous floors input
- Simulate elevator flow control through JavaScript
- Use gesture recognition to remotely control server
- Combination of high OPS unit and low power edge sensor
- Privacy
- Multi-gesture recognition
- Scenes variation
- Different skin color
- Different type of gestures
- Handicapped unfriendly
- Recognition speed leads to errors
Hand Detection
- Himax WE-I Plus
- TensorFlow Lite
- Keras
Gesture Recognition
- NVIDIA Jetson Nano
- OpenCV
- MediaPipe API
Control Simulation
- Elevator animation
- jQuery
- Express.js
Hardware |
HC-SR04 |
Himax WE-I Plus |
HDMI screen |
NVIDIA Jetson Nano |
Logitech Webcam |
AC8265 2.4G/5G WiFi BT4.2 |
Software | Version |
distro-info | 0.18ubuntu0.18.04.1 |
Jetson.GPIO | 2.0.17 |
matplotlib | 2.1.1 |
mediapipe | 0.8.5-cuda102 |
numpy | 1.19.4 |
opencv-contrib-python | 4.5.3.56 |
pip | 21.1.3 |
pyserial | 3.5 |
python-apt | 1.6.5+ubuntu0.6 |
requests | 2.18.4 |
requests-unixsocket | 0.1.5 |
dir tree
dir_tree.txt
├─Elvator_Animation
│ ├─Elvator_Animation
│ │ └─public
│ │ ├─css
│ │ ├─images
│ │ └─js
│ └─node_modules
│ ├─.bin
│ ├─@sindresorhus
│ │ └─is
│ │ └─dist
│ ├─@szmarczak
│ │ └─http-timer
│ │ └─source
│ ├─abbrev
│ ├─accepts
│ ├─ansi-align
│ │ └─node_modules
│ │ ├─ansi-regex
│ │ ├─emoji-regex
│ │ │ └─es2015
│ │ ├─is-fullwidth-code-point
│ │ ├─string-width
│ │ └─strip-ansi
│ ├─ansi-regex
│ ├─ansi-styles
│ ├─anymatch
│ ├─array-flatten
│ ├─balanced-match
│ │ └─.github
│ ├─binary-extensions
│ ├─body-parser
│ │ └─lib
│ │ └─types
│ ├─boxen
│ ├─brace-expansion
│ ├─braces
│ │ └─lib
│ ├─bytes
│ ├─cacheable-request
│ │ ├─node_modules
│ │ │ ├─get-stream
│ │ │ └─lowercase-keys
│ │ └─src
│ ├─camelcase
│ ├─chalk
│ │ ├─node_modules
│ │ │ ├─has-flag
│ │ │ └─supports-color
│ │ └─source
│ ├─chokidar
│ │ ├─lib
│ │ └─types
│ ├─ci-info
│ ├─cli-boxes
│ ├─clone-response
│ │ └─src
│ ├─color-convert
│ ├─color-name
│ ├─concat-map
│ │ ├─example
│ │ └─test
│ ├─configstore
│ ├─content-disposition
│ ├─content-type
│ ├─cookie
│ ├─cookie-signature
│ ├─crypto-random-string
│ ├─debug
│ │ └─src
│ ├─decompress-response
│ ├─deep-extend
│ │ └─lib
│ ├─defer-to-connect
│ │ └─dist
│ ├─depd
│ │ └─lib
│ │ ├─browser
│ │ └─compat
│ ├─destroy
│ ├─dot-prop
│ ├─duplexer3
│ ├─ee-first
│ ├─emoji-regex
│ │ └─es2015
│ ├─encodeurl
│ ├─end-of-stream
│ ├─escape-goat
│ ├─escape-html
│ ├─etag
│ ├─express
│ │ └─lib
│ │ ├─middleware
│ │ └─router
│ ├─fill-range
│ ├─finalhandler
│ ├─forwarded
│ ├─fresh
│ ├─get-stream
│ ├─glob-parent
│ ├─global-dirs
│ ├─got
│ │ └─source
│ │ └─utils
│ ├─graceful-fs
│ ├─has-flag
│ ├─has-yarn
│ ├─http-cache-semantics
│ ├─http-errors
│ ├─iconv-lite
│ │ ├─encodings
│ │ │ └─tables
│ │ └─lib
│ ├─ignore-by-default
│ ├─import-lazy
│ ├─imurmurhash
│ ├─inherits
│ ├─ini
│ ├─ipaddr.js
│ │ └─lib
│ ├─is-binary-path
│ ├─is-ci
│ ├─is-extglob
│ ├─is-fullwidth-code-point
│ ├─is-glob
│ ├─is-installed-globally
│ ├─is-npm
│ ├─is-number
│ ├─is-obj
│ ├─is-path-inside
│ ├─is-typedarray
│ ├─is-yarn-global
│ ├─json-buffer
│ │ └─test
│ ├─keyv
│ │ └─src
│ ├─latest-version
│ ├─lowercase-keys
│ ├─make-dir
│ │ └─node_modules
│ │ ├─.bin
│ │ └─semver
│ │ └─bin
│ ├─media-typer
│ ├─merge-descriptors
│ ├─methods
│ ├─mime
│ │ └─src
│ ├─mime-db
│ ├─mime-types
│ ├─mimic-response
│ ├─minimatch
│ ├─minimist
│ │ ├─example
│ │ └─test
│ ├─ms
│ ├─negotiator
│ │ └─lib
│ ├─nodemon
│ │ ├─bin
│ │ ├─doc
│ │ │ └─cli
│ │ ├─lib
│ │ │ ├─cli
│ │ │ ├─config
│ │ │ ├─help
│ │ │ ├─monitor
│ │ │ ├─rules
│ │ │ └─utils
│ │ └─node_modules
│ │ ├─debug
│ │ │ └─src
│ │ └─ms
│ ├─nopt
│ │ ├─bin
│ │ ├─examples
│ │ └─lib
│ ├─normalize-path
│ ├─normalize-url
│ ├─on-finished
│ ├─once
│ ├─p-cancelable
│ ├─package-json
│ │ └─node_modules
│ │ ├─.bin
│ │ └─semver
│ │ └─bin
│ ├─parseurl
│ ├─path-to-regexp
│ ├─picomatch
│ │ └─lib
│ ├─prepend-http
│ ├─proxy-addr
│ ├─pstree.remy
│ │ ├─lib
│ │ └─tests
│ │ └─fixtures
│ ├─pump
│ ├─pupa
│ ├─qs
│ │ ├─dist
│ │ ├─lib
│ │ └─test
│ ├─range-parser
│ ├─raw-body
│ ├─rc
│ │ ├─lib
│ │ └─test
│ ├─readdirp
│ ├─registry-auth-token
│ ├─registry-url
│ ├─responselike
│ │ └─src
│ ├─safe-buffer
│ ├─safer-buffer
│ ├─semver
│ │ └─bin
│ ├─semver-diff
│ │ └─node_modules
│ │ ├─.bin
│ │ └─semver
│ │ └─bin
│ ├─send
│ │ └─node_modules
│ │ └─ms
│ ├─serve-static
│ ├─setprototypeof
│ │ └─test
│ ├─signal-exit
│ ├─statuses
│ ├─string-width
│ ├─strip-ansi
│ ├─strip-json-comments
│ ├─supports-color
│ ├─term-size
│ │ └─vendor
│ │ ├─macos
│ │ └─windows
│ ├─to-readable-stream
│ ├─to-regex-range
│ ├─toidentifier
│ ├─touch
│ │ └─bin
│ ├─type-fest
│ │ └─source
│ ├─type-is
│ ├─typedarray-to-buffer
│ │ └─test
│ ├─undefsafe
│ │ └─lib
│ ├─unique-string
│ ├─unpipe
│ ├─update-notifier
│ ├─url-parse-lax
│ ├─utils-merge
│ ├─vary
│ ├─widest-line
│ ├─wrappy
│ ├─write-file-atomic
│ └─xdg-basedir
├─Himax_WEI_Plus
│ ├─1_tfTrain
│ ├─2_tfLite
│ │ └─generated
│ └─3_firmware
│ ├─hand_detection
│ │ └─src
│ ├─inc
│ └─src
└─NVIDIA_Jetson_Nano
└─src
└─__pycache__