popular_features_as_the_controller_device.py

# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Дистанционное управление — в роли управляющего устройства
#
# Этот скрипт настраивает OpenMV Cam для дистанционного управления другой камерой OpenMV Cam с помощью библиотеки RPC
# Данный скрипт может быть запущен на любой плате MicroPython, реализующей модуль pyb, для
# дистанционного управления камерой OpenMV Cam.
#
# Этот скрипт предназначен для работы в паре с "popular_features_as_the_remote_device.py".

import json
import rpc
import struct

# Указанная выше библиотека RPC установлена на вашей камере OpenMV Cam и предоставляет несколько классов,
# позволяя вашей камере OpenMV Cam управлять через CAN, I2C, SPI или UART.

##############################################################
# Выберите интерфейс, через который вы хотите управлять камерой OpenMV Cam.
##############################################################

# Раскомментируйте строку ниже, чтобы настроить OpenMV Cam для управления через CAN.
#
# * message_id — идентификатор CAN-сообщения для передачи данных по шине CAN (11 бит).
# * bit_rate — скорость передачи по CAN.
# * sample_point — соотношение Tseg1/Tseg2. Обычно 75%. (50.0, 62.5, 75, 87.5 и т. д.)
#
# ПРИМЕЧАНИЕ: идентификаторы сообщений и скорости CAN у ведущего и ведомого устройств должны совпадать. Соедините CAN high ведущего с
# CAN high ведомого, а CAN low ведущего — с CAN low ведомого. Шина CAN должна быть терминирована резисторами 120 Ом.
#
# interface = rpc.rpc_can_master(message_id=0x7FF, bit_rate=250000, sample_point=75)

# Раскомментируйте строку ниже, чтобы настроить OpenMV Cam для управления через I2C.
#
# * slave_addr — адрес I2C.
# * rate — частота тактирования шины I2C.
#
# ПРИМЕЧАНИЕ: адреса ведущего и ведомого устройств должны совпадать. Соедините scl ведущего со scl ведомого, а sda ведущего
# со sda ведомого. Необходимо использовать внешние подтягивающие резисторы. Наконец, оба устройства должны иметь общую землю.
#
# interface = rpc.rpc_i2c_master(slave_addr=0x12, rate=100000)

# Раскомментируйте строку ниже, чтобы настроить OpenMV Cam для управления через SPI.
#
# * cs_pin — вывод выбора ведомого устройства (Slave Select).
# * freq — частота тактирования шины SPI.
# * clk_polarity — уровень тактового сигнала в состоянии простоя (0 или 1).
# * clk_phase — выборка данных по первому (0) или второму (1) фронту тактового сигнала.
#
# ПРИМЕЧАНИЕ: настройки ведущего и ведомого устройств должны совпадать. Соедините CS, SCLK, MOSI, MISO с CS, SCLK, MOSI, MISO соответственно.
# Наконец, оба устройства должны иметь общую землю.
#
# interface = rpc.rpc_spi_master(cs_pin="P3", freq=10000000, clk_polarity=1, clk_phase=0)

# Раскомментируйте строку ниже, чтобы настроить OpenMV Cam для управления через UART.
#
# * baudrate — скорость передачи последовательного порта.
#
# ПРИМЕЧАНИЕ: скорости передачи ведущего и ведомого устройств должны совпадать. Соедините tx ведущего с rx ведомого, а rx ведущего —
# с tx ведомого. Наконец, оба устройства должны иметь общую землю.
#
interface = rpc.rpc_uart_master(baudrate=115200)

##############################################################
# Обработчики обратного вызова
##############################################################


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)  # стандартные пороги для красного цвета
    # thresholds = (30, 100, -64, -8, -32, 32) # стандартные пороги для зелёного цвета
    # thresholds = (0, 30, 0, 64, -128, 0) # стандартные пороги для синего цвета
    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


# Выполнять удалённые функции в цикле. Выберите и раскомментируйте одну из функций ниже.
# Выполнение нескольких функций одновременно может замедлить работу, если камере необходимо менять режимы
# при каждом выполнении.

while True:
    exe_face_detection()  # Лицо должно находиться на расстоянии около 2 футов.
    # exe_qrcode_detection() # Разместите QR-код на расстоянии около 2 футов.
    # exe_all_qrcode_detection() # Разместите QR-код на расстоянии около 2 футов.
    # exe_apriltag_detection()
    # exe_all_apriltag_detection()
    # exe_datamatrix_detection() # Разместите Datamatrix на расстоянии около 2 футов.
    # exe_all_datamatrix_detection() # Разместите Datamatrix на расстоянии около 2 футов.
    # exe_barcode_detection() # Разместите штрихкод на расстоянии около 2 футов.
    # exe_all_barcode_detection() # Разместите штрихкод на расстоянии около 2 футов.
    # exe_color_detection()
    # exe_jpeg_snapshot()

results matching ""

    No results matching ""