[PYTHON] Erstellen Sie mithilfe von Poetry eine OpenCV4-Umgebung auf Raspberry Pi

Einführung

OpenCV4-Umgebung unter Raspberry Pi 4 (Betriebssystem: Raspbian Lite) mit Poetry, einem Tool zum Verwalten von Python-Abhängigkeiten. Als ich es gebaut habe, hatte ich persönlich einige süchtig machende Punkte, also werde ich es hier als Notiz belassen.

Wenn Sie Fehler oder Verbesserungen haben, teilen Sie uns dies bitte mit.

Es wird davon ausgegangen, dass Poetry bereits installiert ist. Informationen zum Installieren und Verwenden von Poetry finden Sie in diesem Artikel.

Umgebung

Die Umgebung auf der Raspberry Pi-Seite ist wie folgt.

Modell 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
Befehls- und Ausführungsergebnis beim Überprüfen der Versionsinformationen
$ 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.

Außerdem wird "X-Übertragung" verwendet, wenn ein Bild als Funktionsprüfung angezeigt wird. Die Umgebung auf der Clientseite, die beim Überprüfen des Vorgangs verwendet wird, lautet wie folgt.

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

Erstellen einer virtuellen Umgebung

Wechseln Sie in das Arbeitsverzeichnis und erstellen Sie mit dem folgenden Befehl eine virtuelle Umgebung.

$ cd ~/work/OpencvPythonExperiment/  #Wechseln Sie in ein beliebiges Arbeitsverzeichnis
$ python3.7 -m venv .venv  #Erstellen Sie eine virtuelle Umgebung

Beim Erstellen einer virtuellen Umgebung wird möglicherweise die folgende Meldung angezeigt. (Ich habe es nicht richtig überprüft, aber in einer Umgebung, in der "pip" nicht installiert ist, wird die folgende Meldung angezeigt?)

$ 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.

In diesem Fall wurde es durch Ausführen des folgenden Befehls gelöst.

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install python3.7-venv  #Geben Sie die Nebenversion explizit an und installieren Sie sie
$ python3.7 -m venv .venv  #Erstellen Sie eine virtuelle Umgebung

OpenCV-Installation

Erstellen einer pyproject.toml-Datei

Sie können in Ihr Arbeitsverzeichnis gehen und interaktiv eine pyproject.toml-Datei mit dem folgenden Befehl erstellen:

$ poetry init
(Unten weggelassen)

Nach ordnungsgemäßer Eingabe wurde die folgende Datei generiert. Wenn Sie die Datei "pyproject.toml" nicht selbst erstellen möchten, kopieren Sie einfach den folgenden Inhalt und fügen Sie ihn ein.

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"

OpenCV-Installation

Ich habe den folgenden Befehl ausgeführt und versucht, OpenCV zu installieren, aber es ist fehlgeschlagen.

$ poetry add opencv-contrib-python

Insbesondere wurde der folgende Fehler angezeigt.

[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

Bei Betrachtung des Fehlers scheint der Fehler aufgetreten zu sein, da die Version von OpenCV, die Sie installieren möchten, nicht in der Liste der installierbaren Versionen von OpenCV enthalten ist.

Daher habe ich explizit die Version von OpenCV angegeben, die installiert werden kann, und versucht, sie erneut zu installieren, aber es ist ein neuer Fehler aufgetreten.

$ poetry add opencv-contrib-python=4.1.1.26

Insbesondere wurde der folgende Fehler angezeigt.

[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

Nachdem ich pip in der virtuellen Umgebung aktualisiert hatte, versuchte ich erneut, OpenCV zu installieren, und die Installation war erfolgreich.

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

OpenCV-Importfehler und -Lösungen

Ich habe sofort versucht, OpenCV zu verwenden, aber beim Importieren ist der folgende Fehler aufgetreten.

$ 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 von Paketen, die Fehlern entsprechen

[Dieser Artikel](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) und installierte das fehlende Paket. In meiner Umgebung sind einige der im obigen Referenzartikel installierten Pakete veraltet oder fehlen. Daher werden die Pakete, die behoben oder hinzugefügt wurden, unten angezeigt.

Das Folgende ist eine Zusammenfassung der installierten Pakete.

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

FFmpeg im Zusammenhang

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

Qt verwandt

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

Fehler, die durch etwas anderes als fehlende Pakete verursacht wurden

[Dieser Artikel](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), und das Problem wurde gelöst.

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

Vergewissern Sie sich vor dem Ändern von ".bashrc", dass die Lösung im obigen Artikel funktioniert.

$ poetry shell  #Aktivieren Sie die virtuelle Umgebung
(.venv) $ export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1  #Die im obigen Artikel beschriebene Lösung
(.venv) $ python  #Funktionsprüfung
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()  #Beenden Sie den Dolmetscher

Als ich die Version von OpenCV als Testversion überprüfte, konnte ich sie sicher bestätigen. Fügen Sie also Folgendes zu .bashrc hinzu.

$ echo "export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1" >> ~/.bashrc
$ poetry shell  #Aktivieren Sie die virtuelle Umgebung
(.venv) $ python  #Funktionsprüfung
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'

Wieder konnte ich bestätigen, dass kein Fehler aufgetreten ist.

Versuchen Sie es mit OpenCV

Versuchen Sie, das Bild mit OpenCV anzuzeigen. Die Bilddatei (lenna.png) wird im Voraus in das Verzeichnis gestellt, in dem sich .venv befindet.

$ ls -a
.  ..  lenna.png  poetry.lock  pyproject.toml  .venv
$ poetry shell  #Aktivieren Sie die virtuelle Umgebung
(.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)  #Wählen Sie das Bildfenster aus und drücken Sie eine beliebige Taste, um den Interpreter erneut aufzurufen
235
>>> cv2.destroyAllWindows()

Es wurde wie folgt erfolgreich angezeigt (mit X-Übertragung). opencv-on-the-raspberry-py02.PNG

Ergänzung

[Referenzartikel](https://qiita.com/atuyosi/items/5f73baa08c3408f248e8#%E3%82%A8%E3%] in [Installieren von Paketen, die Fehlern entsprechen](# Installieren von Paketen, die Fehlern entsprechen) 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) Dann habe ich auch Gtk3 wie folgt installiert.

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

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

Ich habe in meiner Umgebung keine "Gtk3" -bezogenen Fehler erhalten, aber es kann hilfreich sein, wenn ich "Gtk3" -bezogene Fehler erhalte.

Verweise

Recommended Posts

Erstellen Sie mithilfe von Poetry eine OpenCV4-Umgebung auf Raspberry Pi
Erstellen Sie eine Arch Linux-Umgebung auf Raspai
Erstellen Sie eine OpenCV-Python-Umgebung auf Raspberry Pi B +
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Installieren Sie OpenCV4 auf Raspberry Pi 3
Versuchen Sie es mit ArUco mit Raspberry Pi
OpenCV-Installationsverfahren auf Raspberry Pi
Erstellen Sie wxPython unter Ubuntu 20.04 auf Himbeer-Pi 4
Erstellen Sie eine Umgebung für maschinelles Lernen mit Python unter MacOSX
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
Erstellen Sie Python 3 und OpenCV unter Ubuntu 18.04
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Erstellen Sie eine OpenCV3 + python3-Umgebung unter OSX
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Erstellen Sie eine Python + OpenCV-Umgebung in Cloud9
Erstellen Sie die Python3.5 + matplotlib-Umgebung unter Ubuntu 12 mit Anaconda
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Versuchen Sie, QR-Code mit Raspberry Pi zu verwenden
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Pigpio auf Himbeer-Pi
Cython auf Raspberry Pi
So erstellen Sie eine Umgebung für die Verwendung mehrerer Python-Versionen auf einem Mac
Ich habe versucht, mit Raspberry Pi 4 eine Umgebung von Ubuntu 20.04 LTS + ROS2 zu erstellen
Erstellen einer Django-Entwicklungsumgebung mit pyenv-virtualenv auf einem Mac
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
Erstellen Sie mit pyenv eine Python-Umgebung auf Ihrem Mac
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Erstellen Sie eine Python-Entwicklungsumgebung mit pyenv unter MacOS
Ausgabe auf "7 Segment LED" mit Python mit Raspberry Pi 3!
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung
Innenüberwachung mit Raspberry Pi
Erstellen Sie eine virtuelle Anaconda-Umgebung
Versuchen Sie es mit OpenCV unter Windows
Erstellen Sie eine Python-Umgebung unter Windows
Erstellen Sie eine Python-Umgebung mit Windows
Pyenv auf Raspberry Pi eingeführt
Verwenden Sie NeoPixel mit Himbeerkuchen
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
Erstellen Sie eine maschinelle Lernumgebung auf einem Mac (pyenv, deeplearning, opencv).
Erstellen Sie eine Ubuntu-Python-Entwicklungsumgebung auf der Google Cloud Platform
Cross-Compilierung für Raspberry Pi Zero unter Debian-Try unter Verwendung einer gemeinsam genutzten Bibliothek
Verwenden Sie Python auf Raspberry Pi 3, um "Temperatur (mit A / D-Wandler)" zu erkennen!
Zugriff auf Google Spreadsheets Verwenden von Python mit Himbeer-Pi (für sich selbst)
Einführung in Kaggles Docker Image unter Windows zum Erstellen einer Umgebung
Erstellen Sie unter Windows 10 eine Umgebung, in der Sie MXNet ausprobieren können
Aufbau einer Cortex-M-Entwicklungsumgebung für TOPPERS mit Raspeye
Testen der Kommunikation mit Raspberry Pi
Erstellen Sie eine Chainer-Umgebung mit CUDA und cuDNN auf einer p2-Instanz
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
USB über Ethernet mit Raspberry pi
MQTT auf Raspberry Pi und Mac
Himbeer Pi 4 Centos7 auf Docker installieren
Ein Fehler beim Einfügen von Pygame in Python3 auf Himbeer-Pi wurde behoben
Erstellen Sie mit Docker eine Go-Umgebung
Installieren Sie ghoto2 auf Raspberry Pi (Hinweis)
Erstellen und installieren Sie OpenCV unter Windows