linear_regression.py

# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Пример линейной регрессии
#
# Этот пример демонстрирует, как использовать метод get_regression() на вашей камере OpenMV Cam
# для получения линейной регрессии области интереса (ROI). С помощью этого метода вы можете легко построить
# робота, который может отслеживать линии, направленные в целом в одну сторону,
# но фактически не соединённые между собой. Используйте find_blobs() для линий, которые хорошо
# соединены, чтобы получить лучшие возможности фильтрации и контроля.
#
# get_regression() выполняется за время O(N^2) относительно изображения. Чтобы это было управляемо, метод
# масштабирует исходную ROI по площади во временный буфер перед аппроксимацией линии;
# размер буфера настраивается с помощью именованного аргумента target_size=(w, h)
# (по умолчанию (80, 60)). Передайте больший кортеж, чтобы работать с более высоким разрешением.

import csi
import time

THRESHOLD = (0, 100)  # Порог в градациях серого для тёмных объектов.
BINARY_VISIBLE = True  # Сначала бинарный проход, чтобы увидеть, на чём выполняется линейная регрессия.

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)

clock = time.clock()  # иногда для обработки кадра.

while True:
    clock.tick()
    img = csi0.snapshot().binary([THRESHOLD]) if BINARY_VISIBLE else csi0.snapshot()

    # Возвращает объект линии, аналогичный объектам линий, возвращаемым find_lines() и
    # find_line_segments(). Доступны атрибуты x1, y1, x2, y2, length,
    # theta (угол поворота в градусах), rho и magnitude.
    #
    # magnitude показывает, насколько хорошо сработала линейная регрессия. В общем,
    # чем больше значение, тем лучше...
    line = img.get_regression([(255, 255) if BINARY_VISIBLE else THRESHOLD])

    if line:
        img.draw_line(line, color=127)
    print(
        "FPS %f, mag = %s" % (clock.fps(), str(line.magnitude) if (line) else "N/A")
    )

# Об отрицательных значениях rho:
#
# Кортеж [theta+0:-rho] эквивалентен [theta+180:+rho].

results matching ""

    No results matching ""