Perfect pipeline di elaborazione video?

3

Sto lavorando a una pipeline di elaborazione video modulare. Attualmente è presentato come un albero di moduli. Ogni modulo ha una serie di "risultati" e può richiedere dinamicamente i risultati dei dati da altri moduli. Ogni richiesta e risultato sono contrassegnati con ID frame. L'utente richiede una o più "metriche", ovvero i risultati finali, per un set di frame (ogni frame o frame selezionati).

Ad esempio, la parte superiore dell'albero è il lettore video. Quindi, c'è un modulo di rilevamento del bordo della scena, che richiede i frame i-1 e i dal lettore video per generare risultati per il frame i . Esistono moduli per varie informazioni sui frame video: istogrammi, mappe dei bordi, mappe di occlusione, mappe di disparità, ecc. Molti risultati sono condivisi tra i moduli. Alcuni moduli richiedono dati da un singolo fotogramma, alcuni, da un numero fisso di fotogrammi consecutivi; alcuni, data la richiesta di un frame, iniziano a "esplorare" i dati dai frame vicini in entrambe le direzioni - nessuno sa in anticipo, quanti dati avranno bisogno.

Le richieste di dati sono gestite da un servizio centralizzato, che possiede istanze di tutti i moduli e sa, quale modulo produce quali dati. Ha il diritto di memorizzare nella cache i dati per un ulteriore utilizzo da parte di altri moduli o di emetterli (nel caso delle metriche).

Funziona tutto bene in teoria, ma in pratica ho incontrato alcuni problemi. Per quanto tempo dovrebbe la cache contenere le parti dei dati? Se non memorizzo la cache, lo stesso frame verrà letto più volte. Alcune metriche "esplorative" (vedi sopra) potrebbero averne bisogno in seguito. Se metto in cache tutto, allora nel peggiore dei casi l'intero video (o la sua porzione più grande) verrà caricato nella memoria, il che è inaccettabile.

Questa cache è il problema della mia domanda. Ho il pieno controllo delle fonti. I moduli possono comunicare al servizio di cache tutte le informazioni che desiderano su di loro.

La soluzione perfetta non avrebbe mai dovuto generare gli stessi dati due volte e avrebbe mantenuto l'utilizzo della memoria al minimo (sbarazzarsi dei dati il prima possibile). Beh, non mi aspetto di sentire questa soluzione perfetta, ma alcuni schemi, che mi aiuterebbero ad avvicinarmi il più possibile.

    
posta Anton3 04.03.2017 - 19:06
fonte

0 risposte

Leggi altre domande sui tag