Camera und OpenCV
Dokumentation des Camera Moduls
-
class
compLib.Camera.
Marker
(id: int, x: float, y: float)
-
class
compLib.Camera.
Camera
-
detect_markers
(image) → Any Funktion um die ArUco Marker in einem Bild zu erkennen.
- Parameter
image – Bild, welches die Kamera aufgenommen hat.
- Rückgabe
Gibt drei Variablen zurueck. Erstens eine Liste an Postionen der „Ecken“ der erkannten Markern. Zweitens eine Liste an IDs der erkannten Markern und dritten noch Debug Informationen (diese können ignoriert werden).
-
detect_markers_midpoint
(image) → Tuple[List[compLib.Camera.Marker], Any] Funktion um die ArUco Marker in einem Bild zu erkennen, einzuzeichnen und den Mittelpunkt der Marker auszurechnen.
- Parameter
image – Bild, welches die Kamera aufgenommen hat.
- Rückgabe
Gibt zwei Variablen zurueck. Erstens eine Liste an „Markern“ und zweitens das Bild mit den eigezeichneten Marken.
- Rückgabetyp
Tuple[List[Marker], Any]
-
draw_markers
(image, corners, ids) → Any Zeichnet die erkannten Markern mit ihren IDs in das Bild.
- Parameter
image – Original Bild, in dem die Marker erkannt wurden.
corners – List der Positionen der Ecken der erkannten Marker.
ids – IDs der erkannten Markern.
- Rückgabe
Neues Bild mit den eigezeichneten Markern.
-
get_frame
() → Any Die Funktion gibt das neuste Bild, welches die Kamera aufgenommen, hat zurück.
- Rückgabe
Ein „opencv image frame“
-
publish_frame
(image) Sendet das Bild, welches der Funktion übergeben wird, an den Webserver, damit es der Nutzer in seinem Browser ansehen kann.
- Parameter
image – Opencv Bild, welches dem Nutzer angezeigt werden soll.
- Rückgabe
None
-
Beispiele
Bild Anzeigen
Das folgende Programm fragt Bilder von der Kamera ab und schickt sie an den Webserver, der im Hintergrund läuft. Der Benutzer kann dann auf die Webseite: http://raspi_ip:9898 gehen und die Ausgabe der Kamera sehen.
from compLib.Camera import *
camera = Camera()
while True:
image = camera.get_frame()
camera.publish_frame(image)
ArUco Marker Erkennen
In diesem Programm werden die ArUco Marker, die sich am Spielfeld befinden, erkannt. Diese „QR-Code“ ähnlichen Marker finden sich in den Logistikzonen und können dazu verwendet werden zu erkennen, wo der Roboter hinfahren sollt etc.
from compLib.Camera import *
camera = Camera()
while True:
image = camera.get_frame()
markers, image = camera.detect_markers_midpoint(image)
print(markers)
print("-----------------")
camera.publish_frame(image)
Hier ist z.B. der ArUco Marker mit der ID 0. Führe das Programm aus und lass den Roboter auf den Bildschirm schauen. Das Programm sollte die 2D Position ausgeben, welcher der ArUco Marker (genauer sein Mittelpunkt) im Camera Bild hat.
Um die Positionen zu verarbeiten, muss dann nur noch das „markers“ array durchgegangen werden. Das könnte z.B. so gemacht werden:
from compLib.Camera import *
camera = Camera()
while True:
image = camera.get_frame()
markers, image = camera.detect_markers_midpoint(image)
print(markers)
print("-----------------")
for marker in markers:
print(f"Marker mit der id: {marker.id}")
print(f"Ist auf der X Position: {marker.x}")
print(f"und auf der Y Position: {marker.y}")
print("-----------------")
camera.publish_frame(image)
Wichtig ist noch zu beachten, dass die X und Y Positionen ihren Ursprung in der linken oberen Ecke des Bildes haben. D.h. die Position (0,0) ist im oberen linken Bildrand.