on_disk_basic_frame_differencing.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
#
# Exemplo Básico de Diferença de Quadros
#
# Nota: Você precisará de um cartão SD para executar este exemplo.
#
# Este exemplo demonstra o uso de diferença de quadros na sua OpenMV Cam. É
# chamado de diferença de quadros básica porque não há atualização da imagem de fundo.
# Assim, conforme o tempo passa, a imagem de fundo pode mudar e causar problemas.
import csi
import os
import time
TRIGGER_THRESHOLD = 5
csi0 = csi.CSI()
csi0.reset() # Reinicia e inicializa o sensor.
csi0.pixformat(csi.RGB565) # ou csi.RGB565
csi0.framesize(csi.QVGA) # ou csi.QQVGA (ou outras)
csi0.snapshot(time=2000) # Aguarda as novas configurações fazerem efeito.
csi0.auto_whitebal(False) # Desativa o balanço de branco.
clock = time.clock() # Rastreia FPS.
if "temp" not in os.listdir():
os.mkdir("temp") # Cria um diretório temporário
print("About to save background image...")
csi0.snapshot(time=2000) # Dá tempo para o usuário se preparar.
csi0.snapshot().save("temp/bg.bmp")
print("Saved background image - Now frame differencing!")
while True:
clock.tick() # Rastreia os milissegundos decorridos entre snapshots().
img = csi0.snapshot() # Tira uma foto e retorna a imagem.
# Substitui a imagem pela diferença de quadros "abs(NEW-OLD)".
img.difference("temp/bg.bmp")
hist = img.get_histogram()
# O código abaixo funciona comparando o valor do percentil 99 (ou seja, o
# valor máximo não-outlier) com o valor do percentil 90 (ou seja, um valor
# não-máximo). A diferença entre os dois valores aumenta conforme a imagem
# de diferença mostra mais pixels mudando.
diff = hist.get_percentile(0.99).l_value - hist.get_percentile(0.90).l_value
triggered = diff > TRIGGER_THRESHOLD
print(clock.fps(), triggered) # Nota: Sua OpenMV Cam roda cerca de metade da velocidade enquanto
# conectada ao seu computador. O FPS deve aumentar após a desconexão.