An einigen Stelle ist es schwierig, mittels spezieller Füllstandsensorik den Füllstand eines Mediums zu erfassen.
Hat man den freien Blick auf das Medium (z.B.) Glasbehälter, bietet sich hier der Einsatz einer preiswerten Kamera und beispielsweise eines Raspberry-Kleincomputers an.
Mittels der Open Source Bibliothek „Open CV“ (hier in der Version 3) ist ein spezielles Programm schnell erstellt.
Das folgende Bild zeigt den Versuchsaufbau: Eine Glasgefäß ist mit einem Medium gefüllt, welches sich vom Hintergrund abhebt
Im ersten wird von der Webcam ein Foto des Aufbaus aufgenommen.
Dann wird zunächst der eigentlich interessierende Bereich des Bildes ausgewählt.
Im nächsten Schritt wird der interessiende Bereich ausgeschnitten und in ein Graubild gewandelt.
Dann folgt ein Threshold-Prozess, der nur 2 Farben nämlich weiß und schwarz, übrig lässt.
Zählt man jetzt die Pixel, hat man ein Maß für den Füllstand das Problem ist gelöst….
Ist OpenCV erst einmal auf dem Test-System installiert, hat man unzählige Möglichkeiten, mit Bildern aus welchen Quellen auch immer, zu arbeiten.
Eine Grundaufgabe ist es oft, einfach das Bild einer Webcam auf dem Bildschirm darzustellen
Hierfür habe ich auf Github https://gist.github.com/tedmiston/6060034 eine elegante Lösung gefunden, die ich Euch hiermit gerne vortstelle. (Vielen Dank an Taylor D. Edmiston)
das lauffähige Python 3.65 / OpenCV3.x Code-Snippet zum Anzeigen des Bildes auf dem Monitor
Interesant in diesem Zusammenhang ist die Rolle von cv2.waitkey(x). Während cv2.waitkey(0) nach jedem angezeigtem Bild auf eine Eingabe wartet, bewirkt jedes andere Argument hier eine flüssige Darstellung des Streams.
import cv2
cam = cv2.VideoCapture(0)
while True:
ret_val, img = cam.read()
img = cv2.flip(img, 1)
cv2.imshow('my webcam', img)
if cv2.waitKey(1) == 27:
break # esc to quit
cv2.destroyAllWindows()
Die Funktion „Webcam Lesen) zum Einbinden in eigene Projekte
"""
Simply display the contents of the webcam with optional
mirroring using OpenCV
via the new Pythonic cv2 interface. Press <esc> to quit.
"""
import cv2
def show_webcam(mirror=False):
cam = cv2.VideoCapture(0)
while True:
ret_val, img = cam.read()
if mirror:
img = cv2.flip(img, 1)
cv2.imshow('my webcam', img)
if cv2.waitKey(1) == 27:
break # esc to quit
cv2.destroyAllWindows()
def main():
show_webcam(mirror=True)
if __name__ == '__main__':
main()
Wenn man mit einer Webcam eine Szenerie beobachtet, macht es oft Sinn, zu wissen, ob sich irgend etwas in dieser Szenerie tut, also bewegt. Man kann z.B. nach Detektion einer Bewegung ein Bild abspeichern, eine Nachricht absetzen oder weitere Bildanalysen starten. Die Webcam wird also durch ein paar Zeilen Python-Code zu einem Bewegungsmelder, der nach meinen Erfahrungen den Vergleich mit einem passiv-Infrarot – Detektor (Piri, herkömmlicher Bewegungsmelder) nicht scheuen braucht.
In diesem Beitrag will ich Euch ein Code-Snippet für eine lauffähige Lösung vorstellen, die nach Detektion einer Bewegung ein Bild abspeichert. Die Empfindlichkeit der Unterscheidung, ob eine Bewegung erfolgt ist, ist dabei frei wählbar
Das unter Python 3.6 /OpenCV 3.4 lauffähige Code-Snippet für Bewegungserkennung mittels Webcam:
Das Ergebnis: Differenzbild wird angezeigt, solange Bewegung stattfindet werden Fotos abgespeichert. Auch die Anzahl der gespeicherten Fotos wird mitgeteilt.
erlogreicher „Selbstversuch“ – bei Bewegung werden Bilder gespeichert.
Diese Lösung hat sich im praktischen Test (Bewegungsmelder im Büro) als recht robust erwiesen und kommt dank gleitender Hintergrund-Durchschnittsbildung auch mit wechselnden Lichtverhältnissen gut zurecht.