auf usb Kamera zugreifen und Bild schießen !!

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Hallo,

ist es möglich mit Python auf die Usb-Kamera meines Raspberry
zuzugreifen und ein Bild zu erstellen und das dann per Mail zu versenden!

Mir fehlt eigentlich nur der Zugriff auf die Usb-Kamera !! Unter welchen Stichpunkten kann ich was finden.

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
lexx
User
Beiträge: 19
Registriert: Sonntag 23. Dezember 2018, 14:15

Mir als Einsteiger fällt da jetzt opencv ein.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo Kla-Sur,

Code: Alles auswählen

#! /usr/bin/env python
# -*- coding: utf-8

import tkinter as tk
import cv2
from PIL import Image, ImageTk

WIDTH = 640
HEIGHT = 480
DEFAULT_CAM_ID = -1

class USBCam(object):

    PROPID_WIDTH = 3
    PROPID_HEIGHT = 4
    
    def __init__(self, cam_id = DEFAULT_CAM_ID):
        self.cam = cv2.VideoCapture(cam_id)
        if not self.cam.isOpened():
           raise RuntimeError("can not open camera {0!r}".format(
                cam_id))
        self.width = int(self.cam.get(self.PROPID_WIDTH))
        self.height = int(self.cam.get(self.PROPID_HEIGHT))
            
    @property
    def size(self):
        return self.width, self.height
                
    def __enter__(self):
        return self

    def __exit__(self, *args):
        self.release()
                                
    def get_image(self):
        state, frame = self.cam.read()

        if not state:
            raise RuntimeError("could not read image")
        else:
            return frame
            
    def release(self):
        self.cam.release()
        
        
class USBCamUI(tk.Frame):
    def __init__(self, parent, usb_cam, width, height, 
        update_interval = 100):
        tk.Frame.__init__(self, parent)
        self.parent = parent
        self.usb_cam = usb_cam
        self.width = width
        self.height = height
        self.update_interval = update_interval
        self.after_id = None
        self.tk_image = None
        self.image_label = tk.Label(self)
        self.image_label.pack()
        
    def run(self):
        try:
            tk_image = Image.frombytes("RGB",  self.usb_cam.size,
                self.usb_cam.get_image(), "raw", "BGR").resize(
                (self.width, self.height))
        except RuntimeError:
            self.raise_cam_id_error()
            return
        self.tk_image = ImageTk.PhotoImage(tk_image)
        self.image_label.config(image = self.tk_image)
        self.after_id = self.after(self.update_interval, self.run)
        
    def release(self):
        self.after_cancel(self.after_id)
        self.parent.destroy()
        
def main():
    root = tk.Tk()
    root.title("USB CAM")
    root.resizable(0, 0)

    try:
        with USBCam() as usb_cam:
            usb_cam_ui = USBCamUI(root, usb_cam, WIDTH, HEIGHT)
            usb_cam_ui.pack()
            usb_cam_ui.run()
            root.protocol("WM_DELETE_WINDOW", usb_cam_ui.release)
            root.mainloop()
    except RuntimeError:
        tk.Label(root, text = "can not open camera {0!r}".format(
                DEFAULT_CAM_ID), font = "Arial 20", height = 10).pack()
        root.mainloop()

if __name__ == "__main__":
    main()
Gruß Frank
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Danke Frank !!!

Hoffentlcht komme ich damit klar, als Anfänger. Werde den Code mal probieren. Hast du damit schon Erfahrungen gemacht?

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Danke auch Lexx,

dabei handelt es sich doch um ein Programm. Das habe ich nicht gesucht.

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

@Kla-Sur: Dabei handelt es sich um eine Bibliothek. In dem Code von Kaytec als cv2 importiert.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo Kla-Sur,

https://opencv-python-tutroals.readthed ... rials.html

Schaue mal nach "imwrite()".

Gruß Frank
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Moin, habe es gerade probiert.

Das habe ich als Fehlermeldung erhalten

Python 3.7.3 (/usr/bin/python3)
>>> %Run Mail.py
>>> %Run Bild.py
Traceback (most recent call last):
File "/home/pi/Bild.py", line 5, in <module>
import cv2
ModuleNotFoundError: No module named 'cv2'

Warum kann er die Datei nicht laden ?? import cv2??

Ich das Script Bild.py genannt!!

Wie gesagt ich bin Anfänger.

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Du möchtest ein Modul verwenden, das nicht Teil der Standard-Bibliothek ist. Also musst du es erst installieren. Das Paket heißt "opencv-python" in pypi.
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Moin sparrow,
danke für die Hilfe.
Ich muss jetzt das Paket auf den Raspberry Pi laden um an eine Bibiothek zu kommen?
sudo install opencv-python auf dem Raspberry ausführen oder verstehe ich etwas falsch.

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Moin sparrow,
danke für die Hilfe.
Ich muss jetzt das Paket auf den Raspberry Pi laden um an eine Bibiothek zu kommen?
sudo install opencv-python auf dem Raspberry ausführen oder verstehe ich etwas falsch.

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo Kla-Sur,

sudo apt install python-opencv --> sollte richtig sein.

oder --> https://pypi.org/project/opencv-python/

wirft bei mir eine Fehlermeldung ? Habe es bestimmt über apt-install installiert ?!

Code: Alles auswählen

Collecting opencv-python
  Using cached https://files.pythonhosted.org/packages/a1/d6/8422797e35f8814b1d9842530566a949d9b5850a466321a6c1d5a99055ee/opencv-python-4.3.0.38.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-3e1f61xv/opencv-python/setup.py", line 9, in <module>
        import skbuild
    ModuleNotFoundError: No module named 'skbuild'
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-3e1f61xv/opencv-python/
Gruß Frank
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Moin,

habe run pip install opencv-python auf dem Raspberry in der Console ausgeführt.

Das war das Resultat:

pip install opencv-python
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting opencv-python
Downloading https://files.pythonhosted.org/packages ... .38.tar.gz (88.0MB)
100% |████████████████████████████████| 88.0MB 1.8kB/s
Installing build dependencies ... error
Complete output from command /usr/bin/python -m pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-cusc7f --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple --extra-index-url https://www.piwheels.org/simple -- setuptools wheel scikit-build cmake pip "numpy==1.11.3; python_version=='3.5'" "numpy==1.13.3; python_version=='3.6'" "numpy==1.14.5; python_version=='3.7'" "numpy==1.17.3; python_version>='3.8'":
Ignoring numpy: markers 'python_version == "3.5"' don't match your environment
Ignoring numpy: markers 'python_version == "3.6"' don't match your environment
Ignoring numpy: markers 'python_version == "3.7"' don't match your environment
Ignoring numpy: markers 'python_version >= "3.8"' don't match your environment
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple, https://www.piwheels.org/simple
Collecting setuptools
Downloading https://files.pythonhosted.org/packages ... ne-any.whl (583kB)
Collecting wheel
Downloading https://files.pythonhosted.org/packages ... ne-any.whl
Collecting scikit-build
Downloading https://files.pythonhosted.org/packages ... ne-any.whl (72kB)
Collecting cmake
Downloading https://files.pythonhosted.org/packages ... 8.0.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-R4dwmC/cmake/setup.py", line 7, in <module>ds
from skbuild import setup
ImportError: No module named skbuild

----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-R4dwmC/cmake/

----------------------------------------
Command "/usr/bin/python -m pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-cusc7f --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple --extra-index-url https://www.piwheels.org/simple -- setuptools wheel scikit-build cmake pip "numpy==1.11.3; python_version=='3.5'" "numpy==1.13.3; python_version=='3.6'" "numpy==1.14.5; python_version=='3.7'" "numpy==1.17.3; python_version>='3.8'"" failed with error code 1 in None

Habe das Kamera-Script gestartet und wieder der gleiche Fehler beim Import
>> %Run Bild.py
Traceback (most recent call last):
File "/home/pi/Bild.py", line 5, in <module>
import cv2
ModuleNotFoundError: No module named 'cv2'

Bin gerade dabei die Fehler zu lesen!!!

Aber jetzt schon mal die Frage ? Woran kann es liegen ?

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was ins Auge sticht: Du verwendest kein Python 3.5 bis 3.8. Welche Version verwendest du denn?
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Moin, habe die Python-Version geprüft. 2.7. Kann mir einer helfen beim Update auf die neue Version3.8.5?
Es handelt sich um einen RaspberryPi;4B;2GB und das betriebssytem bust-debian.

Habe schon folgenden Befehl probiert sudo apt-get remove python ! sudo apt-get install python, aber
das geht irendwie nicht.

Habt Geduld mit mir.

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Kla-Sur: Erst mal schauen ob ein Python 3 nicht bereits installiert ist. ``python`` ist Python 2, ``python3`` ist Python 3. Die können deswegen problemlos beide installiert sein.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

@Kla-Sur Ergänzend noch ein paar Hinweise. Wenn es sich um ein Raspbian oder neuerdings Raspberry Pi OS handelt dann ist Python 3 neben Python 2 schon vorinstalliert.

Noch etwas zur Installation von Modulen. Diese müssen für die jeweilige Python-Version installiert sein:

"pip install ..." (Python 2)
"pip3 install ..." (Python 3)

und evtl. noch zum Aufruf von Skripten:

"python /Pfad/zum/Sript.py" (mit Python 2)
"python3 /Pfad/zum/Sript.py" (mit Python 3)
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo Kla-Su,

oder --> sudo apt install python3

Gru? Frank
Antworten