使用 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/collated_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
"main", 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 进行语音识别的主要内容,如果未能解决你的问题,请参考以下文章
语音识别系列︱利用达摩院ModelScope进行语音识别+标点修复
语音识别系列︱利用达摩院ModelScope进行语音识别+标点修复
语音识别系列︱利用达摩院ModelScope进行语音识别+标点修复