/keras-image-classification-wrapper

A thin wrapper around keras image classification applications.

Primary LanguagePythonThe UnlicenseUnlicense

keras-image-classification-wrapper

A thin wrapper around keras image classification applications.

Installation

pip install keras-image-classification-wrapper

Usage

def classify(
    image: Union[str, bytes, pillow.Image.Image],
    results: int = 3,
    model: str = INCEPTIONV3,
) -> tuple:

Classify an image.

results has to be less that 5, since keras applications don't give more than five results.

model has to be one of: XCEPTION, VGG16, VGG19, RESNET50, RESNET101, RESNET152, RESNET50V2, RESNET101V2, RESNET152V2, RESNETRS101, RESNETRS152, RESNETRS200, RESNETRS270, RESNETRS350, RESNETRS420, REGNETX002, REGNETX004, REGNETX006, REGNETX008, REGNETX016, REGNETX032, REGNETX040, REGNETX064, REGNETX080, REGNETX120, REGNETX160, REGNETX320, REGNETY002, REGNETY004, REGNETY006, REGNETY008, REGNETY016, REGNETY032, REGNETY040, REGNETY064, REGNETY080, REGNETY120, REGNETY160, REGNETY320, INCEPTIONV3, INCEPTIONRESNETV2, MOBILENET, MOBILENETV2, MOBILENETV3SMALL, MOBILENETV3LARGE, DENSENET121, DENSENET169, DENSENET201, NASNETMOBILE, NASNETLARGE, EFFICIENTNETB0, EFFICIENTNETB1, EFFICIENTNETB2, EFFICIENTNETB3, EFFICIENTNETB4, EFFICIENTNETB5, EFFICIENTNETB6, EFFICIENTNETB7, EFFICIENTNETV2B0, EFFICIENTNETV2B1, EFFICIENTNETV2B2, EFFICIENTNETV2B3, EFFICIENTNETV2S, EFFICIENTNETV2M, EFFICIENTNETV2L. Take a look at model characteristics, if you are not sure, which one to choose.

def load_model(model: str) -> None:

Preload a model.

Loading of desired model is done automatically at the first call of classify. But it can take significant time, if weights need to be downloaded. So you can preload a model.

Usage examples

With local files:

import keras_image_classification as image_classification

file_path = "path/to/image.png"

labels = image_classification.classify(file_path, results = 3,
                                       model = image_classification.INCEPTIONV3)
print(labels)

With byte-like objects (here with requests):

import requests
import keras_image_classification as image_classification

response = requests.get("https://http.cat/100")
assert response.status_code == 200

labels = image_classification.classify(response.content, results = 3,
                                       model = image_classification.INCEPTIONV3)
print(labels)

You can also pass pillow images directly:

import PIL as pillow
import keras_image_classification as image_classification

file_path = "path/to/image.png"
image = pillow.Image.open(file_path)

labels = image_classification.classify(image, results = 3,
                                       model = image_classification.INCEPTIONV3)
print(labels)

Output:

({'imagenet_id': 'n02123394', 'label': 'Persian_cat', 'probability': 0.7993967533111572},
 {'imagenet_id': 'n06359193', 'label': 'web_site', 'probability': 0.03162319213151932},
 {'imagenet_id': 'n03598930', 'label': 'jigsaw_puzzle', 'probability': 0.013497020117938519})