Skip to content

TehSnappy/ocv_photo_analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OcvPhotoAnalyzer

OcvPhotoAnalyzer provides access to histograms and color clustering analysis of photos to elixir through OpenCV.

Installation

The package can be installed by adding ocv_photo_analyzer to your list of dependencies in mix.exs:

def deps do
  [
    {:ocv_photo_analyzer, "~> 1.0.0"}
  ]
end

Usage

There is only one public function in this package at present:

OcvPhotoAnalyzer.analyze(absolute_file_path)

In this case both analyses would be run on the file. If you don't want to run both you can narrow that down.

OcvPhotoAnalyzer.analyze(absolute_file_path, [:histogram])

If you'd like to run the color clustering with different parameters than the default, or the values you provide in the config, you can do that also.

OcvPhotoAnalyzer.analyze(absolute_file_path, [:dominant], %{clusters: 3})

Notes

Histogram generation is usually pretty fast.

Color clustering can take a long time depending on the image and the parameters passed to the clustering algorithm. For this reason the analysis_size parameter has been added to the configs. Prior to performing the clustering analysis the image will be resized to where its largest maximum dimension is the value in analysis_size. This can greatly speed with analysis without affecting the results too much.

The histogram is always calculated from the full size image.

These settings can be set in the configuration for your app. The default settings, which are listed below, will be applied in the absence of a config.

  config :ocv_photo_analyzer, OcvPhotoAnalyzer.Analyzer,
    clusters: 5,
    iterations: 10,
    attempts: 5,
    precision: 0.1,
    analysis_size: 1000

These values (other than analysis_size) are passed directly to the OpenCV kmeans function which is explained in some detail in the OpenCV docs here.

All parameters in the config can be overridden by passing them as a map in the overrrides param.

Returned Values

It returns a Map in the following format. Note that the :histogram and :dominant keys will only be present if that analysis was performed.

    %{
        histogram: %{
          r: [0, 10, 31, 3, ..., 20, 76],
          g: [0, 20, 55, 5, ..., 24, 4],
          b: [0, 11, 3, 55, ..., 40, 7]
        },
        dominant: [
          %{
            r: 12,
            g: 200,
            b: 120
          },
          %{
            r: 124,
            g: 20,
            b: 12
          },
          %{
            r: 52,
            g: 50,
            b: 20
          }
        ]
    }

About

OcvPhotoAnalyzer provides access to histograms and color clustering analysis of photos to elixir through OpenCV.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published