Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Databricks, görüntü verilerini Spark DataFrame'e ham bayt olarak yüklemek için ikili dosya veri kaynağını kullanmanızı önerir. Görüntü verilerini işlemek için önerilen iş akışı için bkz . Görüntü uygulamaları için başvuru çözümü.
Görüntü veri kaynağı, kod çözme yapısı olarak görüntü dosyalarını Spark DataFrames'e yüklemek için standart bir API sağlar ve yükseklik, genişlik, kanal sayısı ve ham piksel verileri gibi görüntü meta verilerine doğrudan erişim sağlar. Öncelikli olarak, piksel verileriyle birlikte yapılandırılmış görüntü alanlarının gerekli olduğu makine öğrenmesi ön işleme işlem hatlarında kullanılır. Azure Databricks, düzenli görüntü dizinleri için bölüm bulma dahil olmak üzere toplu okumalar için görüntü veri kaynağını destekler. Görüntü dosyalarını okumak için veri kaynağını format olarak imagebelirtin.
Prerequisites
Azure Databricks, görüntü veri kaynağını kullanmak için ek yapılandırma gerektirmez.
Options
Görüntü veri kaynağını yapılandırmak için DataFrameReader öğesinin .option() ve .options() yöntemlerini kullanın. Desteklenen seçeneklerin tam listesi için bkz. Spark API seçenekleri başvurusu.
Usage
Aşağıdaki örneklerde Spark DataFrame API'sini kullanarak görüntü dosyalarını yükleme, görüntü meta verisi alanlarını seçme, görüntü küçük resimlerini görüntüleme ve kod çözülen görüntü verilerini Delta tablosuna kaydetme işlemleri gösterilmektedir.
Resim dosyalarını okuma
Görüntü dosyalarını bir DataFrame'e yüklemek için Apache Spark DataFrame API'sini kullanın. Dizin yolu sağlayarak iç içe dizin yapısını içeri aktarabilir ve bölüm dizinine sahip bir yol belirterek bölüm bulma özelliğini kullanabilirsiniz (örneğin, /path/to/dir/date=2018-01-02/category=automobile).
Python
# Read all images from a directory
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)
# Use partition discovery by specifying a partitioned path
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/date=2024-01-01/category=dogs/")
display(df)
Scala
// Read all images from a directory
val df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()
// Use partition discovery by specifying a partitioned path
val partitioned = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/date=2024-01-01/category=dogs/")
partitioned.show()
SQL
-- Read all images from a directory
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'image'
)
Görüntü meta verilerini seçme
Tam piksel verilerini işlemeden görüntü boyutları veya kanal bilgileriyle çalışmak için yapı sütunundan image belirli alanları seçin.
Python
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
metadata = df.select("image.origin", "image.height", "image.width", "image.nChannels")
display(metadata)
Scala
val df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
val metadata = df.select("image.origin", "image.height", "image.width", "image.nChannels")
metadata.show()
SQL
SELECT image.origin, image.height, image.width, image.nChannels FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'image'
)
Görüntü verilerini görüntüleme
Databricks display işlevi, görüntü veri kaynağıyla çalışırken küçük resimleri doğrudan image sütununda görüntüler. Desteklenen görüntü seçenekleri için bkz. Görüntüler .
Python
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)
Scala
val df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'image'
)
Görüntü verilerini Delta tablosuna kaydetme
Görüntü verilerini geri yüklerken okuma performansını geliştirmek için DataFrame'i delta tablosuna kaydedin.
Note
Görüntü veri kaynağı çözülen piksel verilerini depolar ve bu da ham baytlara kıyasla disk kullanımını artırır. Depolama açısından verimli kalıcılık için bunun yerine ikili dosya veri kaynağını kullanın.
Python
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Scala
val df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Çıkış şeması
Görüntü dosyaları, aşağıdaki alanlarla image adlı tek bir yapı türü sütunu içeren bir DataFrame olarak yüklenir:
root
|-- image: struct (nullable = true)
| |-- origin: string (nullable = true)
| |-- height: integer (nullable = false)
| |-- width: integer (nullable = false)
| |-- nChannels: integer (nullable = false)
| |-- mode: integer (nullable = false)
| |-- data: binary (nullable = false)
Aşağıdaki alanlarda görüntü dosyası ve kodu çözülen piksel verileri açıklanmaktadır.
-
origin: Kaynak görüntünün dosya yolu. -
height: Görüntünün piksel cinsinden yüksekliği. -
width: Görüntünün piksel cinsinden genişliği. -
nChannels: Renk kanallarının sayısı. Tipik değerler gri tonlamalı görüntüler için 1, renkli görüntüler için 3 (örneğin RGB) ve alfa kanalı olan renkli görüntüler için 4'tür. -
mode: Veri alanının nasıl yorumlandığını gösteren tamsayı bayrağı. Verilerin depolandığı veri türünü ve kanal sırasını belirtir. Alanın değerinin aşağıdaki tabloda görüntülenen OpenCV türlerinden biriyle eşleneceği beklenir (ancak zorunlu değildir). OpenCV türleri 1, 2, 3 veya 4 kanal için ve piksel değerleri için çeşitli veri türleri için tanımlanır. Kanal sırası, renklerin depolandığı sırayı belirtir. Örneğin, kırmızı, mavi ve yeşil bileşenler içeren tipik bir üç kanal resminiz varsa, altı olası sıralama vardır. Çoğu kitaplık RGB veya BGR kullanır. Üç (dört) kanallı OpenCV türlerinin BGR(A) düzeninde olması beklenir.
OpenCV'deki sayılarla tür eşlemesi (veri türleri x kanal sayısı)
| Tür | 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: İkili biçimde depolanan görüntü verileri. Görüntü verileri, boyut şekli (yükseklik, genişlik, nChannels) ve mod alanı tarafından belirtilen t türündeki dizi değerleriyle 3 boyutlu bir dizi olarak temsil edilir. Dizi, birincil satır sırasına göre depolanır.
Sınırlamalar
Görüntü veri kaynağı, DataFrame oluşturma sırasında görüntü dosyalarının kodunu çözdiğinden, veri boyutunu artırır ve aşağıdaki sınırlamalara sahiptir:
- Kalıcı olarak disk kullanımı: Kodu çözülen görüntü verileri ham baytlardan önemli ölçüde büyüktür. DataFrame'i bir Delta tablosunda kalıcı hale getirmek istiyorsanız, disk alanından tasarruf etmek için kodu çözülen veriler yerine ham baytları depolayın.
- Karıştırma performansı: Çözülen görüntü verilerini karıştırmak için daha fazla disk alanı ve ağ bant genişliği gerekir ve bu da daha yavaş karıştırma işlemlerine neden olur. İşlem hattınızda kod çözme işlemini mümkün olduğunca geciktirin.
- Kod çözme kitaplığı düzeltildi: Görüntü veri kaynağı, görüntülerin kodunu çözmek için javax Görüntü GÇ kitaplığını kullanır ve bu da daha iyi performans veya özel kod çözme mantığı için alternatif kod çözme kitaplıklarını kullanmanızı önler.
Bu sınırlamaları önlemek için, görüntü verilerini yüklemek ve yalnızca gerektiğinde kodunu çözmek için ikili dosya veri kaynağını kullanın.
Ek kaynaklar
- İkili dosyaları okuma: İş yükünüz kodu çözülen bir yapı yerine ham görüntü baytları gerektiriyorsa, ikili dosya veri kaynağı, görüntü veri kaynağının kod çözme ek yükünü ve sınırlamalarını önler.