質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1207閲覧

Pythonで360°画像のJPGから緯度経度情報を得たい

furuit

総合スコア19

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/02/09 12:17

編集2022/02/09 17:08

前提

プログラミング初心者の学生です

やりたいこと

Pythonで360°画像のJPGから緯度経度情報を抜き出したいです
このサイトを参考に(https://news.mynavi.jp/techplus/article/zeropython-42/)
コードを実行しました

Python

1from PIL import Image 2import PIL.ExifTags as ExifTags 3 4def get_gps(fname): 5 # 画像ファイルを開く --- (*1) 6 im = Image.open(fname) 7 # EXIF情報を辞書型で得る 8 exif = { 9 ExifTags.TAGS[k]: v 10 for k, v in im._getexif().items() 11 if k in ExifTags.TAGS 12 } 13 # GPS情報を得る --- (*2) 14 gps_tags = exif["GPSInfo"] 15 gps = { 16 ExifTags.GPSTAGS.get(t, t): gps_tags[t] 17 for t in gps_tags 18 } 19 # 緯度経度情報を得る --- (*3) 20 def conv_deg(v): 21 # 分数を度に変換 22 d = float(v[0][0]) / float(v[0][1]) 23 m = float(v[1][0]) / float(v[1][1]) 24 s = float(v[2][0]) / float(v[2][1]) 25 return d + (m / 60.0) + (s / 3600.0) 26 lat = conv_deg(gps["GPSLatitude"]) 27 lat_ref = gps["GPSLatitudeRef"] 28 if lat_ref != "N": lat = 0 - lat 29 lon = conv_deg(gps["GPSLongitude"]) 30 lon_ref = gps["GPSLongitudeRef"] 31 if lon_ref != "E": lon = 0 - lon 32 return lat, lon 33 34if __name__ == "__main__": 35 lat, lon = get_gps("test.JPG") 36 print(lat, lon)

わからないこと

EXIF情報は抜き出せますが,緯度経度に変換しようとするとエラーになり困っています
これは,もともと位置情報がついていないということなのでしょうか?
解決策を教えていただけると嬉しいです

エラー

Traceback (most recent call last): File "get_exif.py", line 35, in <module> lat, lon = get_gps("test.JPG") File "get_exif.py", line 26, in get_gps lat = conv_deg(gps["GPSLatitude"]) KeyError: 'GPSLatitude'

EXIF情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2022/02/09 12:45

変数gpsにキー"GPSLatitude"が無いっていわれてますね。 gpsをprintしてみては?
guest

回答2

0

ベストアンサー

Exif 情報の GPSInfo タグの ID は 34853 になります。

python

1>>> import PIL.ExifTags as ExifTags 2>>> [(k, v) for k, v in ExifTags.TAGS.items() if v == 'GPSInfo'] 3[(34853, 'GPSInfo')]

質問文に掲示されている Exif 情報で該当するものは以下です。

python

134853 {0: b'\x02\x03\x00\x00', 16: 'M', 17: 13.85}

この辞書インスタンスのキーに対応するタグは以下です。

python

1>>> [(k, v) for k, v in ExifTags.GPSTAGS.items() if k in (0, 16, 17)] 2[(0, 'GPSVersionID'), (16, 'GPSImgDirectionRef'), (17, 'GPSImgDirection')]

これは,もともと位置情報がついていないということなのでしょうか?

はい、そうなります。

追記

カメラ本体のシャッターボタンで撮影した画像にGPS情報が記録されていません。[RICOH THETA Z1]

撮影 [RICOH THETA Z1]
カメラ本体のシャッターボタンで撮影した画像にGPS情報が記録されていません。

下記のいずれかの状況で撮影を行った場合、GPS情報は画像ファイルに記録されません。

  • 無線LAN接続が解除されたとき
  • Bluetooth接続が解除されたとき
  • カメラの電源をオフから起動したとき

再度、スマートフォンと接続して撮影を行ってください。

投稿2022/02/09 13:12

編集2022/02/09 14:14
melian

総合スコア19809

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  • これは,もともと位置情報がついていないということなのでしょうか?

そうです。

  • 解決策を教えていただけると嬉しいです

こういう問題を自力で解決できるようにならなければ、社会に出たときに役に立たないですよ。
確実に位置情報がついている画像といえば、位置情報をONにして撮影したスマホの写真だというのは常識ですね。
スマホで写真を撮って、それをこのプログラムにかけて、位置情報が出てくるかどうかを試すというテスト方法を思いつくようになってください。

なお位置情報のある画像を入力したとき、質問にあるコードは

Python

1 d = float(v[0][0]) / float(v[0][1])

のところでエラーになります。
原因はご自身で考えてください。
自分で解決できるようにならなければ社会に出たあとでなんの役にも立たないですよ。

投稿2022/02/09 13:27

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問