ошибки gyp при попытке установить узел opencv на проблемы с mac mavericks

Я пытаюсь установить node opencv, я запускаю Mavericks на Mac. я запускаю «npm install opencv» и много чего пробовал, чтобы решить эту проблему, но не могу понять. вот мои ошибки: есть также куча предупреждений, но это ошибки до сбоя:

подобные ошибки возникают, когда я запускаю настройку узла-gyp или перестройку узла-gyp. Я пытался получить помощь здесь: https://github.com/joyent/node/issues/3113 но это не помогло, я все еще получаю ошибки gyp

при запуске npm install opencv: вот весь вывод

npm WARN package.json [email protected] No repository field.
npm http GET https://registry.npmjs.org/opencv
npm http 304 https://registry.npmjs.org/opencv

> [email protected] preinstall /Users/gabriellalevine/ardrone-webflight/node_modules/opencv
> node-gyp clean rebuild

  CXX(target) Release/obj.target/opencv/src/init.o
  CXX(target) Release/obj.target/opencv/src/Matrix.o
../src/Matrix.cc:110:13: warning: variable 'mat' is used uninitialized whenever
      'if' condition is false [-Wsometimes-uninitialized]
        } else if (args.Length() == 5) {
                   ^~~~~~~~~~~~~~~~~~
../src/Matrix.cc:119:2: note: uninitialized use occurs here
        mat->Wrap(args.Holder());
        ^~~
../src/Matrix.cc:110:9: note: remove the 'if' if its condition is always true
        } else if (args.Length() == 5) {
               ^~~~~~~~~~~~~~~~~~~~~~~~
../src/Matrix.cc:104:13: note: initialize the variable 'mat' to silence this
      warning
        Matrix *mat;
                   ^
                    = nullptr
1 warning generated.
  CXX(target) Release/obj.target/opencv/src/OpenCV.o
  CXX(target) Release/obj.target/opencv/src/CascadeClassifierWrap.o
  CXX(target) Release/obj.target/opencv/src/Contours.o
  CXX(target) Release/obj.target/opencv/src/Point.o
  CXX(target) Release/obj.target/opencv/src/VideoCaptureWrap.o
  CXX(target) Release/obj.target/opencv/src/CamShift.o
  CXX(target) Release/obj.target/opencv/src/HighGUI.o
../src/HighGUI.cc:38:13: warning: variable 'win' is used uninitialized whenever
      'if' condition is false [-Wsometimes-uninitialized]
        } else if (args.Length() == 2){
                   ^~~~~~~~~~~~~~~~~~
../src/HighGUI.cc:42:2: note: uninitialized use occurs here
        win->Wrap(args.Holder());
        ^~~
../src/HighGUI.cc:38:9: note: remove the 'if' if its condition is always true
        } else if (args.Length() == 2){
               ^~~~~~~~~~~~~~~~~~~~~~~
../src/HighGUI.cc:35:19: note: initialize the variable 'win' to silence this
      warning
  NamedWindow* win;
                  ^
                   = nullptr
1 warning generated.
  CXX(target) Release/obj.target/opencv/src/FaceRecognizer.o
../src/FaceRecognizer.cc:64:76: error: too many arguments to function call,
      expected at most 4, have 5
  ...f = cv::createLBPHFaceRecognizer(1, 8, 8, 8, 80.0);
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~             ^~~~
/usr/local/Cellar/opencv/2.4.0/include/opencv2/contrib/contrib.hpp:951:16: note: 
      'createLBPHFaceRecognizer' declared here
    CV_EXPORTS Ptr<FaceRecognizer> createLBPHFaceRecognizer(int radius=1...
               ^
../src/FaceRecognizer.cc:90:42: error: too many arguments to function call,
      expected at most 4, have 5
      radius, neighbors, grid_x, grid_y, threshold
                                         ^~~~~~~~~
/usr/local/Cellar/opencv/2.4.0/include/opencv2/contrib/contrib.hpp:951:16: note: 
      'createLBPHFaceRecognizer' declared here
    CV_EXPORTS Ptr<FaceRecognizer> createLBPHFaceRecognizer(int radius=1...
               ^
../src/FaceRecognizer.cc:111:19: error: too many arguments to function call,
      expected at most single argument 'num_components', have 2 arguments
      components, threshold
                  ^~~~~~~~~
/usr/local/Cellar/opencv/2.4.0/include/opencv2/contrib/contrib.hpp:949:16: note: 
      'createEigenFaceRecognizer' declared here
    CV_EXPORTS Ptr<FaceRecognizer> createEigenFaceRecognizer(int num_com...
               ^
../src/FaceRecognizer.cc:132:19: error: too many arguments to function call,
      expected at most single argument 'num_components', have 2 arguments
      components, threshold
                  ^~~~~~~~~
/usr/local/Cellar/opencv/2.4.0/include/opencv2/contrib/contrib.hpp:950:16: note: 
      'createFisherFaceRecognizer' declared here
    CV_EXPORTS Ptr<FaceRecognizer> createFisherFaceRecognizer(int num_co...
               ^
../src/FaceRecognizer.cc:218:14: error: no member named 'update' in
      'cv::FaceRecognizer'
  self->rec->update(images, labels);
  ~~~~~~~~~  ^
../src/FaceRecognizer.cc:234:26: error: too many arguments to function call,
      expected single argument 'src', have 3 arguments
  self->rec->predict(im, predictedLabel, confidence);
  ~~~~~~~~~~~~~~~~~~     ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/Cellar/opencv/2.4.0/include/opencv2/contrib/contrib.hpp:931:9: note: 
      'predict' declared here
        virtual int predict(InputArray src) const = 0;
        ^
../src/FaceRecognizer.cc:273:26: error: no member named 'getMat' in
      'cv::FaceRecognizer'
  cv::Mat m = self->rec->getMat(key);
              ~~~~~~~~~  ^
7 errors generated.
make: *** [Release/obj.target/opencv/src/FaceRecognizer.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:789:12)
gyp ERR! System Darwin 13.0.0
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "clean" "rebuild"
gyp ERR! cwd /Users/gabriellalevine/ardrone-webflight/node_modules/opencv
gyp ERR! node -v v0.10.20
gyp ERR! node-gyp -v v0.10.10
gyp ERR! not ok 
npm ERR! weird error 1
npm ERR! not ok code 0

person gabriella    schedule 03.01.2014    source источник
comment
Это весь вывод или есть что-то еще, что говорит об этих 7 ошибках?   -  person loganfsmyth    schedule 04.01.2014
comment
Я вставил весь вывод выше ... спасибо   -  person gabriella    schedule 04.01.2014
comment
Ваша проблема была решена? У меня похожая проблема (хотя я получаю только предупреждения вместо ошибок при установке node-opencv). Я пытался установить старые версии opencv, но это не помогло, потому что они не справляются с процессом сборки.   -  person Gregir    schedule 06.05.2014


Ответы (2)


Ваши ошибки примерно такие:

../src/FaceRecognizer.cc:64:76: error: too many arguments to function call,
      expected at most 4, have 5
  ...f = cv::createLBPHFaceRecognizer(1, 8, 8, 8, 80.0);

Таким образом, версия OpenCV, с которой вы компилируете, отличается от той, с которой работает модуль node.

Пятый аргумент createLBPHFaceRecognizer был добавлен в этот коммит opencv, так что, похоже, вам понадобится по крайней мере OpenCV v2.4.3, тогда как в ваших ошибках упоминается v2.4.0.

Вы должны убедиться, что ваша установка brew полностью обновлена, запустив brew update, а затем brew upgrade opencv, чтобы получить самый последний OpenCV из доморощенного, который выглядит как v2.4.7.1.

person loganfsmyth    schedule 03.01.2014
comment
Действительно? О чем все эти gyp Err? Хорошо, я попробую с более старой версией OpenCV - person gabriella; 04.01.2014
comment
@gabriella Ошибки gyp говорят Error: 'make' failed with exit code: 2. make — это один из инструментов, который Node использует для компиляции модулей из исходного кода C++, поэтому он не работает из-за ошибок компиляции C++. - person loganfsmyth; 04.01.2014
comment
хорошо, спасибо - сейчас я устанавливаю opencv 2.3.1. с веб-сайта, могу ли я получить две версии opencv, о которых вы знаете? - person gabriella; 04.01.2014
comment
вернее, вы знаете, как я могу установить 2.3.1, хотя у меня сейчас 2.4 - person gabriella; 04.01.2014
comment
Я не уверен, что лучший способ, честно говоря. - person loganfsmyth; 04.01.2014
comment
2.3.1 не имеет распознавания лиц - person berak; 04.01.2014
comment
хорошо, тогда я запутался, потому что этот парень использует распознавание лиц node + opencv+: github.com/paulhayes/copterface - поэтому я собираюсь спросить его, но я предполагаю, что он использует opencv 2.4. так что я все еще озадачен, почему я не могу установить opencv с помощью npm install opencv, действительно ли эта ошибка означает, что мне нужно перейти на opencv 2.3.1 или это может быть что-то еще? - person gabriella; 04.01.2014
comment
@berak Вы совершенно правы, извините, я никогда не использовал OpenCV. Я только что закончил README модуля Node, в котором говорилось v2.3.1. Я обновил свой ответ дополнительными шагами. - person loganfsmyth; 04.01.2014
comment
Ладно, разобрался еще больше. Это ошибка в модуле Node. Он имеет проверку на добавление распознавания лиц, когда › 2.4, но использует функции, доступные только › 2.4.3, поэтому он не работает, если вы используете 2.4.0, 2.4.1 или 2.4.2. Сообщил об ошибке: github.com/peterbraden/node-opencv/issues/96 - person loganfsmyth; 04.01.2014

Хм, в моем случае было не так, но можно попробовать следующее. Вот как я исправил OpenCV и npm opencv в Mac OS X:

  1. установить доморощенный ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  2. установить opencv brew install homebrew/science/opencv

  3. установить pkg-config: brew install pkg-config

  4. Найдите расположение файла с именем opencv.pc, запустив mdfind -name opencv.pc

  5. Запустите nano .bash_profile и добавьте путь, найденный на шаге 4, в переменные среды Bash. Сохранить файл. Закройте и перезапустите Терминал.

Пример с моего Mac:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/Cellar/opencv/2.4.12_2/lib/pkgconfig
export PKG_CONFIG_PATH

Вы можете проверить, настроено ли это, запустив env | grep PKG_CONFIG_PATH в своем терминале.

person Erik Ušaj    schedule 22.05.2016