-
下载Demo模型
cd <path_to_tnn>/model sh download_model.sh
PS: 如因网络问题脚本无法下载模型,请根据脚本中的信息手动创建对应文件夹并自行下载
-
打开TNNExamples工程
进入目录
<path_to_tnn>/examples/ios/
,双击打开TNNExamples工程。 -
设置开发者账号
如下图点击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) TNNSDKSample.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运行步骤说明
-
人脸检测
模型来源: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 >= 16
-
下载Demo模型
cd <path_to_tnn>/model sh download_model.sh
PS: 如因网络问题脚本无法下载模型,请根据脚本中的信息手动创建对应文件夹并自行下载
-
打开TNNExamples工程
进入目录
<path_to_tnn>/examples/android/
,双击打开TNNExamples工程。
-
人脸检测-图片
模型来源:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB
效果示例:华为P30, ARM 单线程 32.2359ms
-
人脸检测-视频 模型来源:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB
效果示例:华为P30, ARM 单线程 122.296ms
-
图像分类
模型来源:https://github.com/forresti/SqueezeNet
效果示例:华为P30, ARM 单线程 81.4047ms
- 展示TNN基础接口的调用方法,快速在linux环境下运行模型。
- 修改build_aarch64.sh 或build_armhf.sh,以aarch64为例,需要配置编译选项: CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ TNN_LIB_PATH=../../scripts/build_aarch64_linux/
- 执行build_aarch64.sh
- 执行demo: ./demo_arm_linux ../../../model/SqueezeNet/squeezenet_v1.1.tnnproto ../../../model/SqueezeNet/squeezenet_v1.1.tnnmodel 224 224
- 创建classifier std::shared_ptr classifier = std::make_shared();
- 初始化classifier CHECK_TNN_STATUS(classifier->Init(proto, model, "", TNN_NS::TNNComputeUnitsCPU));
- 创建输入mat auto input_mat = std::make_shared<TNN_NS::Mat>(TNN_NS::DEVICE_ARM, TNN_NS::N8UC3, nchw);
- 执行classifier CHECK_TNN_STATUS(classifier->Classify(input_mat, w, h, result));