Code Monkey home page Code Monkey logo

foodcamclassifier's Introduction

Foodcam Classifier
==================
A Bag Of Visual Words classifier for MIT Media Lab's Foodcam.
Built using OpenCV 2.3

Implementing BOVW method: Visual Categorization with Bags of Keypoints by Gabriella Csurka, Christopher R. Dance, Lixin Fan, Jutta Willamowski, Cedric Bray, 2004.
Using Opponent-Color SURF features (192 floats): Van de Sande et al., CGIV 2008 Color Descriptors for Object Category Recognition. (they used SIFT)
Radial Basis Function SVMs for classification.

This is basically a primer to BOVW methods using OpenCV, which are dead simple.
I tweaked the basic method by:
	- using background subtraction (since these are pictures from a still camera).
	- using a sliding window. This enables better multi-class decisions, and actually paves the path to image segmentation. 


Compiling
---------
Basically, just run:
cmake -D CMAKE_CXX_FLAGS=-fopenmp . ; make -j4

CMake should take you all the way, but I also have an .xcodeproj/ included.

Working it
----------
Get the dataset:
http://fay.media.mit.edu/foodcamimages.zip
Assume the dataset is now in the same directory, under foodcamimages/.


Manually classify training and test:
./manual-classifier foodcamimages/TRAIN/ train.txt
./manual-classifier foodcamimages/TEST/ test.txt
(or you can use my manual classification included... lazy)


Create a background image:
./make-test-background


Build the vocabulary: (this will take a very very long time, KMeans on 1.3Million 192-long vectors to find 1000 cluster-centers...)
./build-vocabulary

(you may also like to use ./kmeans-trainer, if you break the operation before KMeans finished, which may take more than 10 hours)


Train the classifiers:
./train-bovw vocabulary_color_1000.yml with_color

(you may also make use of './train-SVM-alone', if you just wanna tweak the SVM parameters)


Test your work:
./test-classifiers 
(it will output a whole lotta things, and then the confusion matrix in neighbors list form)


Put it to work!:
./foodcam-predict some_640x480_image_of_food.png
Will output either one or two found classes of food, based on how close the prediction is.


Notes
-----
Some of the computation is sped up on multi-core machines by using OpenMP, so it's recommended to use it.


Results
-------
This is the confusion matrix:
classified ->	cookies	indian	italian	pizza	veggie+fruit	sandwiches
cookies		56.3%	0.0%	4.3%	0.0%	13.5%		15.4%
indian		0.0%	71.4%	6.4%	3.8%	3.4%		7.7%
italian		0.0%	0.0%	63.8%	0.0%	14.6%		0.0%
pizza		6.3%	0.0%	12.8%	92.3%	5.6%		15.4%
veggie+fruit	0.0%	0.0%	2.1%	3.8%	49.4%		0.0%
sandwiches	25.0%	14.3%	6.4%	0.0%	7.9%		61.5%

Quick scan shows that it can classify Pizzas pretty good!
The downfall are the veggie+fruit class, with less than 50% accuracy.
Rest are lukewarm, but this can probably be attribued to the very small training set.

foodcamclassifier's People

Contributors

royshil avatar

Stargazers

Lakshmi avatar

Watchers

James Cloos avatar Lakshmi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.