-
下载Demo模型
cd <path_to_tnn>/model sh download_model.sh
可选:如果需要执行OCR demo,还需要准备opencv库。可以使用提供的脚本下载opencv。
cd <path_to_tnn>/scripts sh download_opencv.sh iOS
PS: 如因网络问题脚本无法下载模型或依赖库,请根据脚本中的信息手动创建对应文件夹并自行下载。模型也可以阿里云盘下载,https://www.aliyundrive.com/s/MSmarP3zqrb
-
打开TNNExamples工程
进入目录
<path_to_tnn>/examples/ios/
,双击打开TNNExamples工程。可选:如果需要执行OCR demo,需要将opencv加入TNNExamples的依赖项中。
如下图点击TNNExamples工程,找到工程设置
General
,在Framworks, Libraries, and Embedded Content
选项卡下点击+
。 -
设置开发者账号
如下图点击TNNExamples工程,找到工程设置
Signing & Capabilities
,点击Team选项卡选择Add an Account...
-
真机运行
4.1 修改
Bundle Identitifier
如图在现有
Bundle Identifier
后随机添加后缀(限数字和字母),避免个人账户遇到签名冲突。
4.2 验证授权
首次运行先利用快捷键Command + Shift + K
对工程进行清理,再执行快捷键Command + R
运行。如果是首次登陆Apple ID,Xcode会弹框报如下错误,需要在iOS设备上根据提示进行授权验证。一般来说手机上的授权路径为:设置 -> 通用 -> 描述文件与设备管理 -> Apple Development选项 -> 点击信任
4.3 运行结果
首次运行先利用快捷键Command + Shift + K
对工程进行清理,再执行快捷键Command + R
运行。默认界面为人脸检测,可以点击右上角编辑按钮切换图像分类等不同功能。
PS:
a) 由于GPU和CPU加速原理不同,具体模型的GPU性能不一定比CPU高,与具体机型、模型结构以及工程实现有关。欢迎大家参与到TNN开发中,共同进步。
b) tnn_sdk_sample.h中的宏TNN_SDK_USE_NCNN_MODEL默认为0,运行TNN模型,可以设置为1来运行ncnn模型。
c) 如遇到Unable to install...
错误提示,请在真机设备上删除已有的TNNExamples,重新运行安装。
d) 真机运行时,如果遇到CodeSign错误Command CodeSign failed with a nonzero exit code
,可参看issue20 iOS Demo运行步骤说明
c) 如果需要执行OCR demo,需要将tnn_sdk_sample.h中的宏HAS_OPENCV设置为1,否则不会编译OCR demo代码。
-
人脸检测
模型来源:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB
效果示例:iPhone 7, ARM 单线程 6.3206ms
-
图像分类
模型来源:https://github.com/forresti/SqueezeNet
效果示例:iPhone 7, ARM 单线程 13.83ms
- Android Studio 3.5 或以上
- NDK version >= 18, <= 21 NDK 22和23在链接第三方动态库可能会出错,例如opencv,hiai,不建议使用。
-
下载Demo模型
cd <path_to_tnn>/model sh download_model.sh
可选:如果需要执行OCR demo,还需要下载opencv库。
cd <path_to_tnn>/scripts sh download_opencv.sh android
PS:
如因网络问题脚本无法下载模型,请根据脚本中的信息手动创建对应文件夹并自行下载. 模型也可以阿里云盘下载,https://www.aliyundrive.com/s/MSmarP3zqrb
想要使用NPU运行demo需要需首先下载NPU ddk。详情参考: FAQ: 创建华为NPU编译环境。
-
打开TNNExamples工程
-
进入目录
<path_to_tnn>/examples/android/
,双击打开TNNExamples工程文件build.gradle
。 -
将手机连接到电脑,点击
Run Demo
编译和运行demo。 -
工程默认编译64位armv8库,如要添加32位armv7库,可在
build.gradle
中修改为abiFilters "armeabi-v7a", "arm64-v8a"
。
PS :
1). 想要使用NPU, 打开工程后,需要手动设置打开NPU: 在<path_to_tnn>/examples/android/demo/CMakeList.txt中, 更新指令为如下,使用华为NPU。
set(TNN_HUAWEI_NPU_ENABLE ON CACHE BOOL "" FORCE)
2). 第一次运行如果遇到
<path_to_tnn>/examples/android/src/main/jni/thirdparty/hiai_ddk/include/graph
Permission Denied 的情况, Clean Project 再重新运行。3). 当前只有rom版本 >= 100.320.xxx.xxxx的华为机型支持IR构建事例模型。参考:FAQ: 更新到最新的ROM支持NPU。
4). 运行demo需要需首先下载NPU DDK。参考: FAQ: 创建华为NPU编译环境。
5). 想要执行OCR demo, 打开工程后,需要手动设置打开OPENCV依赖: 在<path_to_tnn>/examples/android/demo/CMakeList.txt中, 更新指令为如下,使用OPENCV。
set(TNN_OPENCV_ENABLE ON CACHE BOOL "" FORCE)
如果通过上述
download_opencv.sh
下载OpenCV库,不需要再指定路径。 如果想要使用自定义的OpenCV Android SDK,需要指定OPENCV_ANDROID_SDK_PATH路径。 在<path_to_tnn>/examples/android/demo/CMakeList.txt中, 更新指令为如下。set(OPENCV_ANDROID_SDK_PATH <path_to_opencv_android_sdk>)
-
-
人脸检测-图片
模型来源:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB
效果示例:华为P40, ARM 单线程 32.2359ms
-
人脸检测-视频 模型来源:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB
效果示例:华为P40, ARM 单线程 122.296ms
-
图像分类
模型来源:https://github.com/forresti/SqueezeNet
效果示例:华为P40, ARM 单线程 81.4047ms
- 快速在 Linux/Mac/Windows/ArmLinux/CudaLinux 环境下运行模型,展示 TNN 接口的使用方法。
注意:demo sdk 请使用推荐模型,如需使用其他模型需要修改 sdk 预处理及后处理功能适应不同模型的输入输出差异
cd <path_to_tnn>/model
sh download_model.sh
如因网络问题脚本无法下载模型,请根据脚本中的信息手动创建对应文件夹并自行下载。模型也可以阿里云盘下载,https://www.aliyundrive.com/s/MSmarP3zqrb
-
环境要求
- Cmake (>=3.11)
- OpenCV3 (只有webcam的demo会用), 可在CMake中通过find_package(OpenCV 3) 成功找到依赖项。
// 手动编译OpenCV3 wget https://github.com/opencv/opencv/archive/3.4.13.zip unzip 3.4.13.zip cd opencv-3.4.13 mkdir build mkdir install cd build cmake -DCMAKE_INSTALL_PREFIX=../install .. make -j4 make install // 在CMakeList.txt的find_packpage之前添加OpenCV路径 // 例如,进入examples/linux/x86,打开CMakeList.txt // 在find_package(OpenCV 3 REQUIRED)之前添加 set(OpenCV_DIR <path_to_opencv>/opencv-3.4.13/install/share/OpenCV)
-
编译
进入examples/linux/x86
目录,执行build_linux_native.sh
或build_linux_openvino.sh
。前者使用TNN实现的优化X86后端执行,后者基于Intel OpenVINO后端执行。以build_linux_native.sh
为例,默认仅编译处理图像的demo,如需编译基于摄像头的人脸配准demo,需要将build_linux_native.sh
中的"-DTNN_DEMO_WITH_WEBCAM=OFF"修改为"-DTNN_DEMO_WITH_WEBCAM=ON":cd <path_to_tnn>/examples/linux/x86 ./build_linux_native.sh
-
执行
进入examples/linux/x86/build_linux_native
或examples/linux/x86/build_linux_openvino
目录,当不使用任何参数执行demo文件时,会打印demo用法信息,以图形分类demo为例:cd build_linux_native ./demo_x86_imageclassify >Parameter -m and -p should be set >usage: >./demo_x86_imageclassify [-h] [-p] tnnproto [-m] tnnmodel [-i] <input> > -h, <help> print a usage message. > -p, <proto> (required) tnn proto file path > -m, <model> (required) tnn model file path > -i, <input> (required) input file path > -l, <label> (optional) label file path. Default is: ../../../assets/synset.txt
-p
和-m
选项分别用于指定demo使用的tnnproto和tnnmodel文件的路径;-i
选项用于指定输入图片的路径;-l
选项用于指定分类标签文件的路径。-h
选项打印帮助信息。各个demo的示例用法如下所示:cd build_linux_native 图形分类 demo ./demo_x86_imageclassify -p ../../../../model/SqueezeNet/squeezenet_v1.1.tnnproto -m ../../../../model/SqueezeNet/squeezenet_v1.1.tnnmodel -i ../../../assets/tiger_cat.jpg 人脸检测 demo ./demo_x86_facedetector -p ../../../../model/face_detector/version-slim-320_simplified.tnnproto -m ../../../../model/face_detector/version-slim-320_simplified.tnnmodel -i ../../../assets/test_face.jpg 物体检测 demo ./demo_x86_objectdetector -p ../../../../model/yolov5/yolov5s.tnnproto -m ../../../../model/yolov5/yolov5s.tnnmodel -i ../../../assets/004545.jpg 阅读理解 demo ./demo_x86_readingcomprehension -p ../../../../model/bertsquad10/bertsquad10_clean.tnnproto -m ../../../../model/bertsquad10/bertsquad10_clean.tnnmodel -v ../../../../model/bertsquad10/vocab.txt 姿势检测 demo (腾讯光流) ./demo_x86_posedetector -p ../../../../model/skeleton/skeleton_big.tnnproto -m ../../../../model/skeleton/skeleton.tnnmodel -i ../../../assets/skeleton_test.jpg 姿势检测 demo (blazepose) ./demo_x86_blazepose 文本识别 demo ./demo_x86_ocrdetecor 摄像头人脸配准 demo ./demo_x86_webcam
-
环境要求
- Cmake (>=3.11)
- OpenCV3 (只有webcam的demo会用), 确保可在CMake中通过
find_package(OpenCV 3)
找到, 可通过brew安装(brew install opencv@3 && brew link --force opencv@3
),如果失败可使用手动编译
// 手动编译OpenCV3 wget https://github.com/opencv/opencv/archive/3.4.13.zip unzip 3.4.13.zip cd opencv-3.4.13 mkdir build mkdir install cd build cmake -DCMAKE_INSTALL_PREFIX=../install .. make -j4 make install // 在CMakeList.txt的find_packpage之前添加OpenCV路径 // 例如,进入examples/mac/x86,打开CMakeList.txt // 在find_package(OpenCV 3 REQUIRED)之前添加 set(OpenCV_DIR <path_to_opencv>/opencv-3.4.13/install/share/OpenCV)
-
编译
进入examples/mac/x86
目录,执行build_macos_native.sh
或build_macos_openvino.sh
。前者使用TNN实现的优化X86后端执行,后者基于Intel OpenVINO后端执行。以build_macos_native.sh
为例,默认仅编译处理图像的demo,如需编译基于摄像头的人脸配准demo,需要将build_macos_native.sh
中的"-DTNN_DEMO_WITH_WEBCAM=OFF"修改为"-DTNN_DEMO_WITH_WEBCAM=ON":cd <path_to_tnn>/examples/mac/x86 ./build_macos_native.sh
-
执行
进入examples/mac/x86/build_macos_native
或examples/mac/x86/build_macos_openvino
目录,当不使用任何参数执行demo文件时,会打印demo用法信息,以图形分类demo为例:cd build_macos_native ./demo_x86_imageclassify >Parameter -m and -p should be set >usage: >./demo_x86_imageclassify [-h] [-p] tnnproto [-m] tnnmodel [-i] <input> > -h, <help> print a usage message. > -p, <proto> (required) tnn proto file path > -m, <model> (required) tnn model file path > -i, <input> (required) input file path > -l, <label> (optional) label file path. Default is: ../../../assets/synset.txt
-p
和-m
选项分别用于指定demo使用的tnnproto和tnnmodel文件的路径;-i
选项用于指定输入图片的路径;-l
选项用于指定分类标签文件的路径。-h
选项打印帮助信息。各个demo的示例用法如下所示:cd build_macos_native 图形分类 demo ./demo_x86_imageclassify -p ../../../../model/SqueezeNet/squeezenet_v1.1.tnnproto -m ../../../../model/SqueezeNet/squeezenet_v1.1.tnnmodel -i ../../../assets/tiger_cat.jpg 人脸检测 demo ./demo_x86_facedetector -p ../../../../model/face_detector/version-slim-320_simplified.tnnproto -m ../../../../model/face_detector/version-slim-320_simplified.tnnmodel -i ../../../assets/test_face.jpg 物体检测 demo ./demo_x86_objectdetector -p ../../../../model/yolov5/yolov5s.tnnproto -m ../../../../model/yolov5/yolov5s.tnnmodel -i ../../../assets/004545.jpg 阅读理解 demo ./demo_x86_readingcomprehension -p ../../../../model/bertsquad10/bertsquad10_clean.tnnproto -m ../../../../model/bertsquad10/bertsquad10_clean.tnnmodel -v ../../../../model/bertsquad10/vocab.txt 姿势检测 demo (腾讯光流) ./demo_x86_posedetector -p ../../../../model/skeleton/skeleton_big.tnnproto -m ../../../../model/skeleton/skeleton.tnnmodel -i ../../../assets/skeleton_test.jpg 姿势检测 demo (blazepose) ./demo_x86_blazepose 文本识别 demo ./demo_x86_ocrdetecor 摄像头人脸配准 demo ./demo_x86_webcam
- 环境要求
- Visual Studio (>=2017)
- Cmake (>=3.11 或使用 Visual Studio Prompt 运行脚本)
- OpenCV3,需要使用相同版本的vc编译。
- 编译
打开x64 Native Tools Command Prompt for VS 2017/2019
. 进入examples\windows\x86
目录,执行build_msvc_native.bat
或build_msvc_openvino.bat
。前者使用TNN实现的优化X86后端执行,后者基于Intel OpenVINO后端执行。以build_msvc_native.bat
为例,默认仅编译处理图像的demo,如需编译基于摄像头的人脸配准demo,需要将build_msvc_native.bat
中的"-DTNN_DEMO_WITH_WEBCAM=OFF"修改为"-DTNN_DEMO_WITH_WEBCAM=ON":set OpenCV_DIR=`OPENCV_INSTALL_DIR` cd <path_to_tnn>\examples\windows\x86 .\build_msvc_native.bat
- 执行
进入examples\windows\x86\build_msvc_native\release
目录,当不使用任何参数执行demo文件时,会打印demo用法信息,以图形分类demo为例:cd build_msvc_native\release .\demo_x86_imageclassify >Parameter -m and -p should be set >usage: >.\demo_x86_imageclassify [-h] [-p] tnnproto [-m] tnnmodel [-i] <input> > -h, <help> print a usage message. > -p, <proto> (required) tnn proto file path > -m, <model> (required) tnn model file path > -i, <input> (required) input file path > -l, <label> (optional) label file path. Default is: ../../../assets/synset.txt
-p
和-m
选项分别用于指定demo使用的tnnproto和tnnmodel文件的路径;-i
选项用于指定输入图片的路径;-l
选项用于指定分类标签文件的路径。-h
选项打印帮助信息。各个demo的示例用法如下所示:cd build_msvc_native\release 图形分类 demo .\demo_x86_imageclassify -p ..\..\..\..\..\model\SqueezeNet\squeezenet_v1.1.tnnproto -m ..\..\..\..\..\model\SqueezeNet\squeezenet_v1.1.tnnmodel -i ..\..\..\..\assets\tiger_cat.jpg 人脸检测 demo .\demo_x86_facedetector -p ..\..\..\..\..\model\face_detector\version-slim-320_simplified.tnnproto -m ..\..\..\..\..\model\face_detector\version-slim-320_simplified.tnnmodel -i ..\..\..\..\assets\test_face.jpg 物体检测 demo .\demo_x86_objectdetector -p ..\..\..\..\model\mobilenet_v2-ssd\mobilenetv2_ssd_tf.tnnproto -m ..\..\..\..\model\mobilenet_v2-ssd\mobilenetv2_ssd_tf.tnnmodel -i ..\..\..\assets\004545.jpg 阅读理解 demo .\demo_x86_readingcomprehension -p ..\..\..\..\..\model\bertsquad10\bertsquad10_clean.tnnproto -m ..\..\..\..\..\model\bertsquad10\bertsquad10_clean.tnnmodel -v ..\..\..\..\..\model\bertsquad10\vocab.txt 姿势检测 demo (腾讯光流) .\demo_x86_posedetector -p ..\..\..\..\model\skeleton\skeleton_big.tnnproto -m ..\..\..\..\model\skeleton\skeleton.tnnmodel -i ..\..\..\assets\skeleton_test.jpg 姿势检测 demo (blazepose) .\demo_x86_blazepose 文本识别 demo .\demo_x86_ocrdetecor 摄像头人脸检测配准 demo .\demo_x86_webcam
- 环境要求
- Cmake (>= 3.1)
- 交叉编译需要安装编译工具链
- ubuntu: aarch64: sudo apt-get install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu
arm32hf: sudo apt-get install g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf - other linux: 下载 arm toolchain: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
- 编译
进入examples/linux/cross
目录修改cd <path_to_tnn>/examples/linux/cross
build_aarch64_linux.sh
或build_armhf_linux.sh
,以aarch64为例,需要配置编译选项:执行CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ TNN_LIB_PATH=../../../scripts/build_aarch64_linux/
build_aarch64_linux.sh
sh build_aarch64_linux.sh
- 执行
进入examples/linux/cross/build
目录,当不使用任何参数执行demo文件时,会打印demo用法信息,以图形分类demo为例:cd build ./demo_arm_linux_imageclassify >Parameter -m and -p should be set >usage: >./demo_arm_linux_imageclassify [-h] [-p] tnnproto [-m] tnnmodel [-i] <input> > -h, <help> print a usage message. > -p, <proto> (required) tnn proto file path > -m, <model> (required) tnn model file path > -i, <input> (required) input file path > -l, <label> (optional) label file path. Default is: ../../../assets/synset.txt
-p
和-m
选项分别用于指定demo使用的tnnproto和tnnmodel文件的路径;-i
选项用于指定输入图片的路径;-l
选项用于指定分类标签文件的路径。-h
选项打印帮助信息。各个demo的示例用法如下所示:cd build 图形分类 demo ./demo_arm_linux_imageclassify -p ../../../../model/SqueezeNet/squeezenet_v1.1.tnnproto -m ../../../../model/SqueezeNet/squeezenet_v1.1.tnnmodel -i ../../../assets/tiger_cat.jpg 人脸检测 demo ./demo_arm_linux_facedetector -p ../../../../model/face_detector/version-slim-320_simplified.tnnproto -m ../../../../model/face_detector/version-slim-320_simplified.tnnmodel -i ../../../assets/test_face.jpg 物体检测 demo ./demo_arm_linux_objectdetector -p ../../../../model/mobilenet_v2-ssd/mobilenetv2_ssd_tf.tnnproto -m ../../../../model/mobilenet_v2-ssd/mobilenetv2_ssd_tf.tnnmodel -i ../../../assets/004545.jpg
-
环境要求
- Cmake (>= 3.8)
- CUDA (>= 10.2)
- TensorRT (>= 7.1)
-
编译 设置环境变量
TENSORRT_ROOT_DIR
export TENSORRT_ROOT_DIR = <TensorRT_path>
设置环境变量
CUDNN_ROOT_DIR
export CUDNN_ROOT_DIR = <CuDNN_path>
进入
examples/linux/cuda
目录, 执行build_linux.sh
:cd <path_to_tnn>/examples/linux/cuda sh build_linux.sh
-
执行 进入
examples/linux/cuda/build_cuda_linux
目录,当不使用任何参数执行demo文件时,会打印demo用法信息,以图形分类demo为例:cd build_cuda_linux ./demo_cuda_imageclassify >Parameter -m and -p should be set >usage: >./demo_cuda_imageclassify [-h] [-p] tnnproto [-m] tnnmodel [-i] <input> > -h, <help> print a usage message. > -p, <proto> (required) tnn proto file path > -m, <model> (required) tnn model file path > -i, <input> (required) input file path > -l, <label> (optional) label file path. Default is: ../../../assets/synset.txt
-p
和-m
选项分别用于指定demo使用的tnnproto和tnnmodel文件的路径;-i
选项用于指定输入图片的路径;-l
选项用于指定分类标签文件的路径。-h
选项打印帮助信息。各个demo的示例用法如下所示:cd build_cuda_linux 图形分类 demo ./demo_cuda_imageclassify -p ../../../../model/SqueezeNet/squeezenet_v1.1.tnnproto -m ../../../../model/SqueezeNet/squeezenet_v1.1.tnnmodel -i ../../../assets/tiger_cat.jpg 人脸检测 demo ./demo_cuda_facedetector -p ../../../../model/face_detector/version-slim-320_simplified.tnnproto -m ../../../../model/face_detector/version-slim-320_simplified.tnnmodel -i ../../../assets/test_face.jpg 物体检测 demo ./demo_cuda_objectdetector -p ../../../../model/yolov5/yolov5s.tnnproto -m ../../../../model/yolov5/yolov5s.tnnmodel -i ../../../assets/004545.jpg 阅读理解 demo ./demo_cuda_readingcomprehension -p ../../../../model/bertsquad10/bertsquad10_clean.tnnproto -m ../../../../model/bertsquad10/bertsquad10_clean.tnnmodel -v ../../../../model/bertsquad10/vocab.txt 姿势检测 demo (腾讯光流) ./demo_cuda_posedetector -p ../../../../model/skeleton/skeleton_big.tnnproto -m ../../../../model/skeleton/skeleton.tnnmodel -i ../../../assets/skeleton_test.jpg 姿势检测 demo (blazepose) ./demo_cuda_blazepose 文本识别 demo ./demo_cuda_ocrdetecor
-
执行demo时报错: "open file xxx failed"
该错误由输入图像路径错误引起,请检查输入文件的路径
-
执行demo时报错: "open lable file xxx failed"
该错误由输入标签文件路径错误引起,图像分类demo需要预定义的标签文件,默认文件路径在
<path_to_tnn>/examples/assets/synset.txt
-
编译时报错: "not defined environment variable:CUDNN_ROOT_DIR"或"not defined environment variable:TENSORRT_ROOT_DIR"
请根据CUDA编译步骤,检查环境变量
CUDNN_ROOT_DIR
和TENSORRT_ROOT_DIR
是否正确设置
- 创建predictor
auto predictor = std::make_shared<ImageClassifier>();
- 初始化predictor
CHECK_TNN_STATUS(predictor->Init(option)); // 对 Linux/Window(X86 native / OPENVINO) option->compute_units = TNN_NS::TNNComputeUnitsCPU; // 对 ArmLinux option->compute_units = TNN_NS::TNNComputeUnitsCPU; // 对 CUDA option->compute_units = TNN_NS::TNNComputeUnitsGPU;
- 创建输入mat
// 对 Linux/Window(OpenVINO) auto image_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_X86, TNN_NS::N8UC3, nchw, data); // 对 Linux/Window(X86 native) auto image_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_NAIVE, TNN_NS::N8UC3, nchw, data); // 对 ArmLinux auto image_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_ARM, TNN_NS::N8UC3, nchw, data); // 对 CUDA auto image_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_NAIVE, TNN_NS::N8UC3, nchw, data);
- 执行predictor
CHECK_TNN_STATUS(predictor->Predict(std::make_shared<TNNSDKInput>(image_mat), sdk_output));
- 创建predictor
auto predictor = std::make_shared<UltraFaceDetector>();
- 初始化predictor
CHECK_TNN_STATUS(predictor->Init(option)); // 对 Linux/Window(X86 native / OPENVINO) option->compute_units = TNN_NS::TNNComputeUnitsCPU; // 对 ArmLinux option->compute_units = TNN_NS::TNNComputeUnitsCPU; // 对 CUDA option->compute_units = TNN_NS::TNNComputeUnitsGPU;
- 创建输入mat
// 对 Linux/Window(OpenVINO) auto image_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_X86, TNN_NS::N8UC3, nchw, data); // 对 Linux/Window(X86 native) auto image_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_NAIVE, TNN_NS::N8UC3, nchw, data); // 对 ArmLinux auto image_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_ARM, TNN_NS::N8UC3, nchw, data); // 对 CUDA auto image_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_NAIVE, TNN_NS::N8UC3, nchw, data);
- 执行predictor
CHECK_TNN_STATUS(predictor->Predict(std::make_shared<UltraFaceDetectorInput>(image_mat), sdk_output));
- 人脸标记
TNN_NS::Rectangle((void *)ifm_buf, image_orig_height, image_orig_width, face.x1, face.y1, face.x2, face.y2, scale_x, scale_y);