Je suis allé en Italie pour un jeune marié il y a quelque temps. J'ai fait une visite hebdomadaire de Milan, Venise, Florence, Pise, Rome et Pompéi, et quand j'ai remarqué, j'ai pris environ 1000 photos. J'avais un peu de temps libre et faisais environ 10 000 pas chaque jour, donc je voulais garder un enregistrement comprenant l'itinéraire, alors j'ai fait un album de cartes ...!
L'image entière ressemble à ceci. J'utilise la carte d'OpenStreetMap.
De là, par exemple, si vous zoomez sur Venise, vous pouvez voir l'itinéraire à pied comme celui-ci. Il est codé en couleur en fonction de la date, et depuis que j'ai passé la nuit à Venise, il existe un itinéraire bicolore. Et le marqueur est le point où vous avez pris la photo, cliquez dessus et l'image apparaîtra.
Ceci est la photo originale. Le marqueur est également sur la voie navigable car il a été pris lors de la visite en gondole. J'attendais avec impatience Venise comme lieu sacré pour "ARIA", mais c'était une ville d'eau bien plus fantastique que ce à quoi je m'attendais. Je ferai de mon mieux pour le recommander.
C'est la Place d'Espagne, qui est le lieu sacré du chef-d'œuvre intemporel "Vacances romaines". Je l'ai regardé sur le vol pour aller (Oi)
C'est un chat qui veille sur Pompéi qui a été détruit par l'éruption. Les chats apparaissent ici. C'était un chat. Ravi de vous rencontrer
Je l'ai partagé avec ma famille et mes amis, et c'était génial car j'ai pu partager mes souvenirs tout en suivant le voyage et en montrant des photos. J'ai traversé cette rue, j'ai dîné dans ce magasin et j'ai couru cette route, et c'était juste avant l'heure de la réunion. Cependant, depuis que j'ai partagé le fichier HTML qui a exporté le notebook Jupyter Lab tel quel, les ingénieurs ont commencé à lire le code Python, et il y avait un problème qu'il était difficile d'entendre cette histoire w
J'ai écrit environ 50 lignes de code Python sur JupyterLab et j'ai fait ce qui suit: Je commence à utiliser Folium pour les affaires, mais c'est très simple.
Je peux passer une balise d'image au marqueur Folium, mais il semble que je ne peux pas faire référence au fichier local, donc j'utilise l'astuce de l'encodage en Base64. Grâce à cela, il est facile à partager car il peut générer un seul fichier HTML indépendant, mais même s'il est réduit, il contient environ 1000 images, il est donc devenu un fichier HTML d'environ 100 Mo ... … 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
Découvrons le lieu de prise de vue à partir des informations GPS intégrées dans la photo avec Python | My Navi News Traitement avec PIL en tenant compte de la balise d'orientation EXIF | Qiita View image on popup | python-visualization/folium
Recommended Posts