/kittydar

Face detection for cats in JavaScript - demo for a TXJS talk

Primary LanguageJavaScript

Kittydar

Kittydar is short for kitty radar. Kittydar takes an image (canvas) and tells you the locations of all the cats in the image:

var cats = kittydar.detectCats(canvas);

console.log("there are", cats.length, "cats in this photo");

console.log(cats[0]);

// { x: 30, y: 200, width: 140, height: 140 }

Kittydar demo

Install

For node:

npm install kittydar

Or grab the browser file

Specifics

Kittydar takes a canvas element. In node you can get a Canvas object with node-canvas.

Kittydar will give an approximate rectangle around the cat's head. Each rectangle has an x and y for the top left corner, and a width and height of the rectangle.

How it works

Kittydar first chops the image up into many "windows" to test for the presence of a cat head. For each window, kittydar first extracts more tractable data from the image's data. Namely, it computes the Histogram of Orient Gradients descriptor of the image, using the hog-descriptor library. This data describes the directions of the edges in the image (where the image changes from light to dark and vice versa) and what strength they are. This data is a vector of numbers that is then fed into a neural network which gives a number from 0 to 1 on how likely the histogram data represents a cat.

The neural network (the JSON of which is located in this repo) has been pre-trained with thousands of photos of cat heads and their histograms, as well as thousands of non-cats. See the repo for the node training scripts.

Limitations

Kittydar will miss cats sometimes, and sometimes classify non-cats as cats. It's best at detecting upright cats that are facing forward, but it can handle a small tilt or turn in the head.

Kittydar isn't fast. It'll take a few seconds to find the cats in one image.

There's lots of room for improvement, so fork and send requests.

Propers