翻译《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源码:
1 2 |
git clone https://github.com/k2-fsa/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为例)。
1 2 |
export ANDROID_NDK=/Users/fangjun/software/my ANDROID/NDK/22.17171670 |
■ 提示: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”的行
1 2 3 4 |
list(APPEND ANDROID_COMPILER_FLAGS -g # 注释或删除这个参数 -DANDROID |
☢ 警示
如果不删除上面“-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
1 2 3 4 |
cd sherpa-ncnn # 进入repo根目录 ./build-android-arm64-v8a.sh |
编译过程中须要联网下载一下工具包。结束后生成如下库文件:
1 2 3 4 5 6 7 |
$ ls -lh build-android-arm64-v8a/install/lib/lib*.so -rwxr-xr-x 1 fangjun staff 848K Dec 18 16:49 build-android-arm64-v8a/install/lib/libkaldi-native-fbank-core.so -rwxr-xr-x 1 fangjun staff 3.4M Dec 18 16:49 build-android-arm64-v8a/install/lib/libncnn.so -rwxr-xr-x 1 fangjun staff 195K Dec 18 16:49 build-android-arm64-v8a/install/lib/libsherpa-ncnn-core.so -rwxr-xr-x 1 fangjun staff 19K Dec 18 16:49 build-android-arm64-v8a/install/lib/libsherpa-ncnn-jni.so |
拷贝到 android/SherpaNcnn/app/src/main/jniLibs/arm64-v8a/ :
1 2 3 |
$ cp build-android-arm64-v8a/install/lib/lib*.so 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
1 2 3 |
cd sherpa-ncnn ./build-android-armv7-eabi.sh |
编译结束后生成如下库文件:
1 2 3 4 5 6 |
$ ls -lh build-android-armv7-eabi/install/lib/lib*.so -rwxr-xr-x 1 fangjun staff 513K Dec 18 17:04 build-android-armv7-eabi/install/lib/libkaldi-native-fbank-core.so -rwxr-xr-x 1 fangjun staff 1.9M Dec 18 17:04 build-android-armv7-eabi/install/lib/libncnn.so -rwxr-xr-x 1 fangjun staff 163K Dec 18 17:04 build-android-armv7-eabi/install/lib/libsherpa-ncnn-core.so -rwxr-xr-x 1 fangjun staff 28K Dec 18 17:04 build-android-armv7-eabi/install/lib/libsherpa-ncnn-jni.so |
然后,拷贝到 android/SherpaNcnn/app/src/main/jniLibs/armeabi-v7a/:
1 2 |
cp build-android-armv7-eabi/install/lib/lib*.so android/SherpaNcnn/app/src/main/jniLibs/armeabi-v7a/ |
运行cp命令后,您应该能看到如图所示的目录结构。
4.3.编译x86_64
1 2 3 |
cd sherpa-ncnn # Go to the root repo ./build-android-x86-64.sh |
编译结束后生成如下库文件:
1 2 3 4 5 6 7 |
$ ls -lh build-android-x86-64/install/lib/lib*.so -rwxr-xr-x 1 fangjun staff 901K Dec 18 17:14 build-android-x86-64/install/lib/libkaldi-native-fbank-core.so -rwxr-xr-x 1 fangjun staff 6.9M Dec 18 17:14 build-android-x86-64/install/lib/libncnn.so -rwxr-xr-x 1 fangjun staff 208K Dec 18 17:14 build-android-x86-64/install/lib/libsherpa-ncnn-core.so -rwxr-xr-x 1 fangjun staff 19K Dec 18 17:14 build-android-x86-64/install/lib/libsherpa-ncnn-jni.so |
然后,拷贝到 android/SherpaNcnn/app/src/main/jniLibs/x86_64/:
1 2 |
cp build-android-x86-64/install/lib/lib*.so 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/:
1 2 3 4 5 6 7 8 9 10 11 12 |
cd android/SherpaNcnn/app/src/main/assets/ sudo apt-get install git-lfs GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/sherpa-ncnn-conv-emformer-transducer-2022-12-06 cd sherpa-ncnn-conv-emformer-transducer-2022-12-06 git lfs pull --include "*.bin" # Now, remove extra files to reduce the file size of the generated apk rm -rf .git test_wavs scripts/ rm export-for-ncnn.sh *.png README.md |
之后,应该有如下文件:
1 2 3 4 5 6 7 8 9 10 11 12 |
$ ls -lh total 322208 -rw-r--r-- 1 fangjun staff 5.9M Dec 18 17:40 decoder_jit_trace-pnnx.ncnn.bin -rw-r--r-- 1 fangjun staff 439B Dec 18 17:39 decoder_jit_trace-pnnx.ncnn.param -rw-r--r-- 1 fangjun staff 141M Dec 18 17:40 encoder_jit_trace-pnnx.ncnn.bin -rw-r--r-- 1 fangjun staff 79K Dec 18 17:39 encoder_jit_trace-pnnx.ncnn.param -rw-r--r-- 1 fangjun staff 6.9M Dec 18 17:40 joiner_jit_trace-pnnx.ncnn.bin -rw-r--r-- 1 fangjun staff 490B Dec 18 17:39 joiner_jit_trace-pnnx.ncnn.param -rw-r--r-- 1 fangjun staff 53K Dec 18 17:39 tokens.txt $ du -h -d1 . 157M . |
之后,您应该能看到如图所示的目录结构。
● 提示:如果您选择了不同的预训练模型,请确保您还更改了如图列出的相应代码:
6.生成APK
最后,是时候构建sherpa-ncnn来生成APK包了。
选择菜单 Build->Make Project,如下图所示。
生成的apk文件在:android/SherpaNcnn/app/build/outputs/apk/debug/app-debug.apk:
1 2 3 |
$ ls -lh android/SherpaNcnn/app/build/outputs/apk/debug/app-debug.apk -rw-r--r-- 1 fangjun staff 152M Dec 18 17:53 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
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/4230.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设