以前、京都の衛星画像を機械学習で解析する記事を書きました。
今回は同じことをChatGPTに頼んでコードを書いてもらいました。
先ずはこのようにChatGPTに入力します。
するとあっという間に以下のような返答が
さらにどのようなことをするか簡単な解説まであります。
しかし、このコードはバグがありました。エラーを何もコメントも付けずにそのままコピーしてみました。
これで変更されたのが以下の点です。
これでできたコードが以下の通りです。切り取り個所など若干の修正は入れてますが、ほとんどChatGPTで書かれたコードです。
import rasterio
import numpy as np
import glob
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# dataフォルダーにあるGeoTIFF画像を全て読み込む
files = glob.glob("data/*.tiff")
images = []
for file in files:
with rasterio.open(file) as src:
images.append(src.read(1))
# x,y地点から高さh、幅wで指定してデータを切り出し
x=5570
y=2083
h=900
w=500
cut_images = []
for image in images:
cut_images.append(image[y:y+h, x:x+w])
# クラスタリングを行う
data = np.concatenate(cut_images)
kmeans = KMeans(n_clusters=10, random_state=0)
kmeans.fit(data.reshape(-1, 1))
# 結果を高さh、幅wの画像で保存する。
labels = kmeans.labels_.reshape(h, w)
plt.imshow(labels, cmap="turbo")
plt.colorbar(ticks=np.arange(10))
plt.savefig("images/clustered_image.png")
どのようにクラスタリングを行うか指定していませんが、ChatGPTはk-meansを選択したようです。
完成した画像はこの通り。色使いなど修正の余地はありますが。京都盆地の画像がしっかりと表示されています。
鴨川デルタ、京都御所、桂川などはっきりと見えて取れますし巨椋近辺の土地利用の違いも出ています。
k-meansは深層学習などではありませんが機械学習の一部で、そのプログラムをAIを使って作れました。
ランドサットデータについて (https://landbrowser.airc.aist.go.jp/landbrowser/index.html)
“ The source data were downloaded from AIST’s LandBrowser, (https://landbrowser.airc.aist.go.jp/landbrowser/). Landsat 7/8 data courtesy of the U.S. Geological Survey.”