sensor_auto_gain_control.py
# Este trabalho está licenciado sob a licença MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos os direitos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Controle de Ganho Automático do Sensor
#
# Este exemplo demonstra como controlar o ganho do sensor
# usando o algoritmo de controle automático de ganho.
# Qual é a diferença entre controle de ganho e controle de exposição?
#
# Bem, ao aumentar o tempo de exposição da imagem, você recebe mais
# luz na câmera. Isso oferece a melhor relação sinal-ruído. Você
# geralmente sempre quer aumentar o tempo de exposição... exceto que, quando você
# aumenta o tempo de exposição, diminui a taxa de quadros máxima possível
# e se algo se move na imagem, ele começará a borrar mais com um
# tempo de exposição maior. O controle de ganho permite aumentar a saída por
# pixel usando multiplicadores analógicos e digitais... no entanto, também amplifica
# o ruído. Portanto, é melhor deixar a exposição aumentar o máximo possível
# e depois usar o controle de ganho para compensar o restante.
# Podemos alcançar o exposto acima definindo um teto de ganho no algoritmo
# de controle automático de ganho. Uma vez definido, o algoritmo terá que
# aumentar o tempo de exposição para atender às necessidades de ganho, em vez de usar o ganho
# para isso. No entanto, isso tem o custo de o tempo de exposição variar
# mais quando a iluminação muda, em vez de a exposição ser constante e
# o ganho variar.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # Reinicia e inicializa o sensor.
csi0.pixformat(csi.RGB565) # Define o formato de pixel para RGB565 (ou GRAYSCALE)
csi0.framesize(csi.QVGA) # Define o tamanho do frame para QVGA (320x240)
# O teto de ganho em db chega a cerca de 24 db para o sensor OV7725.
csi0.auto_gain(True, gain_db_ceiling=16.0) # Ganho padrão.
# Nota! Se você definir o teto de ganho baixo demais sem ajustar o valor alvo
# do controle de exposição, você terá bastante oscilação do controle de
# exposição se ele estiver ativado.
csi0.snapshot(time=2000) # Aguarda as configurações fazerem efeito.
clock = time.clock() # Cria um objeto clock para rastrear o FPS.
while True:
clock.tick() # Atualiza o clock de FPS.
img = csi0.snapshot() # Tira uma foto e retorna a imagem.
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)