Kivy安卓应用集成DeepSpeech失败的问题求助
Kivy安卓集成DeepSpeech:模块缺失与依赖错误修复方案
一、解决"找不到deepspeech模块"问题
之前的自定义PythonForAndroid(P4A)recipe只构建了deepspeech_training模块,因为DeepSpeech根目录的setup.py仅负责训练相关代码。要得到推理用的核心模块,需调整recipe:
- 把构建脚本指向DeepSpeech的
native_client/python目录下的setup.py,这才是生成推理模块的配置文件。 - 调整recipe的
source_dir路径,确保指向native_client/python,同时添加逻辑复制DeepSpeech的核心动态库(libdeepspeech.so)到APK的对应架构目录(libs/[arm64-v8a]/等)。 - 构建完成后,解压APK检查
_python_bundle/site-packages/deepspeech目录,确认包含_impl.so、model.py等推理必需文件。
二、修复"libc++_shared.so not found"运行时错误
这个错误是因为deepspeech/_impl.so依赖系统的libc++_shared.so,但该库未被正确打包到APK中,可通过两种方式解决:
- 修改Buildozer配置:直接在
buildozer.spec的requirements里添加libc++_shared:requirements = python3==3.7.14, hostpython3==3.7.14, kivy, kivymd, sqlite3, numpy==1.14.5, deepspeech, apsw, libc++_shared - 手动在recipe中复制库:
- 找到你Android NDK路径下的
libc++_shared.so,通常在$ANDROID_NDK/sources/cxx-stl/llvm-libc++/libs/[对应架构]/ - 在recipe的
package阶段添加复制命令,把该库放到APK的libs/[对应架构]/目录下。
- 找到你Android NDK路径下的
- 可选:设置加载路径:如果还是加载失败,在Python代码开头添加环境变量配置:
import os os.environ['LD_LIBRARY_PATH'] += ':/data/user/0/org.test.myapp/files/app/libs/'
三、TensorFlow模型输出转文本的方法
如果用TensorFlow直接跑DeepSpeech模型,把输出数组转文本的步骤如下:
- 先加载模型配套的
alphabet.txt词汇表,里面是模型输出索引对应的字符。 - 对模型输出的概率数组(每个时间步对应词汇表的概率)取最大值,得到字符索引。
- 去重连续重复的字符(DeepSpeech模型会输出重复字符),再替换空白符得到最终文本。示例代码:
def convert_indices_to_text(predicted_indices, alphabet): result = [] last_char = None for idx in predicted_indices: current_char = alphabet[idx] if current_char != last_char: result.append(current_char) last_char = current_char return ''.join(result).replace('_', ' ') # 加载词汇表 with open('alphabet.txt', 'r', encoding='utf-8') as f: alphabet_list = [line.strip() for line in f.readlines()] # 假设model_output是TensorFlow输出的形状为(序列长度, 词汇表大小)的数组 indices = model_output.argmax(axis=1).numpy() final_text = convert_indices_to_text(indices, alphabet_list)
内容的提问来源于stack exchange,提问作者Gonçalo Pereira
相关产品推荐
相关产品推荐

