Не могу использовать 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()
я получаю ту же ошибку... Так что она отсутствует, и я должен добавить ее, но я не знаю как.
Ответы
Ответ 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
-
Установить OpenCV-Contrib
-
import cv2 sift = cv2.xfeatures2d.SIFT_create()
-
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 снова работает.