on_disk_advanced_frame_differencing.py

# Questo lavoro è concesso in licenza MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tutti i diritti riservati.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Esempio avanzato di differenza tra fotogrammi
#
# Nota: per eseguire questo esempio è necessaria una scheda SD.
#
# Questo esempio dimostra l'uso della differenza tra fotogrammi con la OpenMV Cam. Questo
# esempio è avanzato perché esegue un aggiornamento dello sfondo per gestire il
# cambiamento dell'immagine di sfondo nel tempo.

import csi
import os
import time

TRIGGER_THRESHOLD = 5

BG_UPDATE_FRAMES = 50  # Quanti fotogrammi prima della fusione.
BG_UPDATE_BLEND = 128  # Quanto fondere... ([0-255]==[0.0-1.0]).

csi0 = csi.CSI()
csi0.reset()  # Resetta e inizializza il sensore.
csi0.pixformat(csi.RGB565)  # oppure csi.RGB565
csi0.framesize(csi.QVGA)  # oppure csi.QQVGA (o altri)
csi0.snapshot(time=2000)  # Lasciare che le nuove impostazioni abbiano effetto.
csi0.auto_whitebal(False)  # Disattiva il bilanciamento del bianco.
clock = time.clock()  # Traccia gli FPS.

if "temp" not in os.listdir():
    os.mkdir("temp")  # Crea una directory temporanea

print("About to save background image...")
csi0.snapshot(time=2000)  # Dai all'utente il tempo di prepararsi.
csi0.snapshot().save("temp/bg.bmp")
print("Saved background image - Now frame differencing!")

triggered = False

frame_count = 0
while True:
    clock.tick()  # Traccia i millisecondi trascorsi tra le chiamate a snapshot().
    img = csi0.snapshot()  # Scatta una foto e restituisce l'immagine.

    frame_count += 1
    if frame_count > BG_UPDATE_FRAMES:
        frame_count = 0
        # Fonde il nuovo fotogramma. Qui si usa 255-alpha perché si vuole
        # fondere il nuovo fotogramma nello sfondo. Non lo sfondo nel
        # nuovo fotogramma, il che sarebbe semplicemente alpha. La fusione sostituisce ogni pixel con
        # ((NEW*(alpha))+(OLD*(255-alpha)))/255. Quindi, un alpha basso produce
        # una fusione bassa della nuova immagine, mentre un alpha alto produce una fusione alta
        # della nuova immagine. È necessario invertire questo per questo aggiornamento.
        img.blend("temp/bg.bmp", alpha=(255 - BG_UPDATE_BLEND))
        img.save("temp/bg.bmp")

    # Sostituisce l'immagine con la differenza tra fotogrammi "abs(NEW-OLD)".
    img.difference("temp/bg.bmp")

    hist = img.get_histogram()
    # Il codice seguente funziona confrontando il valore del 99° percentile (ad es. il
    # valore massimo non outlier) con il valore del 90° percentile (ad es. un valore
    # non massimo). La differenza tra i due valori aumenterà man mano che la differenza
    # dell'immagine mostra un numero maggiore di pixel cambiati.
    diff = hist.get_percentile(0.99).l_value - hist.get_percentile(0.90).l_value
    triggered = diff > TRIGGER_THRESHOLD

    print(clock.fps(), triggered)  # Nota: la tua OpenMV Cam funziona a circa metà velocità quando
    # è collegata al computer. Il framerate dovrebbe aumentare una volta scollegata.

results matching ""

    No results matching ""