sensor_auto_gain_control.py
# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Автоматическое управление усилением датчика
#
# В этом примере показано, как управлять усилением датчика
# с помощью алгоритма автоматического управления усилением.
# В чём разница между управлением усилением и экспозицией?
#
# Что ж, увеличивая время экспозиции изображения, вы получаете больше
# света на камере. Это даёт наилучшее отношение сигнал/шум. В целом
# вы всегда хотите увеличивать время экспозиции... за исключением случаев, когда
# увеличение времени экспозиции снижает максимально возможную частоту кадров,
# и если что-то в изображении движется, оно начнёт размываться сильнее при
# более высоком времени экспозиции. Управление усилением позволяет увеличить выходной сигнал на
# пиксель с помощью аналоговых и цифровых множителей... однако это также усиливает
# шум. Поэтому лучше позволить экспозиции увеличиваться как можно больше,
# а затем использовать управление усилением, чтобы компенсировать оставшуюся разницу.
# Этого можно добиться, установив потолок усиления для алгоритма автоматического
# управления усилением. После установки этого значения алгоритму придётся
# увеличивать время экспозиции для достижения требуемого усиления вместо использования усиления
# для этой цели. Однако это приводит к тому, что время экспозиции будет сильнее
# изменяться при изменении освещённости, вместо того чтобы экспозиция оставалась постоянной, а
# усиление изменялось.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # Сброс и инициализация датчика.
csi0.pixformat(csi.RGB565) # Установить формат пикселей RGB565 (или GRAYSCALE)
csi0.framesize(csi.QVGA) # Установить размер кадра QVGA (320x240)
# Потолок усиления в дБ для датчика OV7725 достигает максимум около 24 дБ.
csi0.auto_gain(True, gain_db_ceiling=16.0) # Усиление по умолчанию.
# Внимание! Если вы установите слишком низкий потолок усиления, не скорректировав целевое значение
# управления экспозицией, вы просто получите сильные колебания от
# управления экспозицией, если оно включено.
csi0.snapshot(time=2000) # Подождать, пока настройки вступят в силу.
clock = time.clock() # Создать объект clock для отслеживания FPS.
while True:
clock.tick() # Обновить счётчик FPS.
img = csi0.snapshot() # Сделать снимок и вернуть изображение.
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)