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.