Не удается запустить Sift с opencv на MacO - PullRequest
1 голос
/ 04 мая 2020

Когда я пытаюсь запустить cv2.xfeatures2d.SIFT_create()

, я получаю это сообщение об ошибке:

error: OpenCV(4.2.0) /Users/travis/build/skvark/opencv-python/opencv_contrib/modules/xfeatures2d/src/sift.cpp:1210: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'create'

, говорящее об установке OPENCV_ENABLE_NONFREE, но я установил opencv с homebrew, у которого уже есть эта опция включен .

редактировать: я пытался с pip install opencv-contrib-python-nonfree, и я получаю эту ошибку

ERROR: Could not find a version that satisfies the requirement opencv-contrib-python-nonfree (from versions: none)
ERROR: No matching distribution found for opencv-contrib-python-nonfree

1 Ответ

3 голосов
/ 05 мая 2020

Мне удалось восстановить вашу ошибку, и я смог это исправить. Внимательно посмотрите на формулу Python для Homebrew, используемую при установке OpenCV: https://formulae.brew.sh/formula/opencv. На момент написания этой статьи он использовал python@3.8, что означает, что он использует Python 3.8 Homebrew вместо значения по умолчанию Python 3.7.7 (на момент написания этой статьи), которое будет находиться в /usr/local/bin/python3, если Вы использовали Homebrew для установки стандартной формулы для Python. Поскольку вы не смогли найти OpenCV после того, как установили его из Homebrew, вы попытались использовать pip для его установки. В формуле opencv-contrib-python не включены несвободные модули, а формула, которую вы использовали выше, чтобы попытаться получить несвободные модули, устарела.

Поэтому, когда вы используете Homebrew для установки OpenCV, вы Вы получаете вышеуказанную ошибку, потому что, даже если вы установили OpenCV с пакетами contrib и с оболочками Python через Homebrew, вы используете pip, предоставленный вашей системой, для установки OpenCV, но вы не используете то, что Homebrew установил для вас. В частности, вы не используете актуальную версию Python, установленную для использования с OpenCV.

В моей системе эту версию Python 3.8 можно найти здесь:

/usr/local/Cellar/python@3.8/3.8.2/bin

Я также должен был убедиться, что numpy был установлен до импорта OpenCV. Перейдите к указанному выше каталогу, затем выполните pip локально в этом каталоге:

$ cd /usr/local/Cellar/python@3.8/3.8.2/bin
$ ./pip install numpy

Как только вы закончите, запустите эту локальную версию python3, затем попробуйте импортировать OpenCV и модуль SIFT:

$ ./python3
Python 3.8.2 (default, Mar 11 2020, 00:29:50)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 0x10b045550>
>>>

Двигаясь вперед, вам придется использовать Python 3.8 от Homebrew, чтобы использовать несвободные модули для OpenCV, если вы решите использовать это из Homebrew. Если вы хотите go дальше и сделать так, чтобы ваша система использовала эту версию Python, а не Python 3.7, найденную в /usr/local/bin/python3, вам придется обновить файл .bashrc, расположенный у вас дома. каталога, так что вместо этой версии используется эта версия Python:

export PATH="/usr/local/Cellar/python@3.8/3.8.2/bin:$PATH"

Если вы предпочитаете использовать формулу pip для opencv-contrib-python и придерживаться версии Python в /usr/local/bin/python3, несвободные модули не сопровождаются этим, поэтому вам придется клонировать репо для этой работы и перестроить оболочку с этими включенными (источник: https://github.com/skvark/opencv-python/issues/126#issuecomment -596689259 ).

Небольшое замечание, что мне пришлось вручную указать, где на моем компьютере была установлена ​​Qt. При первоначальной настройке OpenCV не удалось найти Qt в моем пути к командной строке. Я сделал brew install qt первым. Вам нужно будет указать путь к этому в переменной окружения CMAKE_PREFIX_PATH. Наконец, при условии, что вы клонируете репо в каталог Downloads:

brew install qt
cd ~/Downloads
git clone --recursive https://github.com/skvark/opencv-python.git
cd opencv-python
export CMAKE_ARGS="-DOPENCV_ENABLE_NONFREE=ON -DENABLE_CONTRIB=1 -DOPENCV_EXTRA_MODULES_PATH=/Users/<User>/Downloads/opencv-python/opencv_contrib/modules/ -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt/5.14.2/"
python3 setup.py build
python3 setup.py install

5.14.2 выше - это версия Qt, которую я имею на моем компьютере. Обязательно измените его на любую версию, установленную на вашем компьютере. Также замените <User> именем пользователя вашей машины, под которым вы вошли. Вы можете найти это, выполнив cd ~ в Терминале, и посмотреть, какая последняя строка после разделителя каталогов, выполнив pwd.


Поскольку срок действия патента SIFT истек, надеюсь, что это будет удалено из несвободного пакета и будет частью основной библиотеки OpenCV!

...