Ошибка при запуске библиотеки на python

Я выполняю шаги в соответствии с http://npatta01.github.io/2015/08/10/dlib/, но когда я пытаюсь запустить (использую sudo),

python python_examples/face_detector.py examples/faces/2007_007763.jpg

вернуть ошибку. Во-первых, ошибка была

AttributeError: 'module' object has no attribute 'image_window' 

к строке 8. Теперь ошибка Illegal instruction (core dumped), но я не знаю, почему. Помогите, пожалуйста, правильно добавить библиотеку.

import sys

import dlib
from skimage import io


detector = dlib.get_frontal_face_detector()
win = dlib.image_window()

for f in sys.argv[1:]:
    print("Processing file: {}".format(f))
    img = io.imread(f)
    # The 1 in the second argument indicates that we should upsample the image
    # 1 time.  This will make everything bigger and allow us to detect more
    # faces.
    dets = detector(img, 1)
    print("Number of faces detected: {}".format(len(dets)))
    for i, d in enumerate(dets):
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
            i, d.left(), d.top(), d.right(), d.bottom()))

    win.clear_overlay()
    win.set_image(img)
    win.add_overlay(dets)
    dlib.hit_enter_to_continue()


# Finally, if you really want to you can ask the detector to tell you the score
# for each detection.  The score is bigger for more confident detections.
# The third argument to run is an optional adjustment to the detection threshold,
# where a negative value will return more detections and a positive value fewer.
# Also, the idx tells you which of the face sub-detectors matched.  This can be
# used to broadly identify faces in different orientations.
if (len(sys.argv[1:]) > 0):
    img = io.imread(sys.argv[1])
    dets, scores, idx = detector.run(img, 1, -1)
    for i, d in enumerate(dets):
        print("Detection {}, score: {}, face_type:{}".format(
            d, scores[i], idx[i]))

person Community    schedule 27.09.2016    source источник
comment
Не могли бы вы опубликовать свой код? Происходит то, что вы пытаетесь получить доступ к функции или объекту с именем image_window в другом модуле, но он не существует.   -  person Patrick Haugh    schedule 27.09.2016
comment
Добро пожаловать в StackOverflow. Пожалуйста, прочтите и следуйте инструкциям по публикации в справочной документации. Здесь применяется минимальный, полный, поддающийся проверке пример. Мы не сможем эффективно помочь вам, пока вы не опубликуете свой код и точно не опишете проблему.   -  person Prune    schedule 27.09.2016
comment
Поскольку вы недостаточно описали, что вы сделали для начала, что вы изменили, и не предоставили полное сообщение об ошибке, мы действительно не можем помочь.   -  person Prune    schedule 27.09.2016
comment
@PatrickHaugh Да, ошибка «win = dlib.image_window ()», но почему? На другом компе запускается.   -  person    schedule 27.09.2016
comment
@Prune Я точно не знаю, что я изменил. После первой ошибки я попытался запустить библиотеку на C/C++ с помощью eclipse, но у меня тоже не получилось, и я снова попытался запустить библиотеку на python, и я получил вторую ошибку.   -  person    schedule 27.09.2016


Ответы (2)


Как я вижу в вашем коде:

detector = dlib.get_frontal_face_detector()
win = dlib.image_window()

Первая линия работает, а вторая нет. Это означает, что dlib установлен, но скомпилирован без поддержки графического интерфейса.

В исходном коде dlib мы видим, что если определен макрос DLIB_NO_GUI_SUPPORT - в модуле dlib не будет функции "image_window". Этот макрос определяется автоматически, если сценарии CMake не могут найти библиотеки X11.

Вам необходимо убедиться, что dlib скомпилирован с поддержкой графического интерфейса. Для этого сначала установите libx11-dev в свою систему, если вы работаете в Linux, или XQuartz для Mac.

При сборке dlib с работающим python setup.py install --yes DLIB_JPEG_SUPPORT - проверьте его сообщения. Если есть ошибки или предупреждения - исправьте их

person Evgeniy    schedule 28.09.2016
comment
Ты прав. Сообщение от python setup.py install --yes DLIB_JPEG_SUPPORT: CMake Error at /home/ekotsoni/dlib/dlib/cmake_utils/add_python_module:115 (message): Boost python library not found. Call Stack (most recent call first): CMakeLists.txt:6 (include) -- Configuring incomplete, errors occurred! See also "/home/ekotsoni/dlib/tools/python/build/CMakeFiles/CMakeOutput.log". error: cmake configuration failed! Что мне делать? - person ; 28.09.2016
comment
sudo apt-get установить libboost-python-dev - person Evgeniy; 29.09.2016

Я отвечаю на этот вопрос, потому что столкнулся с той же проблемой, выполнив

conda install -c conda-forge dlib

а также

pip install dlib

Я попытался найти и получил несколько полезных ссылок, и ниже одна ссылка спасла мой день. Так что перечисляйте детали здесь тоже ..

https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf

Свежий код будет лучше скомпилировать с Github, чем устанавливать из conda/pip. Это необходимо для того, чтобы dlib был скомпилирован с поддержкой графического интерфейса.

Установить зависимости

sudo apt-get update

Установить Boost

sudo apt-get install libboost-all-dev

Установите другие зависимости (возможно, большинство из них уже установлены в вашей системе)

apt-get install -y --fix-missing     build-essential     cmake     gfortran     git     wget     curl     graphicsmagick     libgraphicsmagick1-dev     libatlas-dev     libavcodec-dev     libavformat-dev     libboost-all-dev     libgtk2.0-dev     libjpeg-dev     liblapack-dev     libswscale-dev     pkg-config     python3-dev     python3-numpy     software-properties-common zip

apt-get clean

Соберите последний код dlib из Github. Предположения: - Ubuntu 16.04 или выше - у вас нет графического процессора nVidia, не установлены Cuda и cuDNN и не требуется ускорение графического процессора.

Клонируем код с гитхаба:

git clone https://github.com/davisking/dlib.git

Соберите основную библиотеку dlib:

cd dlib
    mkdir build; cd build; cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1; cmake --build .

Соберите и установите расширения Python:

cd ..
    python setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA

убедитесь, что вы указываете на правильный питон (если у вас установлена ​​анаконда поверх ванильного питона Ubuntu, вам следует установить пакет, указывающий на анаконду).

если вы все еще сталкиваетесь с ошибкой gcc, как показано ниже

lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found

затем убедитесь, что вы устанавливаете приведенный ниже пакет python

conda install libgcc

На этом этапе вы сможете запустить python и успешно ввести import dlib.

person Tinto James    schedule 27.07.2017