automatic_grayscale_color_tracking.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 suivi de couleur automatique en niveaux de gris
#
# Cet exemple montre le suivi automatique d'une seule couleur en niveaux de gris avec l'OpenMV Cam.

import csi
import time

print("Letting auto algorithms run. Don't put anything in front of the camera!")

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
csi0.auto_gain(False)  # doit être désactivé pour le suivi de couleur
csi0.auto_whitebal(False)  # doit être désactivé pour le suivi de couleur
clock = time.clock()

# Capture les seuils de couleur pour ce qui se trouvait au centre de l'image.
r = [(320 // 2) - (50 // 2), (240 // 2) - (50 // 2), 50, 50]  # Centre 50x50 du QVGA.

print(
    "Auto algorithms done. Hold the object you want to track in front of the camera in the box."
)
print(
    "MAKE SURE THE COLOR OF THE OBJECT YOU WANT TO TRACK IS FULLY ENCLOSED BY THE BOX!"
)
for i in range(60):
    img = csi0.snapshot()
    img.draw_rectangle(r)

print("Learning thresholds...")
threshold = [128, 128]  # Valeurs médianes de niveaux de gris.
for i in range(60):
    img = csi0.snapshot()
    hist = img.get_histogram(roi=r)
    lo = hist.get_percentile(
        0.01
    )  # Obtient la CDF de l'histogramme à la plage de 1% (AJUSTER SI NÉCESSAIRE) !
    hi = hist.get_percentile(
        0.99
    )  # Obtient la CDF de l'histogramme à la plage de 99% (AJUSTER SI NÉCESSAIRE) !
    # Moyenne des valeurs de percentile.
    threshold[0] = (threshold[0] + lo.value) // 2
    threshold[1] = (threshold[1] + hi.value) // 2
    for blob in img.find_blobs(
        [threshold], pixels_threshold=100, area_threshold=100, merge=True, margin=10
    ):
        img.draw_detection(blob)
        img.draw_rectangle(r)

print("Thresholds learned...")
print("Tracking colors...")

while True:
    clock.tick()
    img = csi0.snapshot()
    for blob in img.find_blobs(
        [threshold], pixels_threshold=100, area_threshold=100, merge=True, margin=10
    ):
        img.draw_detection(blob)
    print(clock.fps())

results matching ""

    No results matching ""