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].