Package org.opencv.face
Class MACE
- java.lang.Object
-
- org.opencv.core.Algorithm
-
- org.opencv.face.MACE
-
public class MACE extends Algorithm
Minimum Average Correlation Energy Filter useful for authentication with (cancellable) biometrical features. (does not need many positives to train (10-50), and no negatives at all, also robust to noise/salting) see also: CITE: Savvides04 this implementation is largely based on: https://code.google.com/archive/p/pam-face-authentication (GSOC 2009) use it like:Ptr<face::MACE> mace = face::MACE::create(64); vector<Mat> pos_images = ... mace->train(pos_images); Mat query = ... bool same = mace->same(query);
you can also use two-factor authentication, with an additional passphrase:String owners_passphrase = "ilikehotdogs"; Ptr<face::MACE> mace = face::MACE::create(64); mace->salt(owners_passphrase); vector<Mat> pos_images = ... mace->train(pos_images); // now, users have to give a valid passphrase, along with the image: Mat query = ... cout << "enter passphrase: "; string pass; getline(cin, pass); mace->salt(pass); bool same = mace->same(query);
save/load your model:Ptr<face::MACE> mace = face::MACE::create(64); mace->train(pos_images); mace->save("my_mace.xml"); // later: Ptr<MACE> reloaded = MACE::load("my_mace.xml"); reloaded->same(some_image);
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
MACE(long addr)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static MACE
__fromPtr__(long addr)
static MACE
create()
constructorstatic MACE
create(int IMGSIZE)
constructorprotected void
finalize()
static MACE
load(java.lang.String filename)
constructorstatic MACE
load(java.lang.String filename, java.lang.String objname)
constructorvoid
salt(java.lang.String passphrase)
optionally encrypt images with random convolutionboolean
same(Mat query)
correlate query img and threshold to min class valuevoid
train(java.util.List<Mat> images)
train it on positive features compute the mace filter:h = D(-1) * X * (X(+) * D(-1) * X)(-1) * C
also calculate a minimal threshold for this class, the smallest self-similarity from the train images-
Methods inherited from class org.opencv.core.Algorithm
clear, empty, getDefaultName, getNativeObjAddr, save
-
-
-
-
Method Detail
-
__fromPtr__
public static MACE __fromPtr__(long addr)
-
salt
public void salt(java.lang.String passphrase)
optionally encrypt images with random convolution- Parameters:
passphrase
- a crc64 random seed will get generated from this
-
train
public void train(java.util.List<Mat> images)
train it on positive features compute the mace filter:h = D(-1) * X * (X(+) * D(-1) * X)(-1) * C
also calculate a minimal threshold for this class, the smallest self-similarity from the train images- Parameters:
images
- a vector<Mat> with the train images
-
same
public boolean same(Mat query)
correlate query img and threshold to min class value- Parameters:
query
- a Mat with query image- Returns:
- automatically generated
-
load
public static MACE load(java.lang.String filename, java.lang.String objname)
constructor- Parameters:
filename
- build a new MACE instance from a pre-serialized FileStorageobjname
- (optional) top-level node in the FileStorage- Returns:
- automatically generated
-
load
public static MACE load(java.lang.String filename)
constructor- Parameters:
filename
- build a new MACE instance from a pre-serialized FileStorage- Returns:
- automatically generated
-
create
public static MACE create(int IMGSIZE)
constructor- Parameters:
IMGSIZE
- images will get resized to this (should be an even number)- Returns:
- automatically generated
-
create
public static MACE create()
constructor- Returns:
- automatically generated
-
-