//
// This file is auto-generated. Please don't modify it!
//
package org.opencv.face;
import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Algorithm;
import org.opencv.core.Mat;
import org.opencv.face.MACE;
import org.opencv.utils.Converters;
// C++: class MACE
/**
* 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);
*
*/
public class MACE extends Algorithm {
protected MACE(long addr) { super(addr); }
// internal usage only
public static MACE __fromPtr__(long addr) { return new MACE(addr); }
//
// C++: void cv::face::MACE::salt(String passphrase)
//
/**
* optionally encrypt images with random convolution
* @param passphrase a crc64 random seed will get generated from this
*/
public void salt(String passphrase) {
salt_0(nativeObj, passphrase);
}
//
// C++: void cv::face::MACE::train(vector_Mat images)
//
/**
* train it on positive features
* compute the mace filter: {@code 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
* @param images a vector<Mat> with the train images
*/
public void train(List images) {
Mat images_mat = Converters.vector_Mat_to_Mat(images);
train_0(nativeObj, images_mat.nativeObj);
}
//
// C++: bool cv::face::MACE::same(Mat query)
//
/**
* correlate query img and threshold to min class value
* @param query a Mat with query image
* @return automatically generated
*/
public boolean same(Mat query) {
return same_0(nativeObj, query.nativeObj);
}
//
// C++: static Ptr_MACE cv::face::MACE::load(String filename, String objname = String())
//
/**
* constructor
* @param filename build a new MACE instance from a pre-serialized FileStorage
* @param objname (optional) top-level node in the FileStorage
* @return automatically generated
*/
public static MACE load(String filename, String objname) {
return MACE.__fromPtr__(load_0(filename, objname));
}
/**
* constructor
* @param filename build a new MACE instance from a pre-serialized FileStorage
* @return automatically generated
*/
public static MACE load(String filename) {
return MACE.__fromPtr__(load_1(filename));
}
//
// C++: static Ptr_MACE cv::face::MACE::create(int IMGSIZE = 64)
//
/**
* constructor
* @param IMGSIZE images will get resized to this (should be an even number)
* @return automatically generated
*/
public static MACE create(int IMGSIZE) {
return MACE.__fromPtr__(create_0(IMGSIZE));
}
/**
* constructor
* @return automatically generated
*/
public static MACE create() {
return MACE.__fromPtr__(create_1());
}
@Override
protected void finalize() throws Throwable {
delete(nativeObj);
}
// C++: void cv::face::MACE::salt(String passphrase)
private static native void salt_0(long nativeObj, String passphrase);
// C++: void cv::face::MACE::train(vector_Mat images)
private static native void train_0(long nativeObj, long images_mat_nativeObj);
// C++: bool cv::face::MACE::same(Mat query)
private static native boolean same_0(long nativeObj, long query_nativeObj);
// C++: static Ptr_MACE cv::face::MACE::load(String filename, String objname = String())
private static native long load_0(String filename, String objname);
private static native long load_1(String filename);
// C++: static Ptr_MACE cv::face::MACE::create(int IMGSIZE = 64)
private static native long create_0(int IMGSIZE);
private static native long create_1();
// native support for java finalize()
private static native void delete(long nativeObj);
}