Anonymizer  7.0
SDK for anonymization of human faces and licence plates in images.
example-files.cpp

This is an example of how to use the Anonymizer library. This example shows how to explicitly link anonymizer library and run anonymization of an image. Example uses default AnParams parameters

/* **************************************************************** */
/* **************************************************************** */
/* * * */
/* * Anonymizer example console application * */
/* * This example shows how to link Anonymizer library, * */
/* * initialize it and run anonymization of image file. * */
/* * * */
/* * use(Windows): example.exe image.jpg * */
/* * use(Linux) : ./example image.jpg * */
/* * * */
/* * ------------------------------------------------------------ * */
/* * * */
/* * Eyedea Recognition, Ltd. (C) 2013, Mar 6th * */
/* * * */
/* * Contact: * */
/* * web: http://www.eyedea.cz * */
/* * email: info@eyedea.cz * */
/* * * */
/* **************************************************************** */
/* **************************************************************** */
#include <stdio.h>
#include <string>
#include <cstring>
#include <thread>
using namespace std;
#include <er_explink.h> /* multi-platform explicit linking macros */
#include <Anonymizer.h> /* Anonymizer API */
#define ANONYMIZER_SDK_DIR "../../sdk/"
#define ANONYMIZER_LIB ANONYMIZER_SDK_DIR "/lib/" ER_LIB_PREFIX "anonymizer" AN_SUFFIX "-" ER_LIB_TARGET DEBUG_SUFFIX ER_LIB_EXT
#define ANONYMIZER_INI "config.ini"
bool check_arg(const char *arg, std::string option, std::string &retv); // argument checking
int main (int argc, const char ** argv)
{
string output = "image_anonymized.jpg";
string input = "../../data/image.jpg";
ERComputationMode computation_mode{ER_COMPUTATION_MODE_CPU};
int gpu_id{0};
int num_threads{ (int) (std::thread::hardware_concurrency() * 0.5) };
/* ////////////////////////////////////////////////////////// */
/* Reading input parameters */
/* */
for( int i = 1; i < argc; i++ )
{
std::string retv;
if (check_arg(argv[i], "-o=", retv) || check_arg(argv[i], "--output=", retv))
output = retv;
else if (check_arg(argv[i], "--gpu", retv))
computation_mode = ER_COMPUTATION_MODE_GPU;
else if (check_arg(argv[i], "--gpu-id=", retv))
gpu_id = atoi(retv.c_str());
else if (check_arg(argv[i], "--num-threads=", retv))
num_threads = atoi(retv.c_str());
else if (check_arg(argv[i], "-h", retv) | check_arg(argv[i], "--help", retv)){
printf("USAGE: %s [options] filename\n"
" options: -o=filename sets the output filename for anonymized image\n"
" --gpu - use gpu for detection (if supported by module)\n"
" --gpu-id=ID - use gpu with given ID for gpu computation\n"
" --num-threads=X - number of threads for CPU computation parts\n"
" filename: input image filename, default ../../data/image.jpg\n"
"\nEXAMPLE:\n %s\n", argv[0], argv[0]);
return 0;
}
else if( argv[i][0] == '-' )
{
printf("WARNING: Unknown option %s\nSee `%s --help' for more information.\n",argv[i], argv[0]);
}
else
input.assign( argv[i] );
}
if( input.empty() ){
printf("ERROR: Input filename is missing.\nTry `%s --help' for more information.\n", argv[0]);
return -1;
}
/* EXPLICIT LINKING */
printf("Loading library and functions\n");
fcn_anInit fcnAnInit;
fcn_anFree fcnAnFree;
fcn_anAnonymize fcnAnAnonymize;
fcn_anVersion fcnAnVersion;
fcn_anGetErrorMsg fcnAnGetErrorMsg;
shlib_hnd hDll;
/* load shared library */
ER_OPEN_SHLIB(hDll, ANONYMIZER_LIB);
if (!hDll){
printf(" library '%s' not loaded!\n", ANONYMIZER_LIB);
return -1;
}
/* link AnonymizerSDK functions */
ER_LOAD_SHFCN(fcnAnInit, fcn_anInit, hDll, "anInit");
ER_LOAD_SHFCN(fcnAnFree, fcn_anFree, hDll, "anFree");
ER_LOAD_SHFCN(fcnAnAnonymize, fcn_anAnonymize, hDll, "anAnonymize");
ER_LOAD_SHFCN(fcnAnVersion, fcn_anVersion, hDll, "anVersion");
ER_LOAD_SHFCN(fcnAnGetErrorMsg, fcn_anGetErrorMsg, hDll, "anGetErrorMsg");
if (!fcnAnInit || !fcnAnFree || !fcnAnAnonymize || !fcnAnVersion || !fcnAnGetErrorMsg){
printf(" Loading Anonymizer functions failed!\n");
return -1;
}
printf(" ... done\n\n");
printf("Loaded %s\n\n", fcnAnVersion(0));
/* AnonymizerSDK API - Anonymizer initialization. Inputs are path to SDK package, configuration filename (default config.ini) */
AnConfig config;
std::memset(&config,0,sizeof(config));
config.computation_mode = computation_mode;
config.gpu_device_id = gpu_id;
config.num_threads = num_threads;
ANState state; /* sdk state handler*/
int ern;
printf("Anonymizer initialization:\n");
if ((ern = fcnAnInit((char*)ANONYMIZER_SDK_DIR, (char*)ANONYMIZER_INI, &config, &state)) != 0) {
printf("failed.\n%s",fcnAnGetErrorMsg(ern));
return -1;
}
else
printf(" ... done.\n");
/* run anonymization - if anonymization parameters are NULL, default values are used. */
printf("Anonymization\n");
if (fcnAnAnonymize((char*)input.c_str(),(char*)output.c_str(),NULL,state)!=0){
printf(" ... FAILED!\n");
fcnAnFree(state);
return -1;
}else
printf(" ... done.\n");
/* free Anonymizer state */
printf("Cleaning up\n");
fcnAnFree(state);
/* free loaded library */
ER_FREE_LIB(hDll); // NOTE: unloading secured library may cause application crash (Windows, randomly)
printf(" ... done.\n");
return 0;
}
bool check_arg(const char *arg, std::string option, std::string &retv)
{
if (option.compare(0,option.length(),arg,option.length()) == 0)
{
retv.assign(arg+option.length());
return true;
}
else
{
return false;
}
}
AnConfig
Configuration structure for Anonymizer state initialization.
Definition: Anonymizer.h:108
AnConfig::gpu_device_id
int gpu_device_id
Definition: Anonymizer.h:111
fcn_anGetErrorMsg
const typedef char *(* fcn_anGetErrorMsg)(int)
anGetErrorMsg function pointer
Definition: Anonymizer.h:268
ANState
void * ANState
Handle to Anonymizer SDK library.
Definition: Anonymizer.h:30
fcn_anVersion
const typedef char *(* fcn_anVersion)(int)
anVersion function pointer
Definition: Anonymizer.h:258
fcn_anInit
int(* fcn_anInit)(const char *, const char *, const AnConfig *, ANState *)
anInit function pointer
Definition: Anonymizer.h:140
fcn_anAnonymize
int(* fcn_anAnonymize)(const char *, const char *, AnParams *, ANState)
anAnonymize function pointer
Definition: Anonymizer.h:171
fcn_anFree
void(* fcn_anFree)(ANState)
anFree function pointer
Definition: Anonymizer.h:150
AnConfig::computation_mode
ERComputationMode computation_mode
Definition: Anonymizer.h:110
AnConfig::num_threads
int num_threads
Definition: Anonymizer.h:112