Skip to content

Latest commit

 

History

History
49 lines (39 loc) · 8.93 KB

README.md

File metadata and controls

49 lines (39 loc) · 8.93 KB

Applications for the NCSDK

This directory contains subdirectories for applications that make use of the NCSDK. Typically the applications here make use of one or more of the neural networks in the caffe, and/or tensorflow directories. They are also intended to be more involved and provide more of a real world application of the networks rather than simply serving as an example of the technology. The sections below are categorized by application type and present the currently available applications in the repository in succinct lists.

Each application directory has a README that explains how to build and run it, as well as a Makefile that automates the steps for you. The links in the tables below will take you to the README files for each application.

Image Classification Applications

Image classification applications typically use one of the image classification networks in the repository to classify an image as to it's likeliness to be in each of the classes on which a network was trained. For a step by step tutorial on how to build an image classification network look at Build an Image Classifier in 5 steps at the Intel® Movidius™ Neural Compute Stick Blog

Image Classification Application Description ++++++Thumbnail++++++
image-classifier

*Canonical Image Classification Example
Python
Multiple Networks
Project that accompanies the blog https://movidius.github.io/blog/ncs-image-classifier/.. If you are getting started with image classification this is a good first stop.
MultiStick_GoogLeNet Python
Caffe GoogLeNet
Image classification on multiple devices. Shows scalability by using one GUI window to show inferences on a single stick and another window to show multiple sticks
MultiStick_TF_Inception Python
TensorFlow Inception
Image classification on multiple devices.
classifier-gui Python
Multiple Network
GUI to select network and image to classify.
gender_age_lbp C++
Caffe AgeNet, GenderNet
Uses AgeNet and GenderNet to predict age and gender of people in a live camera feed. The camera feed is displayed with a box overlayed around the faces and a label for age and gender of the person. The face detection is done with OpenCV.
live-image-classifier Python
Multiple Networks
Performs image classification on a live camera feed. This project was used to build a battery powered, RPi based, portable inference device (although RPi isn't required.) You can read more about this project at this NCS developer blog https://movidius.github.io/blog/battery-powered-dl-engine/.
log-image-classifier Python
Multiple Networks
Application logs results of an image classifier into a comma-separated values (CSV) file. Run inferences sequentially (and recursively) on all images within a folder.
rapid-image-classifier Python
Multiple Networks
Performs image classification on a large number of images. This sample code was used to validate a Dogs vs Cats classifier built using a customized version of GoogLeNet. You can read more about this project (and a step-by-step guide) here https://movidius.github.io/blog/deploying-custom-caffe-models/.
stream_infer Python
Caffe SqueezeNet
Uses gstreamer to grab frames from a live camera stream and run inferences on them while displaying top results in real time.
video_face_matcher Python
TensorFlow FaceNet
Uses the tensorflow/FaceNet network to identify faces in a camera video stream. A single face image is used as the key and when a face in the video stream matches the key, a green frame is overlayed on the video feed.
video_face_matcher_multipleFace Python
TensorFlow FaceNet
Similar to the video_face_matcher application but supports matching multiple faces
topcoder_example Python
Multiple Networks
Contains all supporting files needed to generate submissions.zip file, which would then be uploaded to the TopCoder leaderboard for automatic scoring of the NCS competition described here: https://developer.movidius.com/competition. This program may be useful as a reference for doing accuracy calculations.

Object Detection Applications

Object detection appliations make use of one of the object detection networks in the repository to detect objects within an image. The object detection networks typically determine where objects are within the image as well as what type of objects they are.

Object Detection Application Description +++++Thumbnail+++++
birds Python
Caffe Tiny Yolo, GoogLeNet
Detects and identifies birds in photos by using Yolo Tiny to identify birds in general and then GoogLeNet to further classify them. Displays images with overlayed rectangles bird classification.
stream_ty_gn Python
Caffe Tiny Yolo, GoogLeNet
Sends frames of live camera stream to Tiny Yolo for object detection and then crops each object and sends that to GoogLeNet for further classification. This application requires two NCS devices, one for each network. Look at this example for straight forward example, but look at the threaded version if you are interested in better performance.
stream_ty_gn_threaded Python
Caffe Tiny Yolo, GoogLeNet
Sends frames of live camera stream to Tiny Yolo for object detection and then crops each object and sends that to GoogLeNet for further classification. This application requires two NCS devices, one for each network. This is a threaded, better performing, and slightly more complex version of the stream_ty_gn application.
street_cam Python
Caffe TinyYolo, GoogLeNet
Processes a video file (presumably produced by a street camera) and overlays boxes and labels around the objects detected. Objects are detected by Tiny Yolo and then further classified by GoogLeNet. This requires two NCS devices. Look at this example for straight forward example, but look at the threaded version if you are interested in better performance.
street_cam_threaded Python
Caffe TinyYolo, GoogLeNet
Processes a video file (presumably produced by a street camera) and overlays boxes and labels around the objects detected. Objects are detected by Tiny Yolo and then further classified by GoogLeNet. This requires two NCS devices. This is a threaded, better performing, and more complex version of the street_cam application.
video_objects Python
Caffe SSD MobileNet
Processes a video file and overlays boxes and labels around the objects detected and displays results in a GUI as frames are available.

Misc Applications

Miscellaneous applications use the NCSDK in various ways that don't fit into any of the above categories but can still be interesting.

Misc Application Description +++++Thumbnail+++++
benchmarkncs Python
Multiple Network
Outputs FPS numbers for networks in the repository that take images as input. If multiple NCS devices are plugged in will give numbers for one device and for multiple.
hello_ncs_cpp C++
No Networks
Simple example demonstrating how compile, run, as well as open and close a device in C++ application.
hello_ncs_py Python
No Networks
Simple example demonstrating how open and close a device in Python and run the program.
multistick_cpp Python
Caffe SqueezeNet, GoogLeNet
Simple example demonstrating how to use multiple devices and networks in a C++ application.