Home

Awesome

<a href='https://modeldepot.io/mikeshi/tiny-yolo-in-javascript'> <img src='https://img.shields.io/badge/ModelDepot-Pre--trained_Model-3d9aff.svg'/> </a>

⚡️ Fast In-Browser Object Detection 👀

Detect objects in images right in your browser using Tensorflow.js! Currently takes ~800ms to analyze each frame on Chrome MBP 13" mid-2014.

Supports Tiny YOLO, as of right now, tfjs does not have support to run any full YOLO models (and your user's computers probably can't handle it either).

Demo

Check out the Live Demo

(You can only get so far with 1 FPS)

yolo person detection

Install

Yarn

yarn add tfjs-yolo-tiny

Or NPM

npm install tfjs-yolo-tiny

Usage Example

import yolo, { downloadModel } from 'tfjs-yolo-tiny';

const model = await downloadModel();
const inputImage = webcam.capture();

const boxes = await yolo(inputImage, model);

// Display detected boxes
boxes.forEach(box => {
  const {
    top, left, bottom, right, classProb, className,
  } = box;

  drawRect(left, top, right-left, bottom-top, `${className} ${classProb}`)
});

API Docs

yolo(input, model, classProbThreshold, iouThreshold, filterBoxesThreshold)

Args

ParamTypeDefaultDescription
inputtf.Tensor-Expected shape (1, 416, 416, 3) Tensor representing input image (RGB 416x416)
modeltf.Model-Tiny YOLO tf.Model
classProbThresholdNumber0.4Don't return detections below a certain class probability.
iouThresholdNumber0.4Don't return boxes that have more intersection over union than a more likely box. See non max suppression.
filterBoxesThresholdNumber0.01Don't return boxes that have a box_prob * class_prob of less than this threshold.

Returns

Returns an array of objects.

PropertyTypeDescription
topNumberPixels from top of image where bounding box starts
leftNumberPixels from left of image where bounding box starts
bottomNumberPixels from top of image where box ends.
rightNumberPixels from left of image where box ends.
classProbNumberProbability of the class in the bounding box.
classNameStringHuman name of the class.

downloadModel(url)

Args

ParamTypeDefaultDescription
urlstringSee DEFAULT_MODEL_LOCATIONTiny YOLO Model config path. See tf.loadModel

Returns

Returns a Promise that can resolve to a tf.Model.

Contributing

PR's are more than welcome! Perf improvement or better test coverage are probably the two biggest areas of immediate need. If you have thoughts on extensibility as well, feel free to open an issue!

Install Dependencies

yarn install

Run Tests

If you're running tests, make sure to yarn add @tensorflow/tfjs@0.7.0 so that you you don't get tfjs package not found errors. If you're developing, make sure to remove tfjs as a dependency, as it'll start using the local version of tfjs intead of the peer version.

Note: Test coverage is poor, definitely don't rely on them to catch your errors.

yarn test

Build

yarn build

Or during development, use watch mode, you can use the demo app to test out changes.

yarn watch