Image.Classification (image v0.62.0)
View SourceImplements image classification functions using Axon machine learning models managed by Bumblebee.
Image classification refers to the task of extracting information from an image. In this module, the information extracted is one or more labels desribing the image. Typically something like "sports car" or "Blenheim spaniel". The labels returns depend on the machine learning model used.
Configuration
The machine learning model to be used is configurable.
The :model and :featurizer may be any model supported by Bumblebee. Any
additional options can be supplied as keyword lists under the :model_options
and :featureizer_options keys. The :name is the name given to the classification
service process.
The default configuration is:
# runtime.exs
config :image, :classifier,
model: {:hf, "microsoft/resnet-50"},
featurizer: {:hf, "microsoft/resnet-50"},
model_options: [],
featurizer_options: [],
batch_size: 10,
name: Image.Classification.Server,
autostart: trueAutostart
If autostart: true is configured (the default) then a process
is started under a supervisor to execute the classification
requests. If running the process under an application
supervision tree is desired, set autostart: false. In that
case the function classifer/1 can be
used to return a Supervisor.child_spec/0.
Adding a classification server to an application supervision tree
To add image classification to an application supervision tree,
use Image.Classification.classifier/1 to return a child spec:
For example:
# Application.ex
def start(_type, _args) do
children = [
# default classifier configuration
Image.Classification.classifier()
# custom classifier configuration
Image.Classification.classifier(model: {:hf, "google/vit-base-patch16-224"},
featurizer: {:hf, "google/vit-base-patch16-224"})
]
Supervisor.start_link(
children,
strategy: :one_for_one
)
endLimitations
This module is provided as a convenience to make it easy and idiomatic to perform simple classification tasks while still managing CPU capacity.
For more complex classification requirements it is recommended to use Bumblebee directly.
Note
This module is only available if the optional dependency
Bumblebee is configured in
mix.exs.
Summary
Functions
Returns a child spec suitable for starting an image classification process as part of a supervision tree.
Classify an image using a machine learning model.
Classify an image using a machine learning model and return the labels that meet a minimum score.
Functions
Returns a child spec suitable for starting an image classification process as part of a supervision tree.
Arguments
configurationis a keyword list of options which are merged over the default configuration.
Configuration keys
:modelis any supported machine learning model for image classification supported by Bumblebee.:featurizeris any supported machine learning model for image featurization supported by Bumblebee.:model_optionsis a keyword list of options that are passed toBumblebee.load_model/2.:featurizer_optionsis a keyword list of options that are passed toBumblebee.load_featurizer/2.:nameis the name given to the classification process when it is started.:batch_sizeis the batch size passed toBumblebee.Vision.image_classification/3,
Default configuration
The default configuration is:
config :image, :classifier,
model: {:hf, "microsoft/resnet-50"},
featurizer: {:hf, "microsoft/resnet-50"},
model_options: [],
featurizer_options: [],
batch_size: 10,
name: Image.Classification.Server,
autostart: true
@spec classify(image :: Vix.Vips.Image.t(), Keyword.t()) :: %{predictions: [%{label: String.t(), score: float()}]} | {:error, Image.error_message()}
Classify an image using a machine learning model.
Arguments
imageis anyVix.Vips.Image.t/0.optionsis a keyword list of options
Options
:backendis any validNxbackend. The default isNx.default_backend/0.:serveris the name of the process performing the classification service. The default isImage.Classification.Server.
Returns
- A map containing the predictions of the image classification.
Example
iex> puppy = Image.open!("./test/support/images/puppy.webp")
iex> %{predictions: [%{label: "Blenheim spaniel", score: _} | _rest]} =
...> Image.Classification.classify(puppy)
@spec labels(image :: Vix.Vips.Image.t(), options :: Keyword.t()) :: [String.t()] | {:error, Image.error_message()}
Classify an image using a machine learning model and return the labels that meet a minimum score.
Arguments
imageis anyVix.Vips.Image.t/0.optionsis a keyword list of options.
Options
:backendis any validNxbackend. The default isNx.default_backend/0.:min_scoreis the minimum score, a float between0.0and1.0, which a label must match in order to be returned.
Returns
A list of labels. The list may be empty if there are no predictions that exceed the
:min_score.{:error, reason}
Example
iex> {:ok, image} = Image.open ("./test/support/images/lamborghini-forsennato-concept.jpg")
iex> Image.Classification.labels(image)
["sports car", "sport car"]