From 57e4af1d92368f298b1cf220e172be131fa5b955 Mon Sep 17 00:00:00 2001 From: sladro Date: Thu, 8 Jan 2026 15:44:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=BA=E8=84=B8=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E9=97=AE=E9=A2=98,=E6=B5=8B=E8=AF=95=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E9=97=AE=E9=A2=98=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 003_aligned.png | Bin 0 -> 22908 bytes plugins/ai_face_recog/ai_face_recog_node.cpp | 49 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 003_aligned.png diff --git a/003_aligned.png b/003_aligned.png new file mode 100644 index 0000000000000000000000000000000000000000..d73c3f343e387c33fe5b5a2d417795b80bc0aa56 GIT binary patch literal 22908 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 #include +// For test image loading +#define STB_IMAGE_IMPLEMENTATION +#define STBI_ONLY_PNG +#define STBI_NO_FAILURE_STRINGS +#include "../../third_party/rknpu2/examples/3rdparty/stb/stb_image.h" + #include "ai_scheduler.h" #include "face/face_result.h" #include "node.h" @@ -709,6 +715,49 @@ public: const float thr_margin = cfg ? cfg->thr_margin : 0.0f; LogInfo("[ai_face_recog] start id=" + id_ + " align=" + std::string(align ? "true" : "false") + " thr_accept=" + std::to_string(thr_accept) + " thr_margin=" + std::to_string(thr_margin)); + + // ========== TEST: Load aligned image and run inference ========== +#if defined(RK3588_ENABLE_RKNN) + { + const char* test_img_path = "./003_aligned.png"; + int img_w = 0, img_h = 0, img_c = 0; + unsigned char* img_data = stbi_load(test_img_path, &img_w, &img_h, &img_c, 3); + if (img_data && img_w == 112 && img_h == 112) { + std::cerr << "[TEST] Loaded " << test_img_path << " (" << img_w << "x" << img_h << "x" << img_c << ")\n"; + + InferInput in; + in.width = 112; + in.height = 112; + in.is_nhwc = true; + in.data = img_data; + in.size = 112 * 112 * 3; + in.type = RKNN_TENSOR_UINT8; + + auto r = AiScheduler::Instance().InferBorrowed(model_handle_, in); + if (r.success && !r.outputs.empty()) { + std::vector emb; + if (DecodeEmbedding(r.outputs[0], emb)) { + L2Normalize(emb); + std::cerr << "[TEST] RKNN embedding[0:8]: "; + for (int i = 0; i < 8 && i < static_cast(emb.size()); ++i) { + std::cerr << emb[i] << " "; + } + std::cerr << "\n"; + } else { + std::cerr << "[TEST] DecodeEmbedding failed\n"; + } + } else { + std::cerr << "[TEST] Inference failed: " << r.error << "\n"; + } + stbi_image_free(img_data); + } else { + if (img_data) stbi_image_free(img_data); + std::cerr << "[TEST] Skip: " << test_img_path << " not found or wrong size\n"; + } + } +#endif + // ========== END TEST ========== + return true; }