#include <iostream>
#include <algorithm>
int main(int argc, char **argv)
{
if (argc < 2) {
std::cout << "usage: <IMG_1> <IMG_2> ... <IMG_N>" << std::endl;
return 1;
}
std::shared_ptr<face_sdk::face_detector> face_detector;
std::shared_ptr<face_sdk::alignment> alignment;
std::shared_ptr<face_sdk::builder> builder;
std::shared_ptr<face_sdk::fir_matcher> matcher;
std::shared_ptr<face_sdk::age_gender> age_gender;
try {
std::vector< std::shared_ptr< face_sdk::image > > images;
for (int i = 1; i < argc; i++) {
images.push_back(img);
}
std::vector< std::shared_ptr< face_sdk::face > > faces;
for (auto img : images) {
auto faces = face_detector->detect_faces({ img }, 0.4f)[0];
if (faces.size() == 0) {
continue;
}
std::sort(faces.begin(), faces.end(), [](const std::shared_ptr<face_sdk::face> &f1, const std::shared_ptr<face_sdk::face> &f2) -> bool { return f1->confidence() < f2->confidence(); });
faces.push_back(faces.back());
}
auto align_results = alignment->calc_alignment(faces);
auto firs = builder->build(align_results);
for (int i = 0; i < firs.size(); i++) {
for (int j = i + 1; j < firs.size(); j++) {
auto match_result = matcher->match(firs[i], firs[j]);
std::cout << i << " -> " << j << " = " << match_result << std::endl;
}
}
auto age_gender_info = age_gender->calc_age_gender(align_results);
for (int i = 0; i < age_gender_info.size(); i++) {
std::cout << i << " -> " << " age " << age_gender_info[i].age << ", gender " << (age_gender_info[i].gender < 0 ? "female" : "male") << std::endl;
}
}
std::cerr << face_sdk::format_exception(exp) << std::endl;
try {
std::rethrow_if_nested(exp);
}
catch (const face_sdk::version_not_available_exception &nested) {
std::cerr << nested.what() << std::endl;
}
catch (const face_sdk::license_exception &nested) {
std::cerr << nested.what() << std::endl;
}
catch (const std::exception &nested) {
std::cerr << nested.what() << std::endl;
}
return 2;
}
return 0;
}