0.Android-NDK的下载
方式一:
下载Android-NDK
wget -c http://dl.google.com/android/ndk/android-ndk64-r10b-linux-x86_64.tar.bz2
解压文件
sudo tar -C /解压路径 -xvf android-ndk64-r10b-linux-x86_64.tar.bz2
方式二:
下载Android-NDK
wget -c http://dl.google.com/android/ndk/android-ndk-r10b-linux-x86_64.bin
执行bin文件(即解压)
./android-ndk-r10b-linux-x86_64.bin
这里只是用r10b做演示。可以下载其他的,一般都下载r14b。 当然也可以直接在官网下载
1.Android-NDK的配置
1.1 打开bashrc文件
要想使用Android-NDK,还需要进行环境变量的配置:
sudo gedit ~/.bashrc
如果没有权限,可以使用下面的代码试试
nano ~/.bashrc
1.2 修改bashrc文件
在文件末尾添加以下内容:
NDK_PATH=/home/zxd/snowboy/swig/Android/android-ndk-r14b
export PATH=$NDK_PATH:$PATH
其中文件夹路径要精确到解压后的最高层路径
/home/zxd/snowboy/swig/Android/android-ndk-r14b 修改成自己的ndk路径
按下Ctrl + X
,然后按Y
保存更改,最后按Enter
退出编辑器。
1.3 使bashrc文件生效
保存文件并使之生效:
source ~/.bashrc
1.4 验证ndk是否正确
安装并配置完成Android-NDK之后,需要进行安装验证,以确认正确安装并配置:
ndk-build
正常情况下
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/home/zxd/snowboy/swig/Android/android-ndk-r14b/build/core/build-local.mk:151: *** Android NDK: Aborting . Stop.
配置失败的情况下
command not found`,`ndk-build命令不存在
参考
【Linux】Ubuntu下安装并配置Android-NDK(附详细过程)
五、安装python
安装
sudo apt-get install python3
查看安装位置
which python3
或
type -a python
六、安装swig
现在 swig 已经支持 apt install 命令安装了,如果不想通过下面源码安装的可以直接执行下面命令安装。
sudo apt install swig
安装完成后,通过如下代码查看版本
swig -version
显示版本号就可以了。到此结束!!!
下面的步骤是使用 swig 源码安装的方法。
下载源码
这里直接去官网下载就行了,我下载的是swig-4.0.1.tar.gz
链接:http://www.swig.org/download.html
安装g++
若已经安装可以直接跳过
若没安装则使用以下命令安装
sudo apt-get install g++
安装pcre
sudo apt-get install libpcre3 libpcre3-dev
解压swig源码
chmod 777 swig-4.0.1.tar.gz
tar -xzvf swig-4.0.1.tar.gz
编译、安装swig
进入刚解压出的文件夹里,指定安装目录为自定义的目录
./configure --prefix=/home/swig
make //编译
make install //安装
若要默认安装,直接执行./configure即可
配置环境变量PATH
打开./bashrc文件并添加如下语句
export PATH=/home/swig/bin:$PATH
再使用如下命令使更改立即生效
source ~/.bashrc
安装完成!
参考
七、编译snowboy
参考文章
snowboy github地址(不更新了):https://github.com/Kitt-AI/snowboy
snowboy不维护之后seasalt-ai又维护了一段时间(主要提供出了基于docker的唤醒词训练)所以直接下载它的源码即可
GitHub - seasalt-ai/snowboy: DNN based hotword and wake word detection toolkit (model generation included)
docker:Install Docker Desktop on Ubuntu | Docker Documentation
编译snowboy
安装swig,直接安装4.0版本,安装好之后也不需要配置环境。
sudo apt install swig
安装完成后,通过如下代码查看版本
swig -version
显示版本号就可以了。到此结束!!!
下载snowboy源码
git clone https://github.com/Kitt-AI/snowboy.git
进入到目录中
cd swig/Android
make
如果想要ARMv8 64bit
make BIT=64
这将为 ARM 生成一个交叉编译库:
jniLibs/
├── arm64-v8a
│ └── libsnowboy-detect-android.so
└── armeabi-v7a
└── libsnowboy-detect-android.so
和一些java文件
java
└── ai
└── kitt
└── snowboy
├── SnowboyDetect.java
├── snowboy.java
└── snowboyJNI.java
将这些文件拷贝到源码的example-Android中,生成的apk就能运行了。
训练唤醒词
打开上面这个网址,可以训练唤醒词。
记录 3 个唤醒词示例并提交以生成 .pmdl 文件。
启用麦克风(Chrome 需要)
单击“录制”并等待准备就绪
说出唤醒词并等待结束
重复直到有 3 个示例
输入模型名称,提交音频,然后单击“保存模型”按钮
下载下来的文件是.pdml文件,这个是个人版本,不是.umdl通用版本,只适用于个人。
Models with suffix pmdl are personal models thus they are supposed to only work well for the person who provides the audio samples. If you are looking for a model that works well for everyone, you should use the universal model (with suffix umdl).
意思是说pmdl是个人适用,umdl是通用。
bug
打开终端,执行make命令。出现以下错误
HOST_OS=linux
HOST_EXE=
HOST_ARCH=x86_64
HOST_TAG=linux-x86_64
HOST_NUM_CPUS=4
BUILD_NUM_CPUS=8
COMMAND: python ./android-ndk-r14b/build/tools/make_standalone_toolchain.py --arch arm --api 14 --stl gnustl --install-dir=/home/zxd/snowboy/swig/Android/ndk_install_32bit
./android-ndk-r14b/build/tools/ndk-common.sh: line 164: python: command not found
ERROR: Failed to create toolchain.
make: [Makefile:93:/home/zxd/snowboy/swig/Android/ndk_install_32bit] 错误 1 (已忽略)
正克隆到 'OpenBLAS-Android-ARM32'...
remote: Enumerating objects: 67101, done.
remote: Counting objects: 100% (178/178), done.
remote: Compressing objects: 100% (103/103), done.
remote: Total 67101 (delta 85), reused 141 (delta 75), pack-reused 66923
接收对象中: 100% (67101/67101), 45.29 MiB | 2.64 MiB/s, 完成.
处理 delta 中: 100% (54965/54965), 完成.
正在更新文件: 100% (12011/12011), 完成.
分支 'arm_soft_fp_abi' 设置为跟踪 'origin/arm_soft_fp_abi'。
切换到一个新分支 'arm_soft_fp_abi'
HEAD 现在位于 b5c96fcfc Support ARM SOFTFP ABI for saxpy, sdot, snrm2, sscal, sgemv, sger.
make[1]: 进入目录“/home/zxd/snowboy/swig/Android/OpenBLAS-Android-ARM32”
/usr/bin/ld: warning: /tmp/cce7OVqC.o: missing .note.GNU-stack section implies executable stack
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
C Compiler (/home/zxd/snowboy/swig/Android/ndk_install_32bit/bin/arm-linux-androideabi-gcc) is something wrong.
1 at ./c_check line 29.
make[1]: *** [Makefile.prebuild:37:config.h] 错误 2
Makefile.system:925: Makefile.: 没有那个文件或目录
make[1]: *** 没有规则可制作目标“Makefile.”。 停止。
make[1]: 离开目录“/home/zxd/snowboy/swig/Android/OpenBLAS-Android-ARM32”
make: [Makefile:96:OpenBLAS-Android-ARM32/install/lib/libopenblas.a] 错误 1 (已忽略)
/home/zxd/snowboy/swig/Android/ndk_install_32bit/bin/arm-linux-androideabi-g++ -O3 --sysroot=/home/zxd/snowboy/swig/Android/ndk_install_32bit/sysroot -std=c++0x -rdynamic -I../../ -Werror -Wall -fsigned-char -fpic -fPIC -mfloat-abi=softfp -march=armv7-a -mfpu=neon -DNDEBUG -ffast-math -fomit-frame-pointer -O3 -pie -fPIE -DHAVE_NEON=1 -fno-strict-aliasing -Wno-unused-function -shared -c snowboy-detect-swig.cc -o snowboy-detect-swig.o
make: /home/zxd/snowboy/swig/Android/ndk_install_32bit/bin/arm-linux-androideabi-g++: 没有那个文件或目录
make: *** [Makefile:104:snowboy-detect-swig.o] 错误 127
出现这个错误,其实是python有问题。python: command not found就是这行代码,浪费我好长时间。
解决办法
zxd@zxdvm:~$ apt-get install git
E: 无法打开锁文件 /var/lib/dpkg/lock-frontend - open (13: 权限不够)
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),请查看您是否正以 root 用户运行?
zxd@zxdvm:~$ # apt-get install git
zxd@zxdvm:~$ sudo apt-get install git
[sudo] zxd 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
将会同时安装下列软件:
git-man liberror-perl
建议安装:
git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb
git-cvs git-mediawiki git-svn
下列【新】软件包将被安装:
git git-man liberror-perl
升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 134 个软件包未被升级。
需要下载 4,673 kB 的归档。
解压缩后会消耗 23.9 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
获取:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu lunar/main amd64 liberror-perl all 0.17029-2 [25.6 kB]
获取:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu lunar-updates/main amd64 git-man all 1:2.39.2-1ubuntu1.1 [1,075 kB]
获取:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu lunar-updates/main amd64 git amd64 1:2.39.2-1ubuntu1.1 [3,572 kB]
已下载 4,673 kB,耗时 16秒 (294 kB/s)
正在选中未选择的软件包 liberror-perl。
(正在读取数据库 ... 系统当前共安装有 210746 个文件和目录。)
准备解压 .../liberror-perl_0.17029-2_all.deb ...
正在解压 liberror-perl (0.17029-2) ...
正在选中未选择的软件包 git-man。
准备解压 .../git-man_1%3a2.39.2-1ubuntu1.1_all.deb ...
正在解压 git-man (1:2.39.2-1ubuntu1.1) ...
正在选中未选择的软件包 git。
准备解压 .../git_1%3a2.39.2-1ubuntu1.1_amd64.deb ...
正在解压 git (1:2.39.2-1ubuntu1.1) ...
正在设置 liberror-perl (0.17029-2) ...
正在设置 git-man (1:2.39.2-1ubuntu1.1) ...
正在设置 git (1:2.39.2-1ubuntu1.1) ...
正在处理用于 man-db (2.11.2-1) 的触发器 ...
zxd@zxdvm:~$ git -version
未知选项:-version
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--super-prefix=<path>] [--config-env=<name>=<envvar>]
<command> [<args>]
zxd@zxdvm:~$ git
用法:git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--super-prefix=<path>] [--config-env=<name>=<envvar>]
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/a6bb870c11c2fb20890067d5f7512c96.png)
![img](https://img-blog.csdnimg.cn/img_convert/2c93ae5cd637c6ff3de3cf3d0c8ad18c.png)
![img](https://img-blog.csdnimg.cn/img_convert/84886570b40dd9f48854519ff9840899.png)
![img](https://img-blog.csdnimg.cn/img_convert/c89b295acd21996743f0f0aa3584b28f.png)
![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**
该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中...(img-ZClpKTKI-1712865110347)]
[外链图片转存中...(img-cyNDjzuh-1712865110347)]
[外链图片转存中...(img-sFSeINTp-1712865110348)]
[外链图片转存中...(img-zzUavPgr-1712865110348)]
![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**
<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />