Ошибка импорта librosa для TensorFlow: библиотека sndfile не найдена

Я пытаюсь использовать 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

У кого-нибудь есть идеи, как это сортировать?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
2 503
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Установите sndfile для вашей операционной системы. В CentOS это должно быть yum install libsndfile.

Пишет, что он уже установлен. Очень странно для меня. Выходит за пределы моих знаний.

Jaacob 15.12.2020 21:25

Попробуйте также добавить пакет -dev/-devel

Jon Nordby 15.12.2020 23:42

Вы устанавливаете его внутри своего образа Docker?

Jon Nordby 15.12.2020 23:43

Я установил -devel в корень, но не повезло. Я также попытался выполнить его в докере: «docker exec -it 1e18ef5ff2aa yum localinstall mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/…» Я действительно должен установить его в докер , и я даже пытаюсь установить его правильно?

Jaacob 16.12.2020 00:49

Редактировать: я понял, что мне нужно сначала запустить команду bash, а затем попытаться установить ее. Но ни одна из установочных команд не была найдена, поэтому, прежде чем я углублюсь в это, просто хочу убедиться, что я должен был установить его в докер.

Jaacob 16.12.2020 01:11

Да, если ваш процесс Python выполняется из Jupyter внутри Docker, то все зависимости также должны находиться внутри образа Docker. Образ tensorflow Docker, вероятно, не основан на CentOS. Ubuntu/Debian или Alpine, скорее всего. Возможно, лучше всего написать файл Dockerfile для выполнения шагов во время сборки образа, а не во время выполнения.

Jon Nordby 16.12.2020 09:58

Наконец-то это сработало! Я создал новый файл докеров, в котором использовал TensorFlow в качестве базового образа, а затем добавил указанные установки в RUN. Теперь импорт работает отлично. Спасибо!!

Jaacob 17.12.2020 11:36

Хорошо. Я, вероятно, должен обновить свой ответ, чтобы включить эти инструкции, тогда

Jon Nordby 17.12.2020 12:30

Другие вопросы по теме