linear_regression.py

# Ce travail est publié sous licence MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tous droits réservés.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemple de régression linéaire
#
# Cet exemple montre comment utiliser la méthode get_regression() sur votre OpenMV Cam
# pour obtenir la régression linéaire d'une ROI. Grâce à cette méthode, vous pouvez facilement construire
# un robot capable de suivre des lignes qui pointent toutes globalement dans la même direction
# mais qui ne sont pas réellement connectées. Utilisez find_blobs() sur des lignes bien
# connectées pour de meilleures options de filtrage et de contrôle.
#
# get_regression() s'exécute en temps O(N^2) sur l'image. Pour que cela reste gérable, elle
# redimensionne par zones la ROI source vers un tampon temporaire avant d'ajuster la ligne ;
# la taille du tampon est configurable via l'argument nommé target_size=(w, h)
# (par défaut (80, 60)). Passez un tuple plus grand pour opérer à une résolution plus élevée.

import csi
import time

THRESHOLD = (0, 100)  # Seuil en niveaux de gris pour les éléments sombres.
BINARY_VISIBLE = True  # Passe binaire d'abord pour voir sur quoi s'exécute la régression linéaire.

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

clock = time.clock()  # de traiter une image parfois.

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

    # Retourne un objet ligne similaire aux objets ligne retournés par find_lines() et
    # find_line_segments(). Vous disposez des attributs x1, y1, x2, y2, length,
    # theta (rotation en degrés), rho et magnitude.
    #
    # magnitude représente la qualité du résultat de la régression linéaire. En général,
    # plus la valeur est grande, meilleur c'est...
    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")
    )

# À propos des valeurs de rho négatives :
#
# Un tuple [theta+0:-rho] est identique à [theta+180:+rho].

results matching ""

    No results matching ""