Google Earth EngineからのデータをNumpy配列としてロードするために使用する関数がエラーを起こす
Google Earth EngineをPython APIにて書いています。
Earth Engine とTensorFlowを併用するためのコードを練習しています。
書いているコード
Python
1# 認証(成功) 2!pip install earthengine-api 3!earthengine authenticate 4 5#ライブラリのインポート(成功) 6import ee 7from IPython import display 8import math 9from matplotlib import pyplot 10import numpy 11from osgeo import gdal 12import tempfile 13import tensorflow as tf 14import urllib 15import zipfile 16 17#Earth Engineクライアントの初期化(成功) 18ee.Initialize() 19 20# 対応するFmaskデータと共にLandsatイメージのDL(成功) 21input_image = ee.Image('LANDSAT/LT5_L1T_TOA_FMASK/LT50100551998003CPE00') 22 23#Earth Engine画像のサムネイルを簡単に印刷できるようにするためのヘルパー関数を定義(成功) 24def print_image(image): 25 display.display(display.Image(ee.data.getThumbnail({ 26 'image': image.serialize(), 27 'dimensions': '360', 28 }))) 29 30# ヘルパー関数を定義して画像とデータを視覚化(成功) 31print_image(input_image.visualize( 32 bands=['B3', 'B2', 'B1'], 33 min=0, 34 max=0.3, 35)) 36print_image(input_image.visualize( 37 bands=['fmask'], 38 min=0, 39 max=4, 40 palette=['808080', '0000C0', '404040', '00FFFF', 'FFFFFF'], 41)) 42 43# Earth Engineから生データを numpy配列としてダウンロードするためのヘルパー関数をいくつか定義(成功) 44def download_tif(image, scale): 45 url = ee.data.makeDownloadUrl(ee.data.getDownloadId({ 46 'image': image.serialize(), 47 'scale': '%d' % scale, 48 'filePerBand': 'false', 49 'name': 'data', 50 })) 51 local_zip, headers = urllib.urlretrieve(url) 52 with zipfile.ZipFile(local_zip) as local_zipfile: 53 return local_zipfile.extract('data.tif', tempfile.mkdtemp()) 54 55def load_image(image, scale): 56 local_tif_filename = download_tif(image, scale) 57 dataset = gdal.Open(local_tif_filename, gdal.GA_ReadOnly) 58 bands = [dataset.GetRasterBand(i + 1).ReadAsArray() for i in range(dataset.RasterCount)] 59 return numpy.stack(bands, 2) 60 61# 有効なデータバンドを含むEarth Engineからのデータを numpy配列としてロードするためにこの関数を使用する、 またFmaskバンドをバイナリクラウドラベルに変換します(すなわち fmask = 4)(ここで失敗) 62mask = input_image.mask().reduce('min') 63data = load_image(input_image.addBands(mask), scale=240) 64data[:,:,7] = numpy.equal(data[:,:,7], 4)
エラーメッセージ
何を怒られたのかよくわかりません。何かがインストール不足でしょうか?
AttributeError Traceback (most recent call last) <ipython-input-9-935423fdb1d9> in <module>() 1 mask = input_image.mask().reduce('min') ----> 2 data = load_image(input_image.addBands(mask), scale=240) 3 data[:,:,7] = numpy.equal(data[:,:,7], 4) <ipython-input-8-6a10eb8a20f9> in load_image(image, scale) 11 12 def load_image(image, scale): ---> 13 local_tif_filename = download_tif(image, scale) 14 dataset = gdal.Open(local_tif_filename, gdal.GA_ReadOnly) 15 bands = [dataset.GetRasterBand(i + 1).ReadAsArray() for i in range(dataset.RasterCount)] <ipython-input-8-6a10eb8a20f9> in download_tif(image, scale) 6 'name': 'data', 7 })) ----> 8 local_zip, headers = urllib.urlretrieve(url) 9 with zipfile.ZipFile(local_zip) as local_zipfile: 10 return local_zipfile.extract('data.tif', tempfile.mkdtemp()) AttributeError: module 'urllib' has no attribute 'urlretrieve'
該当のソースコード
上記コードの動かない部分だけを抜粋します。
Python
1mask = input_image.mask().reduce('min') 2data = load_image(input_image.addBands(mask), scale=240) 3data[:,:,7] = numpy.equal(data[:,:,7], 4)
試したこと
ライブラリをインポートした際に、
Python
1import urllib
というコードを
Python
1import urllib.request
としてみたのですが、ダメでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/03/03 01:14