[PYTHON] Exécutez OpenVino sur macOS Catalina

Qu'est-ce que c'est

Après un long moment, j'ai voulu lancer la démo OpenVino sur osx, mais cela n'a pas fonctionné. Je pensais l'utiliser dans une conférence, mais j'étais en difficulté, alors j'ai réussi à faire un mémorandum sur le sujet.

environnement

macOS Catalina(10.15.4) OpenVino(2020.2.117) Python 3.7.5 cmake 3.17.1

Installation

D'ici, récupérez dmg et installez-le. Le répertoire d'installation est / opt / intel. Exécutez ensuite le didacticiel de vérification des opérations (https://docs.openvinotoolkit.org/2020.2/_docs_install_guides_installing_openvino_macos.html#set-the-environment-variables). Quiconque a eu des problèmes jusqu'à présent.

Lancer la démo de python

Une copie complète de la démo de python.

$ cp -r /opt/intel/openvino/deployment_tools/open_model_zoo/demos/python_demos .

Commençons la démo face_recoginition.

$ cd python_demos/face_recognition_demo/
$ python3 ./face_recognition_demo.py -h
Traceback (most recent call last):
  File "./face_recognition_demo.py", line 24, in <module>
    import cv2
ImportError: dlopen(/opt/intel/openvino_2020.2.117/python/python3/cv2.so, 2): Library not loaded: @rpath/libopencv_ml.4.3.dylib
  Referenced from: /opt/intel/openvino_2020.2.117/python/python3/cv2.so
  Reason: image not found

Atmosphère qu'une autre bibliothèque liée ne peut pas être lue à partir d'opencv made by Intel. Voyons ce qui se passe.

$ otool -L /opt/intel/openvino_2020.2.117/python/python3/cv2.so
/opt/intel/openvino_2020.2.117/python/python3/cv2.so:
	@rpath/libopencv_ml.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_photo.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_dnn.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_highgui.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_objdetect.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_stitching.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_video.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_videoio.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_imgcodecs.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_calib3d.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_features2d.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_flann.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_imgproc.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	@rpath/libopencv_core.4.3.dylib (compatibility version 4.3.0, current version 4.3.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)

Hé, j'ai beaucoup de liens, mais le problème semble être que l'on ne m'a pas dit quel est le chemin. Vérifions les paramètres de la variable d'environnement.

/opt/intel/openvino/opencv/setupvars.sh


export OpenCV_DIR=$INSTALLDIR/opencv/cmake
export LD_LIBRARY_PATH=$INSTALLDIR/opencv/lib:$LD_LIBRARY_PATH

Hmmm, qu'est-ce que cela signifie que vous ne pouvez pas l'utiliser même s'il semble être configuré? À la suite de l'enquête, il semble que LD_LIBRARY_PATH ne peut pas être utilisé à moins que le système ne soit perturbé après El Capitan pour améliorer la sécurité. La chose la plus simple à faire est de mettre tout ce qui semble pertinent dans / usr / local / lib, mais je ne veux pas le faire car la désinstallation peut être compliquée. Vous pouvez compiler à partir des sources, mais je ne veux pas non plus le faire car la compilation d'un programme de la classe opencv semble prendre beaucoup de temps. Je ne peux pas penser à un bon moyen, alors définissons le rpath directement dans le binaire comme premiers secours.

$ sudo install_name_tool -add_rpath '/opt/intel/openvino/opencv/lib' /opt/intel/openvino_2020.2.117/python/python3/cv2.so
Password:
$ sudo install_name_tool -add_rpath '/opt/intel/openvino/inference_engine/lib/intel64' /opt/intel/openvino_2020.2.117/python/python3/cv2.so
$ sudo install_name_tool -add_rpath '/opt/intel/openvino/deployment_tools/ngraph/lib' /opt/intel/openvino_2020.2.117/python/python3/cv2.so
$ sudo install_name_tool -add_rpath '/opt/intel/openvino/inference_engine/external/tbb/lib' /opt/intel/openvino/deployment_tools/inference_engine/lib/intel64/libinference_engine_legacy.dylib 
$ sudo install_name_tool -add_rpath '/opt/intel/openvino/inference_engine/lib/intel64' /opt/intel/openvino/deployment_tools/inference_engine/lib/intel64/libMKLDNNPlugin.dylib
$ sudo install_name_tool -add_rpath '/opt/intel/openvino/inference_engine/lib/intel64' /opt/intel/openvino/python/python3.7/openvino/inference_engine/ie_api.so
$ sudo install_name_tool -add_rpath '/opt/intel/openvino/inference_engine/external/tbb/lib' /opt/intel/openvino/python/python3.7/openvino/inference_engine/ie_api.so
$ sudo install_name_tool -add_rpath '/opt/intel/openvino/deployment_tools/ngraph/lib' /opt/intel/openvino/deployment_tools/inference_engine/lib/intel64/libinference_engine.dylib
$ sudo install_name_tool -add_rpath '/opt/intel/openvino/deployment_tools/ngraph/lib' /opt/intel/openvino/deployment_tools/inference_engine/lib/intel64/libinference_engine_legacy.dylib

Il y en a d'autres, mais pour l'instant je vais le laisser à ce niveau. Si quelque chose se reproduit, il doit être résolu de la même manière. Téléchargez maintenant le modèle et exécutez-le à nouveau.

$ /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/downloader.py --name face-detection-retail-0004 
$ /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/downloader.py --name landmarks-regression-retail-0009
$ /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/downloader.py --name face-reidentification-retail-0095
$ python3 face_recognition_demo.py \
-m_fd ./intel/face-detection-retail-0004/FP16/face-detection-retail-0004.xml \
-m_lm ./intel/landmarks-regression-retail-0009/FP16/landmarks-regression-retail-0009.xml \
-m_reid ./intel/face-reidentification-retail-0095/FP16/face-reidentification-retail-0095.xml \
--verbose -fg ./test

On dit que c'est désordonné, mais ça marche pour le moment. Et certaines démos ne fonctionnent pas (mais je pense que c'est un autre problème).

Compilez la démo C ++

Si vous avez exécuté la démo security_barrier du rituel de transit pendant l'installation, vous devriez avoir un répertoire inference_engine_demos_build dans votre répertoire personnel. Cela équivaut à / opt / intel / openvino / deployment_tools / open_model_zoo / demos /.

Quand je lis le README, certaines démos Python disent que les modules d'extension Python natifs sont nécessaires, donc j'active les modules Python et je les fais.

$ cd ~/inference_engine_demos_build
$ rm CMakeCache.txt
$ cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_PYTHON=ON /opt/intel/openvino/deployment_tools/inference_engine/demos
...... Omis ...
$ make -j2
...... Omis ...
/opt/intel/openvino/deployment_tools/open_model_zoo/demos/multi_channel/common/input.cpp:292:11: error: 
      'getAvgReadTime' overrides a member function but is not marked 'override'
      [-Werror,-Winconsistent-missing-override]
    float getAvgReadTime() const {
          ^
/opt/intel/openvino/deployment_tools/open_model_zoo/demos/multi_channel/common/input.cpp:43:19: note: overridden
      virtual function is here
    virtual float getAvgReadTime() const = 0;
                  ^
3 errors generated.
make[2]: *** [multi_channel/common/CMakeFiles/common.dir/input.cpp.o] Error 1
make[1]: *** [multi_channel/common/CMakeFiles/common.dir/all] Error 2
make: *** [all] Error 2
...... Omis ...

Oh? !! Jésus, j'ai quelques petits mots. Dans un tel cas, la puissance de passage est importante. Si cela ne fonctionne pas, pensez-y à nouveau. Définissons le drapeau Nembutsu sur l'oreille du cheval dans CMakeCache.txt.

CMakeCache.txt


...... Omis ...
//Flags used by the CXX compiler during all build types.
CMAKE_CXX_FLAGS:STRING=-Wno-inconsistent-missing-override
...... Omis ...

Maintenant, exécutez à nouveau make. Ok. Je me fiche des détails. Le binaire est construit sous intel64 / Release. La version C ++ de la démo fonctionne maintenant, vous pouvez donc jouer telle quelle.

Épilogue

J'avais l'habitude de bouger en douceur, mais j'avais beaucoup de mal. OpenVino est un PC qui n'a pas le GPU de nvidia, et je veux mettre en œuvre quelque chose comme une démo en utilisant DNN rapidement! Je pense que c'est assez pratique lorsque vous souhaitez laisser les étudiants qui utilisent principalement des macbooks découvrir l'endroit où ils se déplacent rapidement, mais il n'y a pas beaucoup d'informations sur macOS ... ・. Je me demande s'il n'y a pas beaucoup de gens qui l'utilisent. J'ai remarqué quand j'écrivais la phrase, mais mac ne prend pas en charge les graphiques HD intégrés! Le mérite spécial est ... J'espère que vous répondrez dans les plus brefs délais.

De plus, comme le rpath de toutes les bibliothèques ne passe pas, vous pouvez rencontrer le même problème à l'avenir, mais vous pouvez passer par la méthode ci-dessus. J'aimerais vraiment pouvoir utiliser des variables d'environnement, mais je ne suis pas sûr de macOS récent. Une personne formidable à enseigner.

mise à jour

2020.5.19 Confirmé avec macOS 10.15.4. Les programmes C ++ ne fonctionneront que si rpath est défini, changez donc l'ordre et l'exécution de python. Ajout des paramètres rpath manquants.

Recommended Posts

Exécutez OpenVino sur macOS Catalina
Exécutez OpenVino sur macOS et environnement pyenv et pipenv
Installez Python inférieur à 3.5.3 sur macOS Catalina
Si Fabric devient inutilisable sur macOS Catalina
Exécutez l'installation de pip sur MacOS Python 3.7 ou version ultérieure
Installez Python 3 sur MacOS Catalina (avec Homebrew uniquement)
Installer Python et les bibliothèques pour Python sur MacOS Catalina
Exécutez Django sur PythonAnywhere
Exécutez mysqlclient sur Lambda
Exécutez OpenMVG sur Mac
Un mémo pour créer un environnement de développement python avec macOS Catalina
Exécutez Jupyter sur Ubuntu sous Windows
Exécutez Openpose sur Python (Windows)
Utilisez Python 3 introduit par l'outil de ligne de commande sur macOS Catalina
Installez OpenPose sur mac (Catalina)
Exécutez le CGI de Python sur CORESERVER
Exécutez la commande unix sur python
Exécutez IPython Notebook sur Docker
Catalina sur Mac et pyenv
Exécutez YOLO v3 sur AWS v2
Exécutez Jupyter Notebook sous Windows
Exécutez YOLO v3 sur AWS
Exécutez MuJoCo sur WSL (2) (également GUI)
Installez et exécutez Dropbox sur Ubuntu 20.04
Préparation à l'exécution de Flask sur EC2
Premiers pas avec MicroPython (sur macOS)
Exécutez Tensorflow avec la prise en charge native de Windows
Comment installer Graph-Tool sur macOS
Exécutez un serveur Linux avec GCP
Exécutez Python selon la planification sur AWS Lambda
Comment exécuter matplotlib sur heroku
Exécutez SwitchBot avec Bleak sur Windows 10
Exécutez Matplotlib sur un conteneur Docker
Construction de l'environnement de développement Python sur macOS
Exécutez headless-chrome sur une image basée sur Debian
Exécutez XGBoost sur Bash sur Ubuntu sous Windows
Exécutez TensorFlow2 sur le serveur VPS
Exécutez le client VMware Horizon sur Debian
[Note] Exécutez Django sur Amazon Linux 2
Exécutez Keras sur Google Colaboratory TPU
Exécutez Yocto sur Ubuntu en utilisant QEMU.
[Python] Rendre pip disponible sur macOS
Installez Java2Python sur macOS High Sierra (10.13)
Exécutez Sesame sur le PaSoRi de Sony (RCS370)
Exécutez régulièrement Python sur Heroku Scheduler
Exécutez cron sur Amazon Linux (défini sur Linux)