817
29.2
Kamerabilder
29.2 Kamerabilder
Mit PyQt5 ist ein einfacher Zugriff auf Kameras möglich. Sie können das aktuelle Kamera-
bild in einem Anwendungsfenster sichtbar machen und Videos und Fotos speichern oder
verarbeiten. Das folgende Skript bietet einen kleinen Eindruck.
Abb. 29.6: Fotografieren mit PyQt5
Das Anwendungsfenster enthält nur zwei Widgets: Ein QViewFinder-Widget, das das aktu-
elle Kamerabild anzeigt, und eine Schaltfläche.
Skript
#! /python34/pythonw.exe
# camera.pyw
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import (QCamera,
QCameraImageCapture)
from PyQt5.QtMultimediaWidgets import QVideoWidget
import sys, time
class Window(QWidget):
def __init__(self):
super().__init__()
self.createWidgets()
self.createCamera()
self.createLayout()
self.show()
Kapitel 29
Multimediaanwendungen mit Qt
818
Erläuterung:
#1: Das Objekt der Klasse QVideoWidget sorgt für die Darstellung bewegter Bilder im
Anwendungsfenster.
#2: Das zweite Widget ist eine Schaltfläche, die mit der Methode takePhoto() verbunden
wird.
#3: Wir verwenden ein vertikales Box-Layout. Die beiden Widgets werden im Anwendungs-
fenster übereinander angezeigt.
#4: Das erste Gerät aus der Liste verfügbarer Kameras wird ausgewählt und ein QCamera-
Objekt erzeugt, das den Zugriff auf die Live-Bilder der Kamera ermöglicht.
#5: Der Sucher (engl.: view finder) der Kamera wird an das QVideoWidget-Objekt gekoppelt,
das für die Wiedergabe bewegter Bilder zuständig ist.
#6: Der Aufnahmemodus der Kamera wird auf Einzelbilder gesetzt.
def createWidgets(self):
self.videoWidget = QVideoWidget() #1
self.button = QPushButton("Foto") #2
self.button.clicked.connect(self.takePhoto)
def createLayout(self):
self.box = QVBoxLayout() #3
self.box.addWidget(self.videoWidget)
self.box.addWidget(self.button)
self.setLayout(self.box)
def createCamera(self):
self.device = QCamera.availableDevices()[0] #4
self.camera = QCamera(self.device)
self.camera.setViewfinder(self.videoWidget) #5
self.camera.setCaptureMode(
QCamera.CaptureStillImage) #6
self.imageCapture = QCameraImageCapture(
self.camera) #7
self.camera.start()
def takePhoto(self):
if self.imageCapture.isReadyForCapture(): #8
self.imageCapture.capture(
"/myPhotos/foto" + str(time.time()))
app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.