LoginSignup
1
2

More than 3 years have passed since last update.

ESA SNAPのPython APIの起動と仮想環境のJupyter Notebookのカーネルへの設定

Last updated at Posted at 2021-04-09

概要

 ESAから配布されている衛星データ解析ソフトウェアSNAPは無料で利用可能な衛星データ解析ソフトウェアですが、GUIメインでの操作では大量にデータを処理したい場合に課題を抱えていました。そのため、Python APIであるsnappyが提供されています。本記事では、このサイト "Getting Started with SNAP Toolbox in Python"にて紹介されていた方法を基にしてsnappyを起動し、その仮想環境をJupyter Notebookへ設定したいと思います。Jupyter Notebookの設定については、こちらの記事を参考としました。

方法

 SNAPソフトウェア、及びAnaconda3がインストール済みであることが前提条件です。

①Anaconda promptを起動したら、conda create -n snap python=2.7を入力してpython 2.7の仮想環境を作ります。snappyはpython 3.3もしくは3.4でも動くとされていますが、これらのpythonバージョンでの仮想環境の作成が上手くいかなかったため、2.7で実行を行っています。
conda_create.png

追記: ここにsnappyは ”2.7, 3.3 to 3.6に対応してます”と書いてあったので、python 3.6で仮想環境を作ってみたら普通に動きました。SNAPソフトウェアダウンロード時の注意書き(↓)の、python 2.7・3.3・3.4しかサポートされていないとは何だったのか…(困惑) 
pythonVersionSNAPPY.png

②SNAP Command-Lineを起動します。SNAP Command-Lineは、システムを検索することで見つけられると思います。
snap_command_line.png
SNAP Command-Line中に、snappy-conf {path_to_snap_env}\python.exe {path_to_snap_env}\Lib\を入力します。ここでpath_to_snap_envとは、Anacondaフォルダ下にあるsnapフォルダへの絶対パスを示しています。自分の場合はエラーメッセージ(?)がいくつか表示されていましたが、現段階では問題なく動いています。
snap_command_line_spanpyconf.png
③Anaconda Promptにおいてconda activate snapを入力してsnapの仮想環境に移動します。conda install snappyでライブラリをインストールします。
④snappyを利用可能になりました。無事にsnappyをimport出来ています。
snappy_import.png

このままではコードが読みづらく使いにくい為、引き続きJupyter Notebookのカーネルへとsnanppyを起動可能な仮想環境を設定していきます。
①Anacondaとpipを混ぜるとよろしくないらしいので、Window本体のコマンドプロンプトでpip install jupyter notebookを入力してインストールを行います。
②snapの仮想環境に入り、conda install ipykernelを入力して仮想環境へインストールを行います。
③Jupyterへカーネルを追加します。自分は"snap_jupyter_kernel"という名前で追加を行ったので、snap仮想環境のプロンプトへ次の様へ入力を行いました。ipython kernel install --user --name=snap_jupyter_kernel。
④Jupyter notebookを立ち上げて、カーネルに追加されているか確認してみましょう。Jupyter notebookの起動については、conda deactivateでbaseへ戻り、Jupyter-Notebookのコマンドを入力することで行えます。
⑤カーネルが設定されていました!
kernel.png
⑥snappyのimport等も、問題なく行えます。以下の画像は、Jupyter Notebook上でテスト画像コードを動かしてみた結果です。

sampleCode.py
import os
import numpy as np
import matplotlib.pyplot as plt
import snappy
from snappy import ProductIO

path = r'C:\Users\shoki\anaconda3\envs\snap\Lib\snappy\testdata'
filename = 'MER_FRS_L1B_SUBSET.dim'
df = ProductIO.readProduct(os.path.join(path, filename))
band = df.getBand('radiance_3')
w = df.getSceneRasterWidth() 
h = df.getSceneRasterHeight() 
band_data = np.zeros(w * h, np.float32)
band.readPixels(0, 0, w, h, band_data)
band_data.shape = h, w
plt.figure(figsize=(18,10))
plt.imshow(band_data, cmap = plt.cm.binary)
plt.show()

出力例
testOutput.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2