/ Scala e Spark: como passar por uma imagem? - scala, apache-spark

Scala e Spark: como passar por uma imagem? - scala, apache-spark

Eu tenho alguns arquivos binários que são imagens e eugostaria de seguir em frente, distribuindo os pixels: cada nó do meu cluster deve obter o RGB de um grupo diferente de pixels que os de outro nó e armazená-los em uma coleção Scala.

estou usando SparkContext::binaryFiles mas não sei como tornar o Apache Spark "capaz de entender" que estou usando uma imagem, que gostaria de percorrer seus pixels usando a distribuição e que gostaria de obter os valores RGB. Você poderia me ajudar a fazer isso, por favor?

Respostas:

5 para resposta № 1

O Spark 2.3 adicionou suporte para analisar imagens. Você pode ler imagens e obter metadados e dados de imagem como este:

import org.apache.spark.ml.image.ImageSchema._
import java.nio.file.Paths

val images = readImages("path/to/images")

images.foreach { rrow =>
val row = rrow.getAs[Row](0)
val filename = Paths.get(getOrigin(row)).getFileName().toString()
val imageData = getData(row)
val height = getHeight(row)
val width = getWidth(row)

println(s"${height}x${width}")
}

Você pode encontrar mais algumas informações Aqui


2 para resposta № 2

Se você possui os arquivos binários, basta convertê-los em uma matriz de números inteiros (que são os valores RGB). Leia como converter imagens em array de RGB em scala aqui:

http://otfried.org/scala/image.html

Aqui está um exemplo feito em Python:

Spark usando imagens de leitura do PySpark