使用 Buildozer 进行语音识别

Posted

技术标签:

【中文标题】使用 Buildozer 进行语音识别【英文标题】:Speech Recognition with Buildozer 【发布时间】:2018-01-27 23:33:43 【问题描述】:

我正在为 android 编写一个应用程序,我正在使用 SpeachRecognition 库使用 Google API 将语音翻译成文本。 我的程序在 ubuntu 16.04 python 3.5 上的 kivy GUI 上运行良好,那么我如何使用 buildozer 构建这个应用程序?要求是什么? 我已将 buildozer.spec 中的要求修改为:" requirements = kivy , hostpython2 , SpeechRecognition , pyaudio " ,但这会引发以下错误:" pyaudio 的构建轮失败"强>。

编辑:(命令“Buildozer android debug”的部分输出)

[INFO]: # 安装纯 Python 模块

[INFO]:需求(SpeechRecognition、pyaudio)没有配方,正在尝试使用 pip 安装它们

[INFO]:如果失败,可能意味着模块已经编译了组件,需要一个配方。

[INFO]: -> 目录上下文/home/proctronics/Desktop/test/.buildozer/android/platform/build/build

[INFO]: -> 运行 virtualenv --python=python2.7 venv

objs_paths 是 ['/home/proctronics/Desktop/test/.buildozer/android/platform/build/build/bootstrap_builds/sdl2-python2/collat​​ed_objects']

复制库

[INFO]:为 Python 模块创建 requirements.txt 文件

[INFO]: 使用 pip 安装 Python 模块

[INFO]:如果失败并显示有关 /bin/false 的消息,这可能意味着无法使用 pip 安装包,因为它需要编译配方。

[INFO]: -> running bash -c source venv/bin/activate && env CC=/bin/false CXX=/bin/false PYTHONPATH=/home/proctronics/Desktop/test/.b...(还有 259 个)

工作:pid 3095:n/python2.7 -u -c "import setupt...(以及 509 更多)的线程后台线程中的异常

Traceback(最近一次调用最后一次):

文件“/usr/lib/python2.7/threading.py”,第 801 行,在 __bootstrap_inner

self.run()

文件“/usr/lib/python2.7/threading.py”,第 754 行,运行中

self.__target(*self.__args, **self.__kwargs)

文件“/home/proctronics/.local/lib/python2.7/site-packages/sh.py”,第 1540 行,打包

fn(*args, **kwargs)

文件“/home/proctronics/.local/lib/python2.7/site-packages/sh.py”,第 2459 行,在 background_thread 中

handle_exit_code(exit_code)

文件“/home/proctronics/.local/lib/python2.7/site-packages/sh.py”,第 2157 行,在 fn 中

返回 self.command.handle_command_exit_code(exit_code)

文件“/home/proctronics/.local/lib/python2.7/site-packages/sh.py”,第 815 行,在 handle_command_exit_code 中

提高exc

ErrorReturnCode_1:

RAN: /bin/bash -c source venv/bin/activate && env CC=/bin/false CXX=/bin/false PYTHONPATH=/home/proctronics/Desktop/test/.buildozer/android/platform/build /build/python-installs/blue/lib/python2.7/site-packages pip install --target '/home/proctronics/Desktop/test/.buildozer/android/platform/build/build/python-installs/blue/ lib/python2.7/site-packages' --no-deps -r requirements.txt

标准输出:

收集 SpeechRecognition(来自 -r requirements.txt(第 1 行))

使用缓存的 SpeechRecognition-3.7.1-py2.py3-none-any.whl

收集 pyaudio(来自 -r requirements.txt(第 2 行))

使用缓存的 PyAudio-0.2.11.tar.gz

收集包的造***:pyaudio

为 pyaudio 运行 setup.py bdist_wheel ... 错误

命令的完整输出 /home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/bin/python2.7 -u -c "import setuptools, tokenize;file='/tmp/pip-build-QShDtG/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read() .replace('

','

');f.close();exec(compile(code, file, 'exec'))" bdist_wheel -d /tmp/tmp9IBfgPpip-wheel---python-tag cp27:

运行 bdist_wheel

运行构建

运行 build_py

创建构建

创建 build/lib.linux-x86_64-2.7

复制 src/pyaudio.py -> build/lib.linux-x86_64-2.7

运行 build_ext

构建“_portaudio”扩展

创建 build/temp.linux-x86_64-2.7

创建 build/temp.linux-x86_64-2.7/src

/bin/false -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format- security -fPIC -I/usr/include/python2.7 -c src/_portaudiomodule.c -o build/temp.linux-x86_64-2.7/src/_portaudiomodule.o

错误:命令“/bin/false”失败,退出状态为 1


pyaudio 构建***失败

为 pyaudio 运行 setup.py clean

构建pyaudio失败

安装收集的包:SpeechRecognition、pyaudio

运行 setup.py install for pyaudio ... 错误

命令的完整输出 /home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/bin/python2.7 -u -c "import setuptools, tokenize;file='/tmp/pip-build-QShDtG/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read() .replace('

','

');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-ObcFB4-record/install-record. txt --single-version-externally-managed --compile --install-headers /home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/include/site/python2.7/pyaudio - -home=/tmp/tmp93Wh_5:

运行安装

运行构建

运行 build_py

创建构建

创建 build/lib.linux-x86_64-2.7

复制 src/pyaudio.py -> build/lib.linux-x86_64-2.7

运行 build_ext

构建“_portaudio”扩展

创建 build/temp.linux-x86_64-2.7

创建 build/temp.linux-x86_64-2.7/src

/bin/false -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format- security -fPIC -I/usr/include/python2.7 -c src/_portaudiomodule.c -o build/temp.linux-x86_64-2.7/src/_portaudiomodule.o

错误:命令“/bin/false”失败,退出状态为 1


命令 "/home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/bin/python2.7 -u -c "import setuptools, tokenize;文件 ='/tmp/pip-build-QShDtG/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace ('

','

');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-ObcFB4-record/install-record. txt --single-version-externally-managed --compile --install-headers /home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/include/site/python2.7/pyaudio - -home=/tmp/tmp93Wh_5" 失败,错误代码 1 在 /tmp/pip-build-QShDtG/pyaudio/

标准错误:

Traceback(最近一次调用最后一次):

文件“/usr/lib/python2.7/runpy.py”,第 174 行,在 _run_module_as_main

"ma​​in", fname, loader, pkg_name)

文件“/usr/lib/python2.7/runpy.py”,第 72 行,在 _run_code 中

run_globals 中的执行代码

文件“/home/proctronics/Desktop/test/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py”,第905行,在

main()

文件“/home/proctronics/Desktop/test/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py”,第 902 行,在 main

工具链CL()

init 中的文件“/home/proctronics/Desktop/test/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py”,第 508 行

getattr(self, args.subparser_name.replace('-', '_'))(args)

文件“/home/proctronics/Desktop/test/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py”,第 147 行,在 wrapper_func 中

build_dist_from_args(ctx, dist, args)

文件“/home/proctronics/Desktop/test/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py”,第 190 行,在 build_dist_from_args 中

build_recipes(build_order, python_modules, ctx)

文件“pythonforandroid/build.py”,第 585 行,在 build_recipes 中

文件“pythonforandroid/build.py”,第 626 行,在 run_pymodules_install 中

文件“pythonforandroid/logger.py”,第 175 行,在 shprint 中

文件“/home/proctronics/.local/lib/python2.7/site-packages/sh.py”,第 863 行,在下一个

self.wait()

文件“/home/proctronics/.local/lib/python2.7/site-packages/sh.py”,第 792 行,等待中

self.handle_command_exit_code(exit_code)

文件“/home/proctronics/.local/lib/python2.7/site-packages/sh.py”,第 815 行,在 handle_command_exit_code 中

提高exc

sh.ErrorReturnCode_1:

RAN: /bin/bash -c source venv/bin/activate && env CC=/bin/false CXX=/bin/false PYTHONPATH=/home/proctronics/Desktop/test/.buildozer/android/platform/build /build/python-installs/blue/lib/python2.7/site-packages pip install --target '/home/proctronics/Desktop/test/.buildozer/android/platform/build/build/python-installs/blue/ lib/python2.7/site-packages' --no-deps -r requirements.txt

标准输出:

收集 SpeechRecognition(来自 -r requirements.txt(第 1 行))

使用缓存的 SpeechRecognition-3.7.1-py2.py3-none-any.whl

收集 pyaudio(来自 -r requirements.txt(第 2 行))

使用缓存的 PyAudio-0.2.11.tar.gz

收集包的造***:pyaudio

为 pyaudio 运行 setup.py bdist_wheel ... 错误

命令的完整输出 /home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/bin/python2.7 -u -c "import setuptools, tokenize;file='/tmp/pip-build-QShDtG/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read() .replace('

','

');f.close();exec(compile(code, file, 'exec'))" bdist_wheel -d /tmp/tmp9IBfgPpip-wheel---python-tag cp27:

运行 bdist_wheel

运行构建

运行 build_py

创建构建

创建 build/lib.linux-x86_64-2.7

复制 src/pyaudio.py -> build/lib.linux-x86_64-2.7

运行 build_ext

构建“_portaudio”扩展

创建 build/temp.linux-x86_64-2.7

创建 build/temp.linux-x86_64-2.7/src

/bin/false -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format- security -fPIC -I/usr/include/python2.7 -c src/_portaudiomodule.c -o build/temp.linux-x86_64-2.7/src/_portaudiomodule.o

错误:命令“/bin/false”失败,退出状态为 1


pyaudio 构建***失败

为 pyaudio 运行 setup.py clean

构建pyaudio失败

安装收集的包:SpeechRecognition、pyaudio

运行 setup.py install for pyaudio ... 错误

命令的完整输出 /home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/bin/python2.7 -u -c "import setuptools, tokenize;file='/tmp/pip-build-QShDtG/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read() .replace('

','

');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-ObcFB4-record/install-record. txt --single-version-externally-managed --compile --install-headers /home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/include/site/python2.7/pyaudio - -home=/tmp/tmp93Wh_5:

运行安装

运行构建

运行 build_py

创建构建

创建 build/lib.linux-x86_64-2.7

复制 src/pyaudio.py -> build/lib.linux-x86_64-2.7

运行 build_ext

构建“_portaudio”扩展

创建 build/temp.linux-x86_64-2.7

创建 build/temp.linux-x86_64-2.7/src

/bin/false -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format- security -fPIC -I/usr/include/python2.7 -c src/_portaudiomodule.c -o build/temp.linux-x86_64-2.7/src/_portaudiomodule.o

错误:命令“/bin/false”失败,退出状态为 1


命令 "/home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/bin/python2.7 -u -c "import setuptools, tokenize;文件 ='/tmp/pip-build-QShDtG/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace ('

','

');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-ObcFB4-record/install-record. txt --single-version-externally-managed --compile --install-headers /home/proctronics/Desktop/test/.buildozer/android/platform/build/build/venv/include/site/python2.7/pyaudio - -home=/tmp/tmp93Wh_5" 失败,错误代码 1 在 /tmp/pip-build-QShDtG/pyaudio/

标准错误:

命令失败:/usr/bin/python -m pythonforandroid.toolchain create --dist_name=blue --bootstrap=sdl2 --requirements=kivy,hostpython2,SpeechRecognition,pyaudio --arch armeabi-v7a --copy-libs --color=always --storage-dir=/home/proctronics/Desktop/test/.buildozer/android/platform/build

Buildozer 执行最后一条命令失败

该错误可能隐藏在此错误上方的日志中

请阅读完整的日志,并在之前搜索它

提出了 buildozer 本身的问题。

如果出现错误报告,请使用 log_level 添加完整日志

提前致谢。

【问题讨论】:

能再详细点吗?考虑编辑问题并添加完整的错误日志 @Juggernaut 这是尝试安装要求后的完整输出。 【参考方案1】:

根据这个link,只能自动安装纯python包,所有二进制编译依赖的包都必须写recipe。

配方是包含要编译的模块的“定义”的脚本。 a 的配方的目录布局类似于:

python-for-android/recipes//recipe.sh

python-for-android/recipes//补丁/

python-for-android/recipes//patches/fix-path.patch 什么时候 构建,所有配方构建必须去:

python-for-android/build// 例如,如果 您想为 sdl 创建一个配方,请执行以下操作:

cd python-for-android/recipes mkdir sdl cp recipe.sh.tmpl

sdl/recipe.sh sed -i 's#XXX#sdl#' sdl/recipe.sh 然后,编辑

sdl/recipe.sh 调整其他信息(版本、url)并完成 构建函数。

【讨论】:

以上是关于使用 Buildozer 进行语音识别的主要内容,如果未能解决你的问题,请参考以下文章

golang 使用科大讯飞进行语音合成与识别

语音识别系列︱利用达摩院ModelScope进行语音识别+标点修复

语音识别系列︱利用达摩院ModelScope进行语音识别+标点修复

语音识别系列︱利用达摩院ModelScope进行语音识别+标点修复

尝试在使用 SpeechKit 进行语音识别之前播放系统声音

使用OpenAI的Whisper 模型进行语音识别