sensor_auto_gain_control.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
#
# Contrôle automatique du gain du capteur
#
# Cet exemple montre comment contrôler le gain du capteur
# à l'aide de l'algorithme de contrôle automatique du gain.
# Quelle est la différence entre le contrôle du gain et celui de l'exposition ?
#
# En augmentant le temps d'exposition de l'image, vous obtenez plus de
# lumière sur la caméra. Cela vous donne le meilleur rapport signal/bruit. Vous
# voulez en général toujours augmenter le temps d'exposition... sauf que, lorsque vous
# augmentez le temps d'exposition, vous diminuez la fréquence d'images maximale possible
# et si quelque chose bouge dans l'image, celle-ci commencera à devenir plus floue avec un
# temps d'exposition plus élevé. Le contrôle du gain permet d'augmenter la sortie par
# pixel à l'aide de multiplicateurs analogiques et numériques... cependant, cela amplifie
# également le bruit. Il est donc préférable de laisser l'exposition augmenter autant que possible
# puis d'utiliser le contrôle du gain pour combler le reste.
# Nous pouvons y parvenir en définissant un plafond de gain sur le contrôle
# automatique de gain. Une fois ce plafond défini, l'algorithme devra
# augmenter le temps d'exposition pour répondre aux besoins de gain plutôt que d'utiliser le gain
# pour cela. Cependant, cela se fait au prix d'une variation plus importante du temps
# d'exposition lors des changements d'éclairage, par rapport à une exposition constante et
# un gain variable.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # Réinitialiser et initialiser le capteur.
csi0.pixformat(csi.RGB565) # Définir le format de pixel sur RGB565 (ou GRAYSCALE)
csi0.framesize(csi.QVGA) # Définir la taille de l'image sur QVGA (320x240)
# Le plafond de gain en dB atteint environ 24 dB pour le capteur OV7725.
csi0.auto_gain(True, gain_db_ceiling=16.0) # Gain par défaut.
# Remarque : si vous définissez un plafond de gain trop bas sans ajuster la valeur cible
# du contrôle d'exposition, vous obtiendrez simplement beaucoup d'oscillations du contrôle
# d'exposition s'il est activé.
csi0.snapshot(time=2000) # Attendre que les réglages prennent effet.
clock = time.clock() # Créer un objet horloge pour suivre le FPS.
while True:
clock.tick() # Mettre à jour l'horloge FPS.
img = csi0.snapshot() # Prendre une photo et renvoyer l'image.
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)