in_memory_advanced_frame_differencing.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 différenciation d'images avancée
#
# Cet exemple illustre l'utilisation de la différenciation d'images avec votre OpenMV Cam. Cet
# exemple est avancé car il effectue une mise à jour de l'arrière-plan pour gérer les
# changements de l'image d'arrière-plan au fil du temps.

import csi
import image
import time

TRIGGER_THRESHOLD = 5

BG_UPDATE_FRAMES = 50  # Nombre d'images avant le mélange.
BG_UPDATE_BLEND = 128  # Intensité du mélange... ([0-255]==[0.0-1.0]).

csi0 = csi.CSI()
csi0.reset()  # Réinitialiser et initialiser le capteur.
csi0.pixformat(csi.RGB565)  # ou csi.RGB565
csi0.framesize(csi.QVGA)  # ou csi.QQVGA (ou autres)
csi0.snapshot(time=2000)  # Laisser les nouveaux réglages prendre effet.
csi0.auto_whitebal(False)  # Désactiver la balance des blancs.
clock = time.clock()  # Suit le FPS.

# Créer un second tampon d'image sur le tas.
extra_fb = image.Image(csi0.width(), csi0.height(), csi0.pixformat())

print("About to save background image...")
csi0.snapshot(time=2000)  # Laisser à l'utilisateur le temps de se préparer.
extra_fb.draw_image(csi0.snapshot())
print("Saved background image - Now frame differencing!")

triggered = False

frame_count = 0
while True:
    clock.tick()  # Suivre les millisecondes écoulées entre les snapshots().
    img = csi0.snapshot()  # Prendre une photo et renvoyer l'image.

    frame_count += 1
    if frame_count > BG_UPDATE_FRAMES:
        frame_count = 0
        # Mélanger la nouvelle image. On utilise 255-alpha ici car on veut
        # mélanger la nouvelle image dans l'arrière-plan. Pas l'arrière-plan dans la
        # nouvelle image, ce qui reviendrait simplement à alpha. Le mélange remplace chaque pixel par
        # ((NEW*(alpha))+(OLD*(255-alpha)))/255. Ainsi, un alpha faible entraîne un
        # faible mélange de la nouvelle image, tandis qu'un alpha élevé entraîne un mélange
        # important de la nouvelle image. Nous devons inverser cela pour cette mise à jour.
        img.blend(extra_fb, alpha=(255 - BG_UPDATE_BLEND))
        extra_fb.draw_image(img)

    # Remplace l'image par l'image de différence "abs(NEW-OLD)".
    img.difference(extra_fb)

    hist = img.get_histogram()
    # Le code ci-dessous fonctionne en comparant la valeur du 99e centile (c.-à-d. la
    # valeur maximale non aberrante) à la valeur du 90e centile (c.-à-d. une valeur
    # non maximale). La différence entre les deux valeurs augmentera à mesure que l'image
    # de différence montre davantage de pixels ayant changé.
    diff = hist.get_percentile(0.99).l_value - hist.get_percentile(0.90).l_value
    triggered = diff > TRIGGER_THRESHOLD

    print(clock.fps(), triggered)  # Remarque : votre OpenMV Cam fonctionne environ deux fois moins vite lorsqu'elle est
    # connectée à votre ordinateur. Le nombre d'images par seconde (FPS) devrait augmenter une fois déconnectée.

results matching ""

    No results matching ""