[PYTHON] Créer un environnement OpenCV4 sur Raspberry Pi à l'aide de Poetry

introduction

Environnement OpenCV4 sur Raspberry Pi 4 (OS: Raspbian Lite) utilisant Poetry, un outil de gestion des dépendances Python. Quand je l'ai construit, j'avais personnellement quelques points addictifs, alors je vais le laisser ici comme mémo.

Si vous avez des erreurs ou des améliorations, veuillez nous en informer.

On suppose que Poetry est déjà installé. Pour plus d'informations sur l'installation et l'utilisation de Poetry, veuillez consulter cet article.

environnement

L'environnement côté Raspberry Pi est le suivant.

Modèle Raspberry Pi 4 Model B 4GB
OS Raspbian Buster Lite
Poetry version 1.0.5
Python 3.7.3
X Server X.Org X Server 1.20.4
Commande et résultat de l'exécution lors de la vérification des informations de version
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
$ sudo cat /etc/debian_version
10.3
$ poetry --version
Poetry version 1.0.5
$ python3.7 -V
Python 3.7.3
$ Xorg -version

X.Org X Server 1.20.4
X Protocol Version 11, Revision 0
Build Operating System: Linux 4.15.0-48-generic armv8l Raspbian
Current Operating System: Linux pi4b-02 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l
Kernel command line: coherent_pool=1M 8250.nr_uarts=0 cma=64M cma=256M  smsc95xx.macaddr=DC:A6:32:70:FB:B0 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  console=ttyS0,115200 console=tty1 root=PARTUUID=6c586e13-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Build Date: 05 June 2019  12:49:54PM
xorg-server 2:1.20.4-1+rpt1 (https://www.debian.org/support)
Current version of pixman: 0.36.0
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.

De plus, «transfert X» est utilisé lors de l'affichage de l'image en tant que contrôle d'opération. L'environnement côté client utilisé lors de la vérification de l'opération est le suivant.

OS Windows 10 Professionnel (version: 1903)
Client SSH WSL 1(Ubuntu 18.04)
VcXsrv X Server Version 1.20.6.0(12 Jan 2020)

Créer un environnement virtuel

Accédez au répertoire de travail et créez un environnement virtuel avec la commande suivante.

$ cd ~/work/OpencvPythonExperiment/  #Déplacer vers n'importe quel répertoire de travail
$ python3.7 -m venv .venv  #Créer un environnement virtuel

Lors de la création d'un environnement virtuel, le message suivant peut s'afficher. (Je ne l'ai pas vérifié correctement, mais dans un environnement où pip n'est pas installé, le message suivant s'affiche?)

$ python3.7 -m venv .venv
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt-get install python3-venv

You may need to use sudo with that command.  After installing the python3-venv
package, recreate your virtual environment.

Dans ce cas, il a été résolu en exécutant la commande suivante.

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install python3.7-venv  #Spécifiez explicitement la version mineure et installez
$ python3.7 -m venv .venv  #Créer un environnement virtuel

Installation d'OpenCV

Création d'un fichier pyproject.toml

Vous pouvez aller dans votre répertoire de travail et créer de manière interactive un fichier pyproject.toml avec la commande suivante:

$ poetry init
(Omis ci-dessous)

Après avoir saisi correctement, le fichier suivant a été généré. Si vous ne voulez pas créer vous-même le fichier pyproject.toml, copiez et collez simplement le contenu suivant et tout ira bien.

pyproject.toml


name = "opencv-python-experiment"
version = "0.1.0"
description = ""
authors = ["Takahiro55555"]

[tool.poetry.dependencies]
python = "^3.7"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Installation d'OpenCV

J'ai exécuté la commande suivante et essayé d'installer OpenCV mais cela a échoué.

$ poetry add opencv-contrib-python

Plus précisément, l'erreur suivante a été affichée.

[EnvCommandError]
Command ['/home/pi/work/OpencvPythonExperiment/.venv/bin/pip', 'install', '--no-deps', 'opencv-contrib-python==4.2.0.34'] errored with the following return code 1, and output:
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting opencv-contrib-python==4.2.0.34
  Could not find a version that satisfies the requirement opencv-contrib-python==4.2.0.34 (from versions: 3.4.2.16, 3.4.2.17, 3.4.3.18, 3.4.4.19, 3.4.6.27, 3.4.7.28, 4.0.1.24, 4.1.0.25, 4.1.1.26)
No matching distribution found for opencv-contrib-python==4.2.0.34

En regardant l'erreur, il semble que l'erreur se soit produite parce que la version d'OpenCV que vous essayez d'installer n'est pas incluse dans la liste des versions installables d'OpenCV.

J'ai donc spécifié explicitement la version d'OpenCV qui pouvait être installée et j'ai essayé de l'installer à nouveau, mais une nouvelle erreur s'est produite.

$ poetry add opencv-contrib-python=4.1.1.26

Plus précisément, l'erreur suivante a été affichée.

[EnvCommandError]
Command ['/home/pi/work/OpencvPythonExperiment/.venv/bin/pip', 'install', '--no-deps', 'opencv-contrib-python==4.1.1.26'] errored with the following return code 1, and output:
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting opencv-contrib-python==4.1.1.26
  Downloading https://www.piwheels.org/simple/opencv-contrib-python/opencv_contrib_python-4.1.1.26-cp37-cp37m-linux_armv7l.whl (15.9MB)
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    opencv-contrib-python==4.1.1.26 from https://www.piwheels.org/simple/opencv-contrib-python/opencv_contrib_python-4.1.1.26-cp37-cp37m-linux_armv7l.whl#sha256=8000d53db64bc9b5b093d9cae4cecb540af97f1dfdd967d8ac29bc5f5032528b:
        Expected sha256 8000d53db64bc9b5b093d9cae4cecb540af97f1dfdd967d8ac29bc5f5032528b
             Got        47247bbcadb068654922b0d94b3cc5f8437a3ab74d549668efec2e489a5f21aa

Donc, après avoir mis à jour pip dans l'environnement virtuel, j'ai essayé à nouveau d'installer OpenCV et l'installation a réussi.

$ .venv/bin/pip install -U pip
$ poetry add opencv-contrib-python=4.1.1.26

Erreurs et solutions d'importation OpenCV

Immédiatement, j'ai essayé d'utiliser OpenCV, mais l'erreur suivante s'est produite à ʻimport`.

$ poetry shell
(.venv) $ python
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pi/work/OpencvPythonExperiment/.venv/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
    from .cv2 import *
ImportError: libhdf5_serial.so.103: cannot open shared object file: No such file or directory

Installation des packages correspondant aux erreurs

[Cet article](https://qiita.com/atuyosi/items/5f73baa08c3408f248e8#%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A8%E5%AF%BE % E5% BF% 9C% E3% 81% 99% E3% 82% 8B% E3% 83% 91% E3% 83% 83% E3% 82% B1% E3% 83% BC% E3% 82% B8% E5 % 90% 8D% E3% 81% AE% E3% 83% AA% E3% 82% B9% E3% 83% 88) et installé le package manquant. Dans mon environnement, certains des packages installés dans l'article de référence ci-dessus sont obsolètes ou manquants, donc ceux qui ont été corrigés ou ajoutés sont affichés ci-dessous.

Ce qui suit est un résumé des packages installés.

sudo apt install libhdf5-103
sudo apt install libharfbuzz0b
sudo apt install liblapack3
sudo apt install libatlas-base-dev
sudo apt install libwebp6
sudo apt install libtiff5
sudo apt install libjasper1
sudo apt install libilmbase23
sudo apt install libopenexr23
sudo apt install libavcodec-extra58
sudo apt install libavformat58
sudo apt install libswscale5
sudo apt install libqtgui4
sudo apt install libqt4-test 

HDF5

Error.txt


ImportError: libhdf5_serial.so.103: cannot open shared object file: No such file or directory

-> sudo apt install libhdf5-103

HarfBuzz

Error.txt


ImportError: libharfbuzz.so.0: cannot open shared object file: No such file or directory

-> sudo apt install libharfbuzz0b

???

Error.txt


ImportError: liblapack.so.3: cannot open shared object file: No such file or directory

-> sudo apt install liblapack3

???

Error.txt


ImportError: libcblas.so.3: cannot open shared object file: No such file or directory

-> sudo apt install libatlas-base-dev

WebP

Error.txt


ImportError: libwebp.so.6: cannot open shared object file: No such file or directory

-> sudo apt install libwebp6

???

Error.txt


ImportError: libtiff.so.5: cannot open shared object file: No such file or directory

-> sudo apt install libtiff5

Jasper

Error.txt


ImportError: libjasper.so.1: cannot open shared object file: No such file or directory

-> sudo apt install libjasper1

???

Error.txt


ImportError: libImath-2_2.so.23: cannot open shared object file: No such file or directory

-> sudo apt install libilmbase23

OpenEXR

Error.txt


ImportError: libIlmImf-2_2.so.23: cannot open shared object file: No such file or directory

-> sudo apt install libopenexr23

En relation avec FFmpeg

Error.txt


ImportError: libavcodec.so.58: cannot open shared object file: No such file or directory

-> sudo apt install libavcodec-extra58

Error.txt


ImportError: libavformat.so.58: cannot open shared object file: No such file or directory

-> sudo apt install libavformat58

Error.txt


ImportError: libswscale.so.5: cannot open shared object file: No such file or director

-> sudo apt install libswscale5

Lié à Qt

Error.txt


ImportError: libQtGui.so.4: cannot open shared object file: No such file or directory

-> sudo apt install libqtgui4

Error.txt


ImportError: libQtTest.so.4: cannot open shared object file: No such file or directory

-> sudo apt install libqt4-test

Erreurs causées par autre chose que des packages manquants

[Cet article](https://qiita.com/XM03/items/48463fd910470b226f22#%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E7%AA%81 % E7% A0% B4% E6% 96% B9% E6% B3% 95), et le problème a été résolu.

Error.txt


ImportError: /home/pi/work/OpencvPythonExperiment/.venv/lib/python3.7/site-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: undefined symbol: __atomic_fetch_add_8

Avant de modifier .bashrc, vérifiez que la solution de l'article ci-dessus fonctionne.

$ poetry shell  #Activez l'environnement virtuel
(.venv) $ export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1  #La solution décrite dans l'article ci-dessus
(.venv) $ python  #Contrôle de fonctionnement
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.1
>>> exit()  #Quitter l'interprète

Lorsque j'ai vérifié la version d'OpenCV à titre d'essai, j'ai pu la confirmer en toute sécurité. Alors, ajoutez ce qui suit à .bashrc.

$ echo "export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1" >> ~/.bashrc
$ poetry shell  #Activez l'environnement virtuel
(.venv) $ python  #Contrôle de fonctionnement
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.1'

Encore une fois, j'ai pu confirmer qu'aucune erreur ne s'est produite.

Essayez d'utiliser OpenCV

Essayez d'afficher l'image en utilisant OpenCV. Le fichier image (lenna.png) est placé dans le répertoire où se trouve à l'avance .venv.

$ ls -a
.  ..  lenna.png  poetry.lock  pyproject.toml  .venv
$ poetry shell  #Activez l'environnement virtuel
(.venv) $ python
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> import cv2
>>> img = cv2.imread("lenna.png ")
>>> cv2.imshow("color",img)
>>> cv2.waitKey(0)  #Sélectionnez la fenêtre d'image et appuyez sur n'importe quelle touche pour entrer à nouveau dans l'interpréteur
235
>>> cv2.destroyAllWindows()

Il a été affiché avec succès comme ci-dessous (en utilisant le transfert X). opencv-on-the-raspberry-py02.PNG

Supplément

[Article de référence](https://qiita.com/atuyosi/items/5f73baa08c3408f248e8#%E3%82%A8%E3%] dans [Installation des packages correspondant aux erreurs](#Installation des packages correspondant aux erreurs) 83% A9% E3% 83% BC% E3% 81% A8% E5% AF% BE% E5% BF% 9C% E3% 81% 99% E3% 82% 8B% E3% 83% 91% E3% 83% 83% E3% 82% B1% E3% 83% BC% E3% 82% B8% E5% 90% 8D% E3% 81% AE% E3% 83% AA% E3% 82% B9% E3% 83% 88) Ensuite, j'ai également installé Gtk3 comme suit.

ImportError: libgtk-3.so.0: cannot open shared object file: No such file or directory

-> libgtk-3-0 (libgtk-3-dev)

Je n'ai pas eu d'erreurs liées à «Gtk3» dans mon environnement, mais cela pourrait être utile si j'obtiens des erreurs liées à «Gtk3».

Les références

Recommended Posts

Créer un environnement OpenCV4 sur Raspberry Pi à l'aide de Poetry
Créer un environnement Arch Linux sur Raspai
Construire un environnement OpenCV-Python sur Raspberry Pi B +
Construire un environnement Django sur Raspai (MySQL)
Construire un environnement de développement Python sur Raspberry Pi
Installez OpenCV4 sur Raspberry Pi 3
Essayez d'utiliser ArUco avec Raspberry Pi
Procédure d'installation d'OpenCV sur Raspberry Pi
Construisez wxPython sur Ubuntu 20.04 sur Raspberry Pi 4
Créer un environnement d'apprentissage automatique à l'aide de Python sur MacOSX
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Créer un environnement Python 3 et OpenCV sur Ubuntu 18.04
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Créer un environnement OpenCV3 + python3 sur OSX
Détectez la température à l'aide de python sur Raspberry Pi 3!
Créer un environnement Python + OpenCV sur Cloud9
Construire l'environnement Python3.5 + matplotlib sur Ubuntu 12 en utilisant Anaconda
Détectez les interrupteurs à glissière à l'aide de python sur Raspberry Pi 3!
Essayez d'utiliser le code QR avec Raspberry Pi
Détectez les commutateurs magnétiques à l'aide de python sur Raspberry Pi 3!
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
pigpio sur Raspberry pi
Cython sur Raspberry Pi
Comment créer un environnement pour utiliser plusieurs versions de Python sur un Mac
J'ai essayé de créer un environnement Ubuntu 20.04 LTS + ROS2 avec Raspberry Pi 4
Créer un environnement de développement Django à l'aide de pyenv-virtualenv sur Mac
Essayez d'utiliser le capteur de température (LM75B) avec Raspeye.
Créez un environnement Python sur votre Mac en utilisant pyenv
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Créer un environnement de développement Python à l'aide de pyenv sur MacOS
Sortie sur "LED 7 segments" en utilisant python avec Raspberry Pi 3!
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Surveillance intérieure à l'aide de Raspberry Pi
Créer un environnement virtuel Anaconda
Essayez d'utiliser OpenCV sur Windows
Créer un environnement Python sur Windows
Construire un environnement Python avec Windows
Introduction de pyenv sur Raspberry Pi
Utilisez NeoPixel avec la tarte aux framboises
Installez TensorFlow 1.15.0 sur Raspberry Pi
Créer un environnement d'apprentissage automatique sur Mac (pyenv, deeplearning, opencv)
Créer un environnement de développement Ubuntu python sur Google Cloud Platform
Compilation croisée pour Raspberry Pi Zero sur Debian-Try en utilisant une bibliothèque partagée
Utilisez python sur Raspberry Pi 3 pour détecter la "température (en utilisant un convertisseur A / N)"!
Accédez aux feuilles de calcul Google en utilisant python avec raspberry pi (pour vous-même)
Présentation de l'image Docker de Kaggle sur Windows pour créer un environnement
Créez un environnement sur Windows10 où vous pouvez essayer MXNet
Construction d'un environnement de développement Cortex-M pour TOPPERS utilisant Raspeye
Test de la communication UART avec Raspberry Pi
Créer un environnement Chainer à l'aide de CUDA et cuDNN sur une instance p2
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
USB sur Ethernet avec Raspberry pi
MQTT sur Raspberry Pi et Mac
raspberry pi 4 centos7 installer sur docker
Résolution d'une erreur lors de la mise en place de pygame dans python3 sur raspberry pi
Créer un environnement go à l'aide de Docker
Installez ghoto2 sur Raspberry Pi (Remarque)
Construisez et installez OpenCV sur Windows