OpenCV Python не может использовать SURF, SIFT

Я пытаюсь простую вещь, как

detector = cv2.SIFT() 

и получить эту плохую ошибку

 detector = cv2.SIFT() AttributeError: 'module' object has no attribute 'SIFT' 

Я не понимаю, потому что cv2 установлен.

CV2. версия

 $Rev: 4557 $ 

моя система – Ubuntu 12.04

возможно, у кого-то такая же проблема и может мне помочь

большое спасибо

РЕДАКТИРОВАТЬ*:

длинный рассказ короткий testypypypy.py

 import cv2 detector = cv2.SIFT() 

ОШИБКА

 Traceback (most recent call last): File "testypypy.py", line 3, in <module> detector = cv2.SIFT() AttributeError: 'module' object has no attribute 'SIFT 

если я беру «SURF», это работает, потому что SURF находится в каталоге (cv2), но если я также беру cv2.BFMatcher (), я получаю ту же ошибку … поэтому он отсутствует, и я должен добавить его, но я не знаю, как

  • OpenCV Python: иногда возникает ошибка сегментации при использовании FlannBasedMatcher
  • Проблема: Сумка функций Обучение SIFT или SURF для обнаружения автомобиля в видео с OpenCV + Python
  • OpenCV Объединение SURF с нейронной сетью
  • Есть ли у кого-нибудь примеры использования OpenCV с python для извлечения дескриптора?
  • Соответствие BFMatcher в ошибке запуска OpenCV
  • Opencv 3.0 - объект модуля не имеет атрибута 'xfeatures2d'
  • 8 Solutions collect form web for “OpenCV Python не может использовать SURF, SIFT”

    Я думаю, что это далеко не «правильный» способ сделать это («правильный» способ Ubuntu, похоже, придерживаться сломанного и / или устаревшего OpenCV), но для меня сборка opencv-2.4.6.1 из источника возвращает cv2.SIFT и cv2.SURF.

    шаги:

    1. Скачайте opencv-2.4.6.1.tar.gz с сайта opencv.org .
    2. Извлеките источник:

       tar -xf opencv-2.4.6.1.tar.gz -C /tmp 
    3. Настройте источник. Это скажет OpenCV для установки в .opencv-2.4.6.1 в вашем домашнем каталоге:

       cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D BUILD_PYTHON_SUPPORT=ON \ -D WITH_XINE=ON \ -D WITH_OPENGL=ON \ -D WITH_TBB=ON \ -D BUILD_EXAMPLES=ON \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D WITH_V4L=ON \ -D CMAKE_INSTALL_PREFIX=~/.opencv-2.4.6.1 \ /tmp/opencv-2.4.6.1 
    4. Построить и установить:

       cd /tmp/opencv-2.4.6.1 make -j4 make install 
    5. Установите PYTHONPATH (это работает в bash, я не имею понятия о других оболочках):

       export PYTHONPATH=~/.opencv-2.4.6.1/lib/python2.7/dist-packages 

    Теперь, если я запускаю python и импортирую cv2 (для меня это приводит к предупреждению gnome-keyring), у меня есть cv2.SIFT и cv2.SURF.

    FYI, начиная с 3.0.0 SIFT и друзей находятся в репозитории contrib, расположенном по адресу https://github.com/Itseez/opencv_contrib и по умолчанию не включаются в opencv.

    Для получения последней информации по этому вопросу (по состоянию на сентябрь 2015 г.) ознакомьтесь с этой страницей .

    Большая часть информации по этому вопросу устарела.

    Что пирамидный поиск говорит о том, что SURF / SIFT были перемещены в opencv_contrib из-за проблем с патентами.

    Для установки есть также хорошая страница, которая рассказывает вам, как установить opencv с opencv_contrib и поддержкой Python, чтобы вы получили SURF / SIFT.

    Обратите внимание, что API также изменился. Теперь это так:

     sift = cv2.xfeatures2d.SIFT_create() 

    До того, как я нашел вышеупомянутые страницы, я также сильно пострадал. Но перечисленные страницы очень помогают в установке и объясняют, что не так.

    для пользователей debian «легко» создать свой собственный пакет libopencv-nonfree.

    Я следовал за opencv-учебником для python, но в моем debian отсутствовали модули SIFT и SURF. И нет несвободного пакета для debian, включая SIFT и SURF и т. Д.

    Из-за лицензионных вопросов они были освобождены из пакета ….

    Я никогда раньше не создавал пакет для debian (добавляя новый модуль и т. д.), но я следил за небольшими шагами в обучающих программах debian и немного разбирался и догадывался, и через 1 день воила … я работал с libopencv-nonfree2. 4 deb и модуль python с правильными привязками.

    (я не знаю, нужно ли мне также установить недавно созданный пакет python-opencv или только незащищенный … я заново установил и получил рабочую библиотеку opencv python со всеми необходимыми незанятыми модулями!)

    ОК, вот оно:

    это для libopencv 2.4!

    ! вы можете делать все шаги, кроме установки как обычного пользователя!

    нам нужны встроенные средства и некоторые инструменты из репозитория debian для компиляции и создания нового пакета:

     sudo apt-get install build-essential fakeroot devscripts 

    создайте каталог в своем доме и перейдите в этот каталог:

     cd ~ && mkdir opencv-debian cd opencv-debian 

    загрузите необходимые пакеты:

     apt-get source libopencv-core2.4 

    и загружать все необходимые пакеты зависимостей для создания нового opencv

     apt-get build-dep libopencv-core2.4 

    это загрузит исходные источники и создаст каталог под названием «opencv-2.4.9.1 + dfsg»,

    перейдите в этот каталог:

     cd opencv-2.4.9.1+dfsg 

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

     fakeroot debian/rules binary 

    это займет много времени! этот шаг должен завершиться без ошибок, теперь у вас есть много пакетов .deb в каталоге opencv-debian

    теперь мы вносим некоторые изменения в определение пакета, чтобы debian выпустил несвободные модули и пакет!

    перейдите в каталог opencv-debian и загрузите правильный источник opencv .. в моем случае opencv 2.4.9 или около того

    Я получил мой от https://github.com/Itseez/opencv/releases

     wget https://codeload.github.com/Itseez/opencv/tar.gz/2.4.9 

    это будет скачать opencv-2.4.9.tar.gz

    извлечение архива:

     tar -xzvf opencv-2.4.9.tar.gz 

    это распакует исходный исходный код в каталог с именем opencv-2.4.9

    теперь скопируйте несвободные модули из исходного источника в источник debian:

     cp -rv opencv-2.4.9/modules/nonfree opencv-2.4.9.1+dfsg/modules/ 

    нормально, теперь у нас есть источник несвободных модулей, но этого недостаточно для debian … нам нужно изменить 1 файл и создать новый

    мы должны отредактировать файл управления debian и добавить новый раздел в конец файла: (я использую mcedit в качестве редактора здесь)

     mcedit opencv-2.4.9.1+dfsg/debian/control 

    или использовать любой другой редактор по вашему выбору

    и добавьте этот раздел:

     Package: libopencv-nonfree2.4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: OpenCV Nonfree Modules like SIFT and SURF This package contains nonfree modules for the OpenCV (Open Computer Vision) library. . The Open Computer Vision Library is a collection of algorithms and sample code for various computer vision problems. The library is compatible with IPL (Intel's Image Processing Library) and, if available, can use IPP (Intel's Integrated Performance Primitives) for better performance. . OpenCV provides low level portable data types and operators, and a set of high level functionalities for video acquisition, image processing and analysis, structural analysis, motion analysis and object tracking, object recognition, camera calibration and 3D reconstruction. 

    теперь мы создаем новый файл под названием libopencv-nonfree2.4.install

     touch opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install 

    и изменить:

     mcedit opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install 

    и добавьте следующий контент:

     usr/lib/*/libopencv_nonfree.so.* 

    ОК, вот и все, теперь создайте пакеты еще раз:

     cd opencv-2.4.9.1+dfsg 

    сначала очистить:

     fakeroot debian/rules clean 

    и построить:

     fakeroot debian/rules binary 

    et voila … через некоторое время у вас есть свежий встроенный и новый пакет libopencv-nonfree2.4.deb!

    теперь установите как root:

     dpkg -i libopencv-nonfree2.4.deb dpkg -i python-opencv.deb 

    и испытание!

     import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('test.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) sift = cv2.SIFT() kp = sift.detect(gray,None) img=cv2.drawKeypoints(gray,kp) corners = cv2.goodFeaturesToTrack(gray,16,0.05,10) corners = np.int0(corners) for i in corners: x,y = i.ravel() cv2.circle(img,(x,y),90,255,3) plt.imshow(img),plt.show() 

    повеселись!

    поскольку я уже скомпилировал opencv, когда обнаружил эту проблему, все, что мне нужно было сделать (из моего каталога сборки opencv):

     make opencv_nonfree sudo make install 

    подпарите этот шаг установки

    http://jayrambhia.com/blog/install-opencv-2-4-in-ubuntu-12-04-precise-pangolin/

     cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON .. 

    с помощью этой команды будет установлена ​​библиотека для вашего / usr / local / lib.

    Подход, предложенный vizzy, также работает с OpenCV 2.4.8, как при создании несвободного пакета под Ubuntu 14.04 LTS.

    Эта проблема зависимости может помешать установке бесплатного пакета:

      libopencv-nonfree2.4 depends on libopencv-ocl2.4; however: Package libopencv-ocl2.4 is not installed. 

    Легко фиксируется, поскольку отсутствующий пакет может быть установлен из только что построенных:

     dpkg -i libopencv-ocl2.4_2.4.8+dfsg1-2ubuntu1_amd64.deb 

    После этого установка продолжается, как объясняется в ответе виззи.

    Эта проблема связана с установкой python-tesseract. У меня тоже была эта ошибка. Перед установкой python-tesseract мой opencv (cv2) работал отлично. После установки python-tesseract cv2 не работал и вывел $ Rev: 4557 $ в качестве версии. После uninsatlling python-tesseract opencv работает снова.

    Interesting Posts

    Научные вычисления и ноутбук Ipython: как организовать код?

    Использование SQLite в программе Python

    Выражение генератора должно быть заключено в скобки, если не единственным аргументом

    Разбить таблицу HTML на список Python?

    Создание PDF с (измененными размерами) изображениями PNG с использованием Pycairo – масштабирование

    Почему open () предпочтительнее над файлом () в Python?

    каковы накладные расходы на передачу функций обратного вызова python для подпрограмм Fortran?

    A + B без арифметических операторов, Python vs C ++

    PLEON IDLE зависает

    Django Admin: отношение OneToOne как встроенный?

    Matplotlib: Написание текста справа налево (иврит, арабский и т. Д.)

    Pythonic способ проверить, есть ли у двух словарей одинаковый набор ключей?

    Печать текста через принтер с помощью PyQt4

    Есть ли какие-нибудь «полезные программы» для инструментальных средств GUI для Python?

    не удалось предоставить пароль для процесса с подпроцессом

    Python - лучший язык программирования в мире.