sensor_auto_gain_control.py
# Esta obra está licenciada bajo la licencia MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos los derechos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Control automático de ganancia del sensor
#
# Este ejemplo muestra cómo controlar la ganancia del sensor
# usando el algoritmo de control automático de ganancia.
# ¿Cuál es la diferencia entre el control de ganancia y el de exposición?
#
# Bueno, al aumentar el tiempo de exposición de la imagen, se obtiene más
# luz en la cámara. Esto le da la mejor relación señal-ruido. Usted
# en general siempre querrá aumentar el tiempo de exposición... excepto que, al
# aumentar el tiempo de exposición, disminuye la velocidad de fotogramas máxima posible
# y si algo se mueve en la imagen, comenzará a desenfocarse más con un
# tiempo de exposición más alto. El control de ganancia le permite aumentar la salida por
# píxel usando multiplicadores analógicos y digitales... sin embargo, también amplifica
# el ruido. Por lo tanto, es mejor dejar que la exposición aumente tanto como sea posible
# y luego usar el control de ganancia para compensar el resto.
# Podemos lograr lo anterior estableciendo un límite máximo de ganancia en el algoritmo
# de control automático de ganancia. Una vez establecido, el algoritmo tendrá que
# aumentar el tiempo de exposición para satisfacer cualquier necesidad de ganancia en lugar de usar la ganancia
# para hacerlo. Sin embargo, esto tiene el costo de que el tiempo de exposición varíe
# más cuando cambia la iluminación, en lugar de mantener la exposición constante y
# cambiar la ganancia.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # Restablecer e inicializar el sensor.
csi0.pixformat(csi.RGB565) # Establecer el formato de píxel a RGB565 (o GRAYSCALE)
csi0.framesize(csi.QVGA) # Establecer el tamaño de fotograma a QVGA (320x240)
# El límite de ganancia en dB alcanza un máximo de aproximadamente 24 dB para el sensor OV7725.
csi0.auto_gain(True, gain_db_ceiling=16.0) # Ganancia predeterminada.
# ¡Nota! Si establece el límite de ganancia demasiado bajo sin ajustar el valor objetivo
# del control de exposición, obtendrá mucha oscilación por parte del control de
# exposición si está activado.
csi0.snapshot(time=2000) # Esperar a que los ajustes surtan efecto.
clock = time.clock() # Crear un objeto clock para registrar los FPS.
while True:
clock.tick() # Actualizar el reloj de FPS.
img = csi0.snapshot() # Tomar una foto y devolver la imagen.
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)