Custom Vision Model for mushroom classification using Bing Images
Creating a mushroom classifier
I'm no mycologist, but am a fun-guy (badum...tish). I know there are a few different types of mushroom about in the wild and some should never be eaten. Here, I'd like to build an image classifier that can identify a few different types of mushroom. I'm a busy guy, so naturally, I don't go around taking photos of every mushroom I come across, therefore I don't have a large photo library of different types of mushrooms. However, Bing has millions of images already indexed and stored and has an API that I can leverage to return them. I can then use these images to create my own mushroom classifier within Microsoft Custom Vision - using the Custom Vision API.
First, we need to grab some images of different types of mushrooms
I've created a simple cross platform CLI to do this: https://github.com/daltskin/Bing-Image-and-Custom-Vision-CLI/tree/master/BingImageCLI
To use we simply provide the arguments for the Bing Search criteria and Bing Search API key eg:
BingImageCLI.exe -k yourkey -s "Amanica muscaria" -l ShareCommercially -p c:\photos\mushroom -m 50 -fmax 4000000BingImageCLI.exe -k yourkey -s "Coprinopsis atramentaria" -l ShareCommercially -p c:\photos\mushroom -m 50 -fmax 4000000BingImageCLI.exe -k yourkey -s "Geastrum triplex" -l ShareCommercially -p c:\photos\mushroom -m 50 -fmax 4000000BingImageCLI.exe -k yourkey -s "Lycoperdon perlatum" -l ShareCommercially -p c:\photos\mushroom -m 50 -fmax 4000000BingImageCLI.exe -k yourkey -s "Psilocybe cubensis, magic" -l ShareCommercially -p c:\photos\mushroom -m 50 -fmax 4000000BingImageCLI.exe -k yourkey -s "Agaricus bisporus" -l ShareCommercially -p c:\photos\mushroom -m 50 -fmax 4000000
This will download over 200 images (some may fail with 403/404s) to the c:\photos\mushroom folder each within their own subfolder of category eg:
You'll want to quickly scan through all the downloaded images, deleting any rogue ones - as some images may have been incorrectly labelled or will simply not be useful for your classifier eg:
Next, we need to create a Custom Vision model for our mushroom classifier
I've created another cross platform CLI to do this: https://github.com/daltskin/Bing-Image-and-Custom-Vision-CLI/blob/master/CustomVisionCLI/Readme.md
To use we simply provide the arguments for the Custom Vision API eg:
CustomVisionCLI.exe -k yourkey -p c:\photos\mushroom" -n Mushroom
This will upload all of the remaining images above, labelling them at the same time and will then train the model. After a couple of minutes you can then test the new classifier with a previously unseen image. You can either do this in the Customvision.ai portal, or again from the CLI tool eg:
CustomVisionCLI.exe -k yourkey -p c:\dump\unseen\mushroom.jpg" -n Mushroom -q
[caption id="attachment_2305" align="alignnone" width="180"] Closed cup mushroom from the local supermarket - not used in the training data[/caption]
[caption id="attachment_2295" align="alignnone" width="300"] Agaricus bisporus correctly identified[/caption]
More details and demo here: https://github.com/daltskin/Bing-Image-and-Custom-Vision-CLI/