popular_features_as_the_controller_device.py

# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Fernsteuerung - Als Steuergerät
#
# Dieses Skript konfiguriert Ihre OpenMV Cam so, dass sie eine andere OpenMV Cam über die RPC-
# Bibliothek fernsteuert. Dieses Skript kann auf jedem MicroPython-Board ausgeführt werden, das das pyb-Modul implementiert, um
# eine OpenMV Cam fernzusteuern.
#
# Dieses Skript ist dafür ausgelegt, mit "popular_features_as_the_remote_device.py" zusammenzuarbeiten.

import json
import rpc
import struct

# Die oben genannte RPC-Bibliothek ist auf Ihrer OpenMV Cam installiert und stellt mehrere Klassen bereit, um
# sodass Ihre OpenMV Cam über CAN, I2C, SPI oder UART steuern kann.

##############################################################
# Wählen Sie die Schnittstelle, über die Sie eine OpenMV Cam steuern möchten.
##############################################################

# Entfernen Sie das Kommentarzeichen der folgenden Zeile, um Ihre OpenMV Cam für die Steuerung über CAN einzurichten.
#
# * message_id - CAN-Nachricht, die für den Datentransport auf dem CAN-Bus verwendet wird (11-Bit).
# * bit_rate - CAN-Bitrate.
# * sample_point - Tseg1/Tseg2-Verhältnis. Typischerweise 75%. (50.0, 62.5, 75, 87.5, usw.)
#
# HINWEIS: Master- und Slave-Nachrichten-IDs sowie CAN-Bitraten müssen übereinstimmen. Verbinden Sie Master CAN-High mit Slave
# CAN-High und Master CAN-Low mit Slave CAN-Low. Der CAN-Bus muss mit 120 Ohm terminiert werden.
#
# interface = rpc.rpc_can_master(message_id=0x7FF, bit_rate=250000, sample_point=75)

# Entfernen Sie das Kommentarzeichen der folgenden Zeile, um Ihre OpenMV Cam für die Steuerung über I2C einzurichten.
#
# * slave_addr - I2C-Adresse.
# * rate - I2C-Bus-Taktfrequenz.
#
# HINWEIS: Master- und Slave-Adressen müssen übereinstimmen. Verbinden Sie Master SCL mit Slave SCL und Master SDA
# mit Slave SDA. Sie müssen externe Pull-ups verwenden. Schließlich müssen beide Geräte eine gemeinsame Masse haben.
#
# interface = rpc.rpc_i2c_master(slave_addr=0x12, rate=100000)

# Entfernen Sie das Kommentarzeichen der folgenden Zeile, um Ihre OpenMV Cam für die Steuerung über SPI einzurichten.
#
# * cs_pin - Slave-Select-Pin.
# * freq - SPI-Bus-Taktfrequenz.
# * clk_polarity - Ruhepegel des Takts (0 oder 1).
# * clk_phase - Daten bei der ersten (0) oder zweiten Flanke (1) des Takts abtasten.
#
# HINWEIS: Master- und Slave-Einstellungen müssen übereinstimmen. Verbinden Sie CS, SCLK, MOSI, MISO mit CS, SCLK, MOSI, MISO.
# Schließlich müssen beide Geräte eine gemeinsame Masse haben.
#
# interface = rpc.rpc_spi_master(cs_pin="P3", freq=10000000, clk_polarity=1, clk_phase=0)

# Entfernen Sie das Kommentarzeichen der folgenden Zeile, um Ihre OpenMV Cam für die Steuerung über UART einzurichten.
#
# * baudrate - Serielle Baudrate.
#
# HINWEIS: Master- und Slave-Baudraten müssen übereinstimmen. Verbinden Sie Master TX mit Slave RX und Master RX mit
# Slave TX. Schließlich müssen beide Geräte eine gemeinsame Masse haben.
#
interface = rpc.rpc_uart_master(baudrate=115200)

##############################################################
# Callback-Handler
##############################################################


def exe_face_detection():
    result = interface.call("face_detection")
    if result is not None and len(result):
        print(
            "Largest Face Detected [x=%d, y=%d, w=%d, h=%d]"
            % struct.unpack("<HHHH", result)
        )


def exe_qrcode_detection():
    result = interface.call("qrcode_detection")
    if result is not None and len(result):
        print(bytes(result).decode())


def exe_all_qrcode_detection():
    result = interface.call("all_qrcode_detection")
    if result is not None and len(result):
        print("QR Codes Detected:")
        for obj in json.loads(result):
            print(obj)


def exe_apriltag_detection():
    result = interface.call("apriltag_detection")
    if result is not None and len(result):
        print(
            "Largest Tag Detected [cx=%d, cy=%d, id=%d, rot=%d]"
            % struct.unpack("<HHHH", result)
        )


def exe_all_apriltag_detection():
    result = interface.call("all_apriltag_detection")
    if result is not None and len(result):
        print("Tags Detected:")
        for obj in json.loads(result):
            print(obj)


def exe_datamatrix_detection():
    result = interface.call("datamatrix_detection")
    if result is not None and len(result):
        print(bytes(result).decode())


def exe_all_datamatrix_detection():
    result = interface.call("all_datamatrix_detection")
    if result is not None and len(result):
        print("Data Matrices Detected:")
        for obj in json.loads(result):
            print(obj)


def exe_barcode_detection():
    result = interface.call("barcode_detection")
    if result is not None and len(result):
        print(bytes(result).decode())


def exe_all_barcode_detection():
    result = interface.call("all_barcode_detection")
    if result is not None and len(result):
        print("Bar Codes Detected:")
        for obj in json.loads(result):
            print(obj)


def exe_color_detection():
    thresholds = (30, 100, 15, 127, 15, 127)  # allgemeine Schwellenwerte für Rot
    # thresholds = (30, 100, -64, -8, -32, 32) # allgemeine Schwellenwerte für Grün
    # thresholds = (0, 30, 0, 64, -128, 0) # allgemeine Schwellenwerte für Blau
    result = interface.call("color_detection", struct.pack("<bbbbbb", *thresholds))
    if result is not None and len(result):
        print("Largest Color Detected [cx=%d, cy=%d]" % struct.unpack("<HH", result))


number = 0


def exe_jpeg_snapshot():
    global number
    result = interface.call("jpeg_snapshot")
    if result is not None:
        name = "snapshot-%05d.jpg" % number
        print("Writing jpeg %s..." % name)
        with open(name, "wb") as snap:
            snap.write(result)
            number += 1


# Remote-Funktionen in einer Schleife ausführen. Bitte wählen Sie eine der folgenden Remote-Funktionen aus und entfernen Sie deren Kommentarzeichen.
# Das gleichzeitige Ausführen mehrerer Funktionen kann langsam sein, wenn die Kamera bei jeder Ausführung
# den Kameramodus wechseln muss.

while True:
    exe_face_detection()  # Das Gesicht sollte etwa 2 Fuß entfernt sein.
    # exe_qrcode_detection() # Platzieren Sie den QR-Code etwa 2 Fuß entfernt.
    # exe_all_qrcode_detection() # Platzieren Sie den QR-Code etwa 2 Fuß entfernt.
    # exe_apriltag_detection()
    # exe_all_apriltag_detection()
    # exe_datamatrix_detection() # Platzieren Sie die Datamatrix etwa 2 Fuß entfernt.
    # exe_all_datamatrix_detection() # Platzieren Sie die Datamatrix etwa 2 Fuß entfernt.
    # exe_barcode_detection() # Platzieren Sie den Barcode etwa 2 Fuß entfernt.
    # exe_all_barcode_detection() # Platzieren Sie den Barcode etwa 2 Fuß entfernt.
    # exe_color_detection()
    # exe_jpeg_snapshot()

results matching ""

    No results matching ""