AIで衛星画像から土地用途を判別、市の税務職員らチャットGPTで自作…30分の1の費用(読売新聞オンライン) - Yahoo!ニュース
上記の記事を見て、試しにpythonで作ってみた。
時期が違う同じ場所を撮影した衛星写真を比較して変化した部分を可視化するのが主な処理。open cv、numpy 、matplotlib を利用する。すぐ結果が確認できるようjupyter notebook上で実行。変化部分を可視化した画像を最後に保存する。
コード:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 衛星画像を読み込む(image1.pngが新しい、 image2.png が古いものとする)
image1 = cv2.imread('image1.png')
image2 = cv2.imread('image2.png')
# グレースケールに変換
gray1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
# 画像間の差分を計算
diff = cv2.absdiff(gray1, gray2)
# 差分を二値化(閾値を調整可能)
_, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
# 変化した部分を赤色にするためのマスクを作成
mask = np.zeros_like(image1)
mask[thresh != 0] = [0, 0, 255] # 赤色 (BGRで指定)
# 元の画像にマスクを重ねる
marked_image = cv2.addWeighted(image1, 0.7, mask, 0.3, 0)
# 結果画像を別名で保存
output_filename = 'marked_differences.png'
cv2.imwrite(output_filename, marked_image)
print(f"画像が保存されました: {output_filename}")
# 結果を表示
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title('Difference Map')
plt.imshow(diff, cmap='gray')
plt.subplot(1, 2, 2)
plt.title('Marked Differences')
plt.imshow(cv2.cvtColor(marked_image, cv2.COLOR_BGR2RGB))
plt.show()
結果:
結果は以下の通り。テスト用に適した衛星写真を探すのが大変だった。良いサンプル画像がなかなかないので、以下のサービスを使わせてもらった。
近所の公園を表示して現在と過去(1990年以前とだけある)をそれぞれキャプチャ(位置がずれないようにwindowごと取得)した画像をサンプルして用いた。
ちょっとわかりづらいが、拡大すると森の部分は変化していなく、建物があるエリアがほとんど赤い色でマークされているが、新旧どちらにもあるスタジアムエリアも赤い。というか、ほぼ赤色。これはサンプルが良くなかったな。もっとピンポイントにしないとダメだ。閾値をもう少し調整すれば、変化したエリアがより明確に浮かびあがるだろう。まあ遊びでこれ以上やってもしょうがないのでここまで。
自作と外注費の比較
記事によれば、この地図比較システムの開発を外注すると3000万円の見積、自作したら120万円とあった。自作にかかった費用120万円というのは、開発で使用したサーバ代とか機材費だろうか。この記事にある善通寺の担当者の取り組みは素晴らしいと思う。無駄に税金を使って豪華なシステムを組む必要なく業務を効率化できているのは素晴らしいし、自分である程度作ってみれば、後は何が足りないか、どこをプロに任せればよいかも明確になる。ふんわりした要望、要件で外に丸投げするような人は絶滅してほしいと個人的に思う。
ただ、外注開発費の見積もり3000万は、システム開発を生業にしている身としては妥当だと思う。ざっくり見積もりしても、PM/メインPGの単価=150万/月、サブPM/サブPG単価=100万/月として(今時、人月の見積というのも古臭いけど)、
- 要件定義、設計フェーズ ・・・PM 2人月(300万)、サブPM2人月(200万) 計 500万
- 実装フェーズ・・・メインPG4人月(600万)、サブPG 4人月×2名(800万) 計 1800万
- 検証、テストフェーズ・・・PM 2人月(300万)、サブPM2人月(200万) 計 500万
- 営業諸経費・・・200万
- 合計 3000万円也
とまあ、こんなものだろう。ある程度、手戻りとかトラブルも考慮して、多めに見積もるのは開発側の自衛本能(笑)。
PM/メインPGはキャリアの長いシニア層で、どんどん仕事を進められるプロ。サブPM/サブPGは、キャリアの浅いジュニア層で、指示があれば作業を進められる人で、紙の資料作ったり、細かな画面を作ったり、議事録書いたり、テストを実行する人。
もし安く外注するなら、ある程度プロトタイプなりモックアップを自作して、それをもとに仕上げる、みたいなアプローチもありかもしれない。プロトタイプができている時点で基本的な要件がほぼ固まってると見なせるし、要望されるUIや帳票なども見通しがつきやすい。あとはシステムとして安定稼働させるためのバックエンドの設計ぐらいか。
そもそもの開発難易度としては、要件や設計、運用方針にもよるが、webアプリとして実装するか、スタンドアロンのソフトウェア(担当者の端末内だけで動かす)として開発するかで、大きく変わってくる。他のシステムとの連携もあるのとないので全然違うし。
最近はDockerで簡易にWebアプリをあたかもスタンドアロンなアプリとして動かせるので、javaとかvcとかVBでPCアプリとして開発する必然性も薄くなったので、webアプリだと便利なライブラリがたくさん使えるので開発費は安くできる。
まあ、でもChatGPTやcopilotでコーディングして作ったプロトタイプが実用に耐えうるレベルに仕上がっていれば、自作で完結というのはアリ。
世の中、ノーコード/ローコード開発な業務システムが当たり前になっていて、スクラッチで業務システムを組むなんて案件は激減しているはず。salesforceとかkintoneとかSPIRALとか、あるいは昔からあるFileMakerとか、Excel/access/VBAベースでの業務システムなんて無数に開発・運用されているし。