Udostępnij za pośrednictwem


Obraz

Ważne

Usługa Databricks zaleca użycie źródła danych pliku binarnego do załadowania danych obrazu do ramki danych Platformy Spark jako nieprzetworzonych bajtów. Zobacz Rozwiązanie referencyjne dla aplikacji obrazów dla zalecanego przepływu pracy do obsługi danych obrazów.

Źródło danych obrazu abstrahuje od szczegółów reprezentacji obrazu i udostępnia standardowy interfejs API do ładowania danych obrazu. Aby odczytać pliki obrazów, określ źródło format danych jako image.

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

Podobne interfejsy API istnieją dla języków Scala, Java i R.

Można zaimportować zagnieżdżonych struktury katalogów (na przykład użyć ścieżki takiej jak /path/to/dir/) i użyć odnajdywania partycji, określając ścieżkę z katalogiem partycji (czyli ścieżką podobną do /path/to/dir/date=2018-01-02/category=automobile).

Struktura obrazu

Pliki obrazów są ładowane jako ramka danych zawierająca jedną kolumnę typu struktury o nazwie image z następującymi polami:

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

gdzie pola są następujące:

  • nChannels: liczba kanałów kolorów. Typowe wartości to 1 dla obrazów w skali szarości, 3 dla obrazów kolorowych (na przykład RGB) i 4 dla obrazów kolorowych z kanałem alfa.

  • mode: flaga całkowita wskazująca sposób interpretowania pola danych. Określa typ danych i kolejność kanału, w których są przechowywane dane. Wartość pola jest oczekiwana (ale nie wymuszana) do mapowania na jeden z typów OpenCV wyświetlanych w poniższej tabeli. Typy OpenCV są definiowane dla 1, 2, 3 lub 4 kanałów i kilka typów danych dla wartości pikseli. Kolejność kanału określa kolejność przechowywania kolorów. Jeśli na przykład masz typowy obraz z trzema kanałami z czerwonymi, niebieskimi i zielonymi składnikami, istnieje sześć możliwych zamówień. Większość bibliotek używa rgb lub BGR. Oczekuje się, że trzy (cztery) typy OpenCV kanału mają być w kolejności BGR(A).

    Mapowanie typu na liczby w openCV (typy danych x liczba kanałów)

    Typ C1 C2 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: dane obrazu przechowywane w formacie binarnym. Dane obrazu są reprezentowane jako tablica 3-wymiarowa z kształtem wymiaru (wysokość, szerokość, nChannels) i wartościami tablicy typu t określonymi przez pole trybu. Tablica jest przechowywana w kolejności głównej wierszy.

Wyświetlanie danych obrazu

Funkcja Databricks display obsługuje wyświetlanie danych obrazu. Zobacz obrazy.

Przykład notesu: odczytywanie i zapisywanie danych w plikach obrazów

W poniższym notesie pokazano, jak odczytywać i zapisywać dane w plikach obrazów.

Notes źródła danych obrazów

Pobierz notes

Ograniczenia źródła danych obrazu

Źródło danych obrazu dekoduje pliki obrazów podczas tworzenia ramki danych Spark, zwiększa rozmiar danych i wprowadza ograniczenia w następujących scenariuszach:

  1. Utrwalanie ramki danych: jeśli chcesz utrwalyć ramkę danych w tabeli delty, aby ułatwić dostęp, należy zachować nieprzetworzone bajty zamiast zdekodowanych danych, aby zaoszczędzić miejsce na dysku.
  2. Przetasowanie partycji: przetasowanie zdekodowanych danych obrazu zajmuje więcej miejsca na dysku i przepustowość sieci, co powoduje wolniejsze mieszanie. Należy opóźnić dekodowanie obrazu tak bardzo, jak to możliwe.
  3. Wybieranie innej metody dekodowania: źródło danych obrazu używa biblioteki we/wy obrazu javax do dekodowania obrazu, co uniemożliwia wybranie innych bibliotek dekodowania obrazów w celu uzyskania lepszej wydajności lub zaimplementowania niestandardowej logiki dekodowania.

Te ograniczenia można uniknąć, używając źródła danych plików binarnych do ładowania danych obrazu i dekodowania tylko w razie potrzeby.