on_disk_advanced_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 Avançado 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. Este
# exemplo é avançado porque realiza uma atualização da imagem de fundo para lidar com
# mudanças da imagem de fundo ao longo do tempo.

import csi
import os
import time

TRIGGER_THRESHOLD = 5

BG_UPDATE_FRAMES = 50  # Quantos quadros antes de mesclar.
BG_UPDATE_BLEND = 128  # Quanto mesclar... ([0-255]==[0.0-1.0]).

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!")

triggered = False

frame_count = 0
while True:
    clock.tick()  # Rastreia os milissegundos decorridos entre snapshots().
    img = csi0.snapshot()  # Tira uma foto e retorna a imagem.

    frame_count += 1
    if frame_count > BG_UPDATE_FRAMES:
        frame_count = 0
        # Mescla o novo quadro. Estamos usando 255-alpha aqui porque queremos
        # mesclar o novo quadro no fundo. Não o fundo no
        # novo quadro, o que seria apenas alpha. A mesclagem substitui cada pixel por
        # ((NEW*(alpha))+(OLD*(255-alpha)))/255. Assim, um alpha baixo resulta em
        # pouca mesclagem da nova imagem, enquanto um alpha alto resulta em muita
        # mesclagem da nova imagem. Precisamos inverter isso para esta atualização.
        img.blend("temp/bg.bmp", alpha=(255 - BG_UPDATE_BLEND))
        img.save("temp/bg.bmp")

    # 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.

results matching ""

    No results matching ""