Я пытаюсь использовать TensorFlow Lite для проекта распознавания голоса с использованием ноутбука Jupyter, но когда я пытаюсь выполнить «импорт библиотеки» (используя команды, найденные здесь: https://github.com/ShawnHymel/tflite-speech-recognition /blob/master/01-speech-commands-mfcc-extraction.ipynb) Я продолжаю получать эту ошибку:
OSError: sndfile library not found
Я искал решение в течение двух дней, пробовал много разных вещей, которые я нашел в Интернете, но я просто не могу заставить его работать.
Я использую CentOS 8, и тензорный поток работает в докере:
docker pull tensorflow/tensorflow:latest-py3-jupyter
docker run -it --rm -v /home/server/Desktop/TensorFlow -p 8888:8888 tensorflow/tensorflow:latest-py3-jupyter
Мои требования.txt пусты, по крайней мере, когда я замораживаю пипсы > требования.txt.
pip -V или --v возвращает это
pip 20.3.2 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
Попытка установить pysndfile дает мне это
ERROR: Command errored out with exit status 1: /usr/bin/python3 /usr/local/lib/python3.6/dist-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-w_gdqebo/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools 'numpy>=1.13.0' 'cython>=0.25.0' wheel Check the logs for full command output.
Я пробовал разные команды, чтобы исправить эту ошибку и установить sndfile, но все они выдавали ошибки или просто говорили, что он уже установлен.
У меня установлена librosa, но попытка импортировать ее дает мне полную ошибку:
OSError Traceback (most recent call last)
<ipython-input-10-989066361697> in <module>
----> 1 import librosa
/usr/local/lib/python3.6/dist-packages/librosa/__init__.py in <module>
209 # And all the librosa sub-modules
210 from ._cache import cache
--> 211 from . import core
212 from . import beat
213 from . import decompose
/usr/local/lib/python3.6/dist-packages/librosa/core/__init__.py in <module>
4
5 from .convert import * # pylint: disable=wildcard-import
----> 6 from .audio import * # pylint: disable=wildcard-import
7 from .spectrum import * # pylint: disable=wildcard-import
8 from .pitch import * # pylint: disable=wildcard-import
/usr/local/lib/python3.6/dist-packages/librosa/core/audio.py in <module>
6 import warnings
7
----> 8 import soundfile as sf
9 import audioread
10 import numpy as np
/usr/local/lib/python3.6/dist-packages/soundfile.py in <module>
140 _libname = _find_library('sndfile')
141 if _libname is None:
--> 142 raise OSError('sndfile library not found')
143 _snd = _ffi.dlopen(_libname)
144 except OSError:
OSError: sndfile library not found
У кого-нибудь есть идеи, как это сортировать?
Установите sndfile для вашей операционной системы. В CentOS это должно быть yum install libsndfile
.
Попробуйте также добавить пакет -dev/-devel
Вы устанавливаете его внутри своего образа Docker?
Я установил -devel в корень, но не повезло. Я также попытался выполнить его в докере: «docker exec -it 1e18ef5ff2aa yum localinstall mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/…» Я действительно должен установить его в докер , и я даже пытаюсь установить его правильно?
Редактировать: я понял, что мне нужно сначала запустить команду bash, а затем попытаться установить ее. Но ни одна из установочных команд не была найдена, поэтому, прежде чем я углублюсь в это, просто хочу убедиться, что я должен был установить его в докер.
Да, если ваш процесс Python выполняется из Jupyter внутри Docker, то все зависимости также должны находиться внутри образа Docker. Образ tensorflow Docker, вероятно, не основан на CentOS. Ubuntu/Debian или Alpine, скорее всего. Возможно, лучше всего написать файл Dockerfile для выполнения шагов во время сборки образа, а не во время выполнения.
Наконец-то это сработало! Я создал новый файл докеров, в котором использовал TensorFlow в качестве базового образа, а затем добавил указанные установки в RUN. Теперь импорт работает отлично. Спасибо!!
Хорошо. Я, вероятно, должен обновить свой ответ, чтобы включить эти инструкции, тогда
Пишет, что он уже установлен. Очень странно для меня. Выходит за пределы моих знаний.