Подтвердить что ты не робот

Не могу использовать SURF, SIFT в OpenCV

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

detector = cv2.SIFT()

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

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

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

cv2.__version__ is

$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 находится в dir(cv2) но если я также беру cv2.BFMatcher() я получаю ту же ошибку... Так что она отсутствует, и я должен добавить ее, но я не знаю как.

4b9b3361

Ответ 1

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

Шаги:

  • Загрузите opencv-2.4.6.1.tar.gz из opencv.org.
  • Извлеките источник:

    tar -xf opencv-2.4.6.1.tar.gz -C /tmp
    
  • Настройте источник. Это скажет 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
    
  • Сборка и установка:

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

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

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

Ответ 2

Существует источник подачи, который делает это очень простым.

  • Если у вас установлена ​​другая версия opencv-python, используйте эту команду, чтобы удалить ее, чтобы избежать конфликтов:

    pip uninstall opencv-python
    
  • Затем установите версию Contrib с помощью этого:

    pip install opencv-contrib-python
    
  • Использование SIFT:

    import cv2
    sift = cv2.xfeatures2d.SIFT_create()
    

Ответ 3

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

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

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

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

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

sift = cv2.xfeatures2d.SIFT_create()

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

Ответ 4

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

Ответ 5

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

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

Они были удалены из пакета из-за проблем с лицензией....

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

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

ok, вот он:

! это для 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/

ok, теперь у нас есть источник несвободных модулей, но этого недостаточно для 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 Image Processing Library) and, if available, can use IPP
 (Intel 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.*

ok, вот он, теперь создайте пакеты еще раз:

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()

получайте удовольствие!

Ответ 6

Как пользователь Anaconda, я хотел найти одну или две подходящие команды для решения проблемы. К счастью, этот ответ помог. Для conda 4.5.11 (используйте conda -V для проверки версии Anaconda) я выполнил следующие шаги:

# Python version does not matter, most likely, check yourself
conda create -n myenv python=3.6     
conda activate myenv
conda install -c menpo opencv

Это установит OpenCV 2.4.11. Anaconda другая команда conda install -c menpo opencv3 установит OpenCV3, но Python должен быть понижен до 2.7. Для установки OpenCV3 с Python3 используйте следующее (по первой ссылке):

conda create -n myenv python  
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

Проверьте SIFT:

conda activate myenv
python
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>

Ответ 7

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

make opencv_nonfree
sudo make install

Ответ 8

выполните этот шаг установки

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.

Ответ 9

  1. Установить OpenCV-Contrib

  2. import cv2 sift = cv2.xfeatures2d.SIFT_create()

  3. sift.something()

Это простой способ установить Contrib.

Ответ 10

IN opencv3.x SIFT() & SURF() больше не существует. Для этого

удалить все версии opencv

python -m pip uninstall opencv-python

python -m pip uninstall opencv-contrib-python

после этого установите opencv-contrib, чтобы включить sift() и surf(), используя приведенную ниже команду с python (3.x)

python -m pip install opencv-contrib-python==3.4.2.16

тогда вы можете использовать

sift = cv2.xfeatures2d.SIFT_create()

Ответ 11

Просто измените версию opencv на 3.4.2.16. Так как она запатентована, она недоступна в более новой версии.

Ответ 12

Подход, предлагаемый 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

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

Ответ 13

Ни одно из предложенных выше решений не помогло мне. Я использую Anaconda и обнаружил, что в opencv версии 3.3.1 Sift все еще включен. Если вы хотите провести тестирование в изолированной среде conda, попробуйте следующее, вдохновленное ответом @A. Ametov выше

conda create -n testenv opencv=3.3.1     
conda activate testenv

conda activate myenv
python
#Check version of opencv being used
>>> import cv2
>>> cv2.__version__
#Check if Sift is available
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>

Ответ 14

Изменить это:

sift = cv2.xfeatures2d.SIFT_create()

Этим:

cv2.ORB_create()

Ответ 15

просто измените SHIFT на ORB, Я думаю, что это происходит из-за неактуальной версии, ORB - эффективная и лучшая альтернатива SHIFT или SURF.

Поскольку я также сталкиваюсь с той же проблемой, когда я был использован cv2.SHIFT()

ОШИБКА: AttributeError: у объекта 'module' нет атрибута 'SIFT'

Теперь это полностью работает для меня, пожалуйста, попробуйте это:

ORB = cv2.ORB()

Ответ 16

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