Condividi tramite


Immagine

Importante

Databricks consiglia di usare l'origine dati file binario per caricare i dati dell'immagine nel DataFrame Spark come byte non elaborati. Per il flusso di lavoro consigliato per gestire i dati delle immagini, vedere Soluzione di riferimento per le applicazioni di immagini.

L'origine dati dell'immagine crea un riepilogo dai dettagli delle rappresentazioni delle immagini e fornisce un'API standard per caricare i dati dell'immagine. Per leggere i file di immagine, specificare l'origine dati format come image.

df = spark.read.format("image").load("<path-to-image-data>")

Esistono API simili per Scala, Java e R.

È possibile importare una struttura di directory annidata (ad esempio, utilizzare un percorso come /path/to/dir/) ed è possibile utilizzare l'individuazione partition specificando un percorso con una directory partition, ovvero un percorso come /path/to/dir/date=2018-01-02/category=automobile.

Struttura dell'immagine

I file di immagine vengono caricati come dataframe contenenti un singolo column di tipo struct denominato image con i campi seguenti:

image: struct containing all the image data
  |-- origin: string representing the source URI
  |-- height: integer, image height in pixels
  |-- width: integer, image width in pixels
  |-- nChannels
  |-- mode
  |-- data

where i campi sono:

  • nChannels: numero di canali colore. Le values tipiche sono 1 per le immagini in scala di grigio, 3 per le immagini colorate (ad esempio RGB) e 4 per le immagini colorate con canale alfa.

  • mode: flag con numero intero che indica come interpretare il campo dati. Specifica il tipo di dati e l'ordine del canale in cui vengono archiviati i dati. Il valore del campo è previsto (anche se non obbligatorio) per eseguire il mapping a uno dei tipi OpenCV visualizzati nella seguente table. I tipi OpenCV sono definiti per 1, 2, 3 o 4 canali e diversi tipi di dati per il pixel values. L'ordine del canale specifica l'ordine in cui vengono archiviati i colori. Ad esempio, se si dispone di un'immagine di tre canali tipica con componenti rosso, blu e verde, sono disponibili sei ordinamenti possibili. La maggior parte delle librerie usa RGB o BGR. È previsto che tre (quattro) tipi OpenCV del canale siano in ordine BGR(A).

    Mappa di abbinamento tra tipo e numeri in OpenCV (tipi di dati x numero di canali)

    Tipo C1 S2 C3 C4
    CV_8U 0 8 16 24
    CV_8S 1 9 17 25
    CV_16U 2 10 18 26
    CV_16S 3 11 19 27
    CV_32U 4 12 20 28
    CV_32S 5 13 21 29
    CV_64F 6 14 22 30
  • data: dati di immagine archiviati in un formato binario. I dati dell'immagine sono rappresentati come matrice tridimensionale con la forma della dimensione (altezza, larghezza, nChannels) e la matrice values di tipo t specificato dal campo modalità. La matrice è archiviata in ordine di riga più grande.

Visualizzare i dati delle immagini

La funzione Databricks display supporta la visualizzazione dei dati dell'immagine. Vedere Immagini.

Esempio di notebook: Leggere e scrivere dati in file di immagine

Il notebook seguente illustra come leggere e scrivere dati in file di immagine.

Notebook dell'origine dati immagine

Get portatile

Limitazioni dell'origine dati dell'immagine

L'origine dati dell'immagine decodifica i file di immagine durante la creazione del DataFrame Spark, aumenta le dimensioni dei dati e introduce limitazioni nei seguenti scenari:

  1. Persistenza del DataFrame: se si desidera persistere il DataFrame in un Delta table per un accesso più semplice, è consigliabile rendere persistenti i Byte non elaborati anziché i dati decodificati per risparmiare spazio su disco.
  2. Ordine casuale delle partizioni: l'ordine casuale dei dati di immagine decodificati richiede più spazio su disco e larghezza di banda di rete, con un rallentamento della sequenza casuale. È consigliabile ritardare la decodifica dell'immagine il più possibile.
  3. Scelta di un altro metodo di decodifica: l'origine dati dell'immagine usa la libreria di I/O immagine di javax per decodificare l'immagine, impedendo così di scegliere altre librerie di decodifica delle immagini per ottenere prestazioni migliori o implementare una logica di decodifica personalizzata.

Queste limitazioni possono essere evitate usando l'origine dati del file binario per caricare i dati di immagine e decodificarli solo in base alle esigenze.