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
#include <stdio.h>
#include <string>
#include <cstring>
#include <thread>
using namespace std;
#include <er_explink.h>
#include <Anonymizer.h>
#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);
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) };
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;
}
printf("Loading library and functions\n");
shlib_hnd hDll;
ER_OPEN_SHLIB(hDll, ANONYMIZER_LIB);
if (!hDll){
printf(" library '%s' not loaded!\n", ANONYMIZER_LIB);
return -1;
}
ER_LOAD_SHFCN(fcnAnInit,
fcn_anInit, hDll,
"anInit");
ER_LOAD_SHFCN(fcnAnFree,
fcn_anFree, hDll,
"anFree");
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));
std::memset(&config,0,sizeof(config));
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");
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");
printf("Cleaning up\n");
fcnAnFree(state);
ER_FREE_LIB(hDll);
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;
}
}