Jupyter上で,Scalaで画像データを表示する

ScalaをJupyter上で使うノウハウを蓄積したい

Scalaコンパイル型の言語ですが,REPLが使えるのでインタプリタ的に開発ができて便利です.
なのでサーバコンソール上でも十分な開発ができるのですが,Jupyterを導入することでさらに便利になります.
Scala/SparkのJupterカーネル「Almond」の導入 - なぜか数学者にはワイン好きが多い
ノートブックとして作業履歴や実行結果を記録できることも便利なのですが,画像データなんかを扱う場合,コンソールだと表示できない画像を表示できるのが便利です.
ところがScalaあるあるで,ドキュメントが少ないのでJupyter-Almond-Scalaで画像データを表示したりする方法がよく分からないです.そこでブログを書いてみるって感じです.

almond上でscalaノートブックを開く

まず,こちらの通りに,ノートブックを開いて頂きたい.

Jupyter labをインストールしてScalaをSparkで使う
情報処理学会 第83回全国大会 - なぜか数学者にはワイン好きが多い

ノートブック上でファイル保存されている画像データを読み込む

画像ファイルを表示するapiは準備されていて,

Image.fromFile("ここに画像ファイルのパスを書く")

これで表示できます.Imageはalmondの内蔵クラスなので,importしたりライブラリを持ってくる必要は無いです.
こんな感じ
f:id:tullio:20210321030208p:plain
もうちょいカッコよく表示するためには,例えばこんなメソッドを定義するのが良いかと思います.

def getImageText(imageFile: String) = 
s"data:image/png;base64,${Image.fromFile(imageFile).data.get("image/png").get}"

こいつを使うと,画像を並べたり色々できると思います.例えばこんな感じ.

Html(s"<table><tr><td><img src=${getImageText("/tmp/image-2-0-219-80.png")}></td><td><img src=${getImageText("/tmp/image-3-3-226-80.png")}></td></tr></table>")

f:id:tullio:20210321031055p:plain
Pythonも良いけど,データ分析はScalaだね!
...と言えそうな記事を書いていきたい笑