Ich war vor einiger Zeit für ein Brautpaar in Italien. Ich machte eine wöchentliche Tour durch Mailand, Venedig, Florenz, Pisa, Rom und Pompeji, und als ich es bemerkte, machte ich ungefähr 1000 Fotos. Ich hatte etwas Freizeit und machte jeden Tag ungefähr 10.000 Schritte, also wollte ich eine Aufzeichnung einschließlich der Route führen, also machte ich ein Kartenalbum ...!
Das ganze Bild sieht so aus. Ich verwende die Karte von OpenStreetMap.
Wenn Sie beispielsweise Venedig vergrößern, können Sie von hier aus die Wanderroute wie folgt sehen. Es ist je nach Datum farblich gekennzeichnet, und da ich in Venedig übernachtet habe, gibt es eine zweifarbige Route. Und der Marker ist der Punkt, an dem Sie das Bild aufgenommen haben. Klicken Sie darauf und das Bild wird angezeigt.
Dies ist das Originalfoto. Da ich es während der Gondelfahrt genommen habe, befindet sich der Marker auch auf der Wasserstraße. Ich freute mich auf Venedig als heiligen Ort für "ARIA", aber es war eine weitaus fantastischere Stadt des Wassers als ich erwartet hatte. Ich werde mein Bestes geben, um es zu empfehlen.
Dies ist die Spanische Treppe, die der heilige Ort des zeitlosen Meisterwerks "Roman Holiday" ist. Ich habe es auf dem Flug gesehen (Oh
Dies ist eine Katze, die über Pompeji wacht, das durch den Ausbruch zerstört wurde. Katzen erscheinen hier. Es war eine Katze. Freut mich, dich kennenzulernen
Ich teilte es mit meiner Familie und Freunden und es war großartig, weil ich meine Erinnerungen teilen konnte, während ich der Reise folgte und Fotos zeigte. Ich ging durch diese Straße, aß in diesem Laden zu Abend und rannte auf dieser Straße, und es war kurz vor der Besprechungszeit. Da ich jedoch die HTML-Datei freigegeben habe, die das Jupyter Lab-Notizbuch so exportiert hat, wie es ist, haben die Ingenieure begonnen, den Python-Code zu lesen, und es gab ein Problem, dass es schwierig war, diese Geschichte zu hören
Ich habe ungefähr 50 Zeilen Python-Code in JupyterLab geschrieben und Folgendes getan: Ich fange an, Folium für geschäftliche Zwecke zu verwenden, aber es ist sehr einfach.
--Lesen Sie die Bilddatei mit Pillow.
Ich kann ein Bild-Tag an den Folium-Marker übergeben, aber es scheint, dass ich nicht auf die lokale Datei verweisen kann, daher verwende ich den Trick der Codierung in Base64. Dank dessen ist es einfach zu teilen, da es eine einzelne unabhängige HTML-Datei ausgeben kann, aber obwohl es reduziert ist, hat es ungefähr 1000 Bilder, so dass es eine HTML-Datei von ungefähr 100 MB wurde ... … W.
import base64
import folium
import glob
import pandas as pd
from io import BytesIO
from matplotlib import pyplot as plt
from PIL import ExifTags, Image, ImageOps
def to_deg(v, ref, pos):
d = float(v[0][0]) / float(v[0][1])
m = float(v[1][0]) / float(v[1][1])
s = float(v[2][0]) / float(v[2][1])
return (d + (m / 60.0) + (s / 3600.0)) * (1 if ref == pos else -1)
to_trans_methods = {
1: [],
2: [Image.FLIP_LEFT_RIGHT],
3: [Image.ROTATE_180],
4: [Image.FLIP_TOP_BOTTOM],
5: [Image.FLIP_LEFT_RIGHT, Image.ROTATE_90],
6: [Image.ROTATE_270],
7: [Image.FLIP_LEFT_RIGHT, Image.ROTATE_270],
8: [Image.ROTATE_90]
}
files = glob.glob('/path/to/*.jpg')
rows = []
for file in files:
with Image.open(file) as im:
exif = {ExifTags.TAGS[k]: v for k, v in im.getexif().items() if k in ExifTags.TAGS}
if 'GPSInfo' in exif:
gps = {ExifTags.GPSTAGS[k]: v for k, v in exif['GPSInfo'].items() if k in ExifTags.GPSTAGS}
lat = to_deg(gps['GPSLatitude'], gps['GPSLatitudeRef'], 'N')
lon = to_deg(gps['GPSLongitude'], gps['GPSLongitudeRef'], 'E')
im.thumbnail((192, 192))
for method in to_trans_methods[exif.get('Orientation', 1)]:
im = im.transpose(method)
buf = BytesIO()
im.save(buf, format="png")
rows.append([lat, lon, exif['DateTimeOriginal'], base64.b64encode(buf.getvalue()).decode()])
df = pd.DataFrame(rows, columns=['lat', 'lon', 'dt', 'base64'])
df['dt'] = pd.to_datetime(df['dt'], format='%Y:%m:%d %H:%M:%S')
df = df.sort_values('dt')
fmap = folium.Map(location=[df['lat'].mean(), df['lon'].mean()], zoom_start=6)
hsv=[plt.get_cmap('hsv', 12)(i) for i in range(12)]
fmap.add_child(folium.ColorLine(zip(df['lat'], df['lon']), colors=df['dt'].dt.day, colormap=hsv, weight=4))
for _, row in df.iterrows():
fmap.add_child(folium.Marker([row['lat'], row['lon']], popup=f'<img src="data:image/png;base64,{row["base64"]}">'))
fmap
$ python --version
Python 3.7.4
$ pip list | grep -e folium -e jupyter -e matplotlib -e pandas -e Pillow
folium 0.10.1
jupyter-client 5.3.3
jupyter-core 4.5.0
jupyterlab 1.1.4
jupyterlab-server 1.0.6
matplotlib 3.1.2
pandas 1.0.1
Pillow 7.0.0
Ermitteln Sie den Aufnahmeort anhand der in das Foto eingebetteten GPS-Informationen mit Python | My Navi News Verarbeitung mit PIL unter Berücksichtigung des EXIF-Orientierungs-Tags | Qiita View image on popup | python-visualization/folium
Recommended Posts