ASR/CV/ML      为 Android 构建 sherpa ncnn   
文章目录  [隐藏]

翻译《Build sherpa-ncnn for Android》
原文:https://k2-fsa.github.io/sherpa/ncnn/android/build-sherpa-ncnn.html
项目:https://github.com/k2-fsa/sherpa-ncnn
自称新一代Kaldi:https://www.bilibili.com/video/BV1vR4y1k7eo ,看起来对安卓很友好,的确很棒。

1.安装AndroidStudio



2.下载sherpa-ncnn

下载sherpa-ncnn源码:


3.安装NDK

3.1.启动AndroidStudio。Open,选择刚刚克隆的sherpa-ncnn/android/SherpaNcnn


3.2.打开sherpa-ncnn/android/SherpaNcnn.


3.3.打开菜单Tools,SDK Manager.


3.4.安装NDK


3.5其它:
在下文中,我们假设 Android SDK 的位置设置为 /Users/fangjun/software/my Android。您可以在下面进行相应更改。
然后,您可以在 /Users/fangjun/software/my-android/ndk/22.1.7171670 找到刚刚安装的NDK。

● 敬告:如果您选择了不同版本的NDK,请相应地更换版本号“22.1.7171670”。

● 接下来,让我们设置环境变量 ANDROID_NDK 以供以后使用(macos为例)。


■ 提示:https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-android
(重要)删除 Android NDK 中的硬编码调试标志以修复 Android NDK
相关问题在:https://github.com/android/ndk/issues/243
步骤:
1)如果ndk版本小于r23,打开 $ANDROID_NDK/build/cmake/android.toolchain.cmake
如果版本大于等于r23,打开 $ANDROID_NDK/build/cmake/android-legacy.toolchain.cmake
2)删除包含“-g”的行


☢ 警示
如果不删除上面“-g”这一行,生成的库 libncnn.so 可以大到21MB甚至更大!

4.编译sherpa-ncnn(C++代码)

在安装NDK之后,是时候构建sherpa-ncnn的C++代码了。在下文中,我们展示了如何为以下Android ABI构建sherpa ncnn:
▶ arm64-v8a
▶ armeabi-v7a
▶ x86_64

● 敬告:通常您只需选择一个ABI。arm64-v8a可能是最常见的。如果要在模拟器上测试应用程序,可能需要x86_64。

4.1.编译arm64-v8a


编译过程中须要联网下载一下工具包。结束后生成如下库文件:


拷贝到 android/SherpaNcnn/app/src/main/jniLibs/arm64-v8a/ :


运行cp命令后,您应该能看到如图所示的目录结构。


■ 提示:如果你设定项目的Android版本大于等于7.0并且希望在GPU上运行sherpa-ncnn,那么编译时的指令 ./build-android-arm64-v8a.sh 更改为 ./build-android-arm64-v8a-with-vulkan.sh,
编译后使用的库文件 build-android-arm64-v8a/install/lib/lib*.so 更改为 ./build-android-arm64-v8a-with-vulkan/install/lib/lib*.so 。
不用修改任何代码。
此外,您需要安装Vulkan sdk。请参见 https://github.com/k2-fsa/sherpa-ncnn/blob/master/install-vulkan-macos.md 详细信息。

4.2.编译armeabi-v7a


编译结束后生成如下库文件:


然后,拷贝到 android/SherpaNcnn/app/src/main/jniLibs/armeabi-v7a/:


运行cp命令后,您应该能看到如图所示的目录结构。

4.3.编译x86_64


编译结束后生成如下库文件:


然后,拷贝到 android/SherpaNcnn/app/src/main/jniLibs/x86_64/:


运行cp命令后,您应该能看到如图所示的目录结构。

5.下载预训练模型

请阅读所有可用预训练模型的预训练模型。
在下文中,我们使用来自 https://huggingface.co/csukuangfj/sherpa-ncnn-conv-emformer-transducer-2022-12-06 的模型,其同时支持中文和英文。

● 提示:该模型使用icefall进行训练,原始torchscript模型来自 https://huggingface.co/ptrnull/icefall-asr-conv-emformer-transducer-stateless2-zh.

使用下面的指令下载模型,并放入 android/SherpaNcnn/app/src/main/assets/:


之后,应该有如下文件:


之后,您应该能看到如图所示的目录结构。


● 提示:如果您选择了不同的预训练模型,请确保您还更改了如图列出的相应代码:

6.生成APK

最后,是时候构建sherpa-ncnn来生成APK包了。
选择菜单 Build->Make Project,如下图所示。


生成的apk文件在:android/SherpaNcnn/app/build/outputs/apk/debug/app-debug.apk:


恭喜,您成功生成了Android上的apk.

7.分析apk



选择 Build -> Analyze APK ... 如上图, 在弹出的对话框中选择 生成APK,会得到app-debug.apk, 您将看到下图所示:


从图中可以看到,APK的大部分被预先训练的模型占用,而运行时(包括共享库)只有1.6MB。

● 提示:我们有预先构建的APK,可以从 https://huggingface.co/csukuangfj/sherpa-ncnn-apk 下载。
请参考有关使用上述APKs的演示视频:视频演示

- end

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设