Skip to content

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. S…

License

Notifications You must be signed in to change notification settings

Baker-Chen/ubiquitous-octo-invention

Repository files navigation

Link is failed!

NCHU WE-I Goose.Smith

Smart elevator based on edge computing architecture combined with gesture recognition

Build Status

Link is failed!

Content

Introduction

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.

Demo Video Awesome

Link is failed!

Link is failed!

Implementaion

Hand Detection

Training model: MobileNet

image image image

Results:

  • training curve:
    image
  • confusion matrix:
    image
Y: Hand detected 
N: Hand NOT detect


Gesture Recognition

API: Google MediaPipe

image

  • 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

Control Simulation

  • Elevator Animation

Power Optimization

Innovation & Difficulties

Innovation

  • 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

Difficulties

  • Privacy
  • Multi-gesture recognition
  • Scenes variation
  • Different skin color
  • Different type of gestures
  • Handicapped unfriendly
  • Recognition speed leads to errors

System architecture

Physical Design

Flow Chart

Tools

Hand Detection

  • Himax WE-I Plus
  • TensorFlow Lite
  • Keras

Gesture Recognition

  • NVIDIA Jetson Nano
  • OpenCV
  • MediaPipe API

Control Simulation

  • Elevator animation
  • jQuery
  • Express.js

Required Hardware

Hardware
HC-SR04
Himax WE-I Plus
HDMI screen
NVIDIA Jetson Nano
Logitech Webcam
AC8265 2.4G/5G WiFi BT4.2

Himax WE-I Plus:

NVIDIA Jetson Nano:

Required Software

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

User guide

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__

Link is failed!

About

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. S…

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published