
一、InspireFace 源码修改
源码来自官网:https://github.com/HyperInspire/InspireFace/releases


1.1 CMake CACHE 变量判空 bug
文件:根目录 CMakeLists.txt
if (NOT DEFINED ISF_LINUX_MNN_CUDA)
问题:NOT DEFINED 对 set(... CACHE ...) 变量永远为 FALSE,导致即使传入空路径也走 else 分支。
下图为修改对比:

1.2 宏定义不一致导致 CUDA 后端不生效
文件:cpp/inspireface/middleware/inference_adapter/mnn_cv_adapter_inference.h
问题:
#ifdef FORWARD_CUDA // ← 未定义的宏!
backend_ = MNN_FORWARD_CUDA;
下图为修改对比:

1.3 inference_wrapper_mnn.cpp 文件加载版硬编码 CPU
文件:cpp/inspireface/middleware/inference_wrapper/inference_wrapper_mnn.cpp
问题:文件加载版 Initialize 函数中,无论是否启用 CUDA,scheduleConfig.type 都被设为 MNN_FORWARD_CPU。
下图为修改对比:

1.4 meta.cpp.in 缺少 MNN CUDA 显示分支
文件:cpp/inspireface/meta.cpp.in
问题:只有 TensorRT(CUDA) 和 MNN(CPU) 两个 GPU 相关分支,缺少 MNN CUDA。
下图为修改对比:

总结修改文件清单:
修改文件 | 修改内容 |
|---|---|
CMakeLists.txt(根目录) | ① CACHE 变量判空 STREQUAL "" ② 自动查找 libMNN_*.a ③ GCC≥12 自动检测 CUDA host 编译器 ④ 全局链接加 -lstdc++ |
cpp/inspireface/CMakeLists.txt | ① --whole-archive 只包裹 MNN 库② CUDA 库用 CUDA:: 导入目标③ 链接顺序:MNN → CUDA → stdc++ → m → 其他 ④ find_package(CUDAToolkit)⑤ link_directories 区分预编译/内置 MNN |
cpp/inspireface/middleware/inference_wrapper/inference_wrapper_mnn.cpp | ① 文件加载版 Initialize 统一 CUDA 逻辑 ② session_ 先判空再使用 ③ input_names_ 存 string 不存 c_str() |
cpp/inspireface/middleware/inference_wrapper/inference_wrapper_mnn.h | session_ 初始化为 nullptr |
cpp/inspireface/middleware/inference_adapter/mnn_cv_adapter_inference.h | FORWARD_CUDA → ISF_GLOBAL_INFERENCE_BACKEND_USE_MNN_CUDA |
cpp/inspireface/meta.cpp.in | 新增 MNN CUDA 显示分支 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。