顔イメージ (cv::Mat) の特徴点を取得するためのベース クラス。
入力は顔イメージ (cv::Mat) です。
出力は入力イメージ内の顔の特徴点です。
浮動小数点のサンプル コード:
注記: 浮動小数点の特徴点と固定小数点の特徴点を取得するために、2 つのインターフェイスが提供されています。
FaceFeatureFloatResult
または
FaceFeatureFixedResult
が返されます。cv:Mat image = cv::imread("test_face.jpg");
auto network = vitis::ai::FaceFeature::create
("facerec_resnet20", true);
auto result = network->run(image);
auto features = result.feature;
固定小数点のサンプル コード:
cv:Mat image = cv::imread("test_face.jpg");
auto network = vitis::ai::FaceFeature::create
("facerec_resnet20", true);
auto result = network->run_fixed(image);
auto features = result.feature;
類似性を求める計算式:
2 つのイメージの類似性を計算します。
auto result_fixed = network->run_fixed(image);
auto result_fixed2 = network->run_fixed(image2);
auto similarity_original = feature_compare(result_fixed.feature->data(),
result_fixed2.feature->data());
float similarity_mapped = score_map(similarity_original);
固定小数点の比較コード:
float feature_norm(const int8_t *feature) {
int sum = 0;
for (int i = 0; i < 512; ++i) {
sum += feature[i] * feature[i];
}
return 1.f / sqrt(sum);
}
static float feature_dot(const int8_t *f1, const int8_t *f2) {
int dot = 0;
for (int i = 0; i < 512; ++i) {
dot += f1[i] * f2[i];
}
return (float)dot;
}
float feature_compare(const int8_t *feature, const int8_t *feature_lib){
float norm = feature_norm(feature);
float feature_norm_lib = feature_norm(feature_lib);
return feature_dot(feature, feature_lib) * norm * feature_norm_lib;
}
float score_map_l20(float score) { return 1.0 / (1 + exp(-12.4 * score
+ 3.763)); }
float score_map_l64(float score) { return 1.0 / (1 + exp(-17.0836 * score
+ 5.5707)); }
一連のイメージを比較した結果を表示します。width=\textwidth
図 1. facecompare の結果イメージ

関数クイック リファレンス
次の表に、vitis::ai::FaceFeature
クラスに定義されているすべての関数を示します。
タイプ | メンバー | 引数 |
---|---|---|
std::unique_ptr<
FaceFeature
> |
create |
|
std::unique_ptr<
FaceFeature
> |
create |
|
int | getInputWidth |
|
int | getInputHeight |
|
size_t | get_input_batch |
|
FaceFeatureFloatResult
|
run |
|
FaceFeatureFixedResult
|
run_fixed |
|
std::vector<
FaceFeatureFloatResult
> |
run |
|
std::vector<
FaceFeatureFixedResult
> |
run_fixed |
|