æ¬é£èŒã¯å®éã«æ¥åã§åœ¹ç«ã€ããã°ã©ã ãããŒã«ã䜿ã£ãŠæ¥åã®æ¹åã«åãçµãæ§åã玹ä»ããç©èªã§ããç©èªã¯ãã£ã¯ã·ã§ã³ã§ãããäœäžã§ç޹ä»ããããã°ã©ã ã¯å®éã«äœ¿ãããã®ã§ããä¿é·ãšãªã£ãäž»äººå ¬ã®ç°äžåãåŸèŒ©ã®èµã嬢ãããšäžç·ã«æ¥å課é¡ã«åãçµã¿ãŸãã
è¬ - æ¶ããç©ä»¶åç
ä¿é·ã®ç°äžæ°åã¯ãäžå°äŒæ¥ã®äžåç£äŒç€Ÿã§æ°ä»»ã®ä¿é·ãšããŠé 匵ã£ãŠãããããæã圌ãéè¡åšããçµããŠäŒç€Ÿã«å°çãããšããããããšç€Ÿå ãæ ãã ããæ§åã ã£ãã
åã¯æªèšã«æããªãããããã¯ããããããŸãããšããã€ãéãå æ°ããæšæ¶ãããŠããªãã£ã¹ã®ãã¢ãããã£ãã
ããã¯ãããç°äžåããšãå¶æ¥ããŒã ã®åãããæšæ¶ãè¿ãããé¡è²ãæªããä»ã®ã¿ããªãçŠã£ãŠããããã ã£ããã¿ããªãè¡ã£ããæ¥ããããŠãäœãã話ãåã£ãŠããã
å¶æ¥éšã®åããã¯ãåããå°ã幎äžã®ãæ°ã®åªãã倧ç·ã ã£ãã圌ã®é¡ã«ã¯çããçŠããèŠãããã
ãåãããäœãèµ·ãã£ãŠããã§ããïŒã
ãç°äžã倧å€ãªããšã«ãªã£ã¡ãã£ããã ãç©ä»¶å 芧äŒã®ã€ãã³ãçšã«æŽçããŠãã£ãåçããå šéšæ¶ãã¡ãã£ããã ããã
ãããŒïŒïŒã©ãããŠãããªäºãâŠã€ãã³ãã£ãŠããæåŸæ¥ãããªãã§ããïŒã
ãããã¯ã¢ããåã£ãŠãªãã£ããã§ããïŒã
ãæ®å¿µãªãããããã¯ã¢ããããŠããªããã ãä»åã®ã€ãã³ããã¿ããªå¿ãããŠãã
ãã®ãšããæ¢ããŠåãé¿ããŠéãéããããšããæªãã人圱ããã£ããããããã©ãã«ã¡ãŒã«ãŒã®èµããã ãæªåœ¹ä»€å¬¢ãæ°åã£ãŠããããå®ã¯çé¢ç®ãªåœŒå¥³ã
åãåŒã³æ¢ããŠå£°ãæãããšããç§ãäœãããŠããªãããããšãæªããæ§åã§çãããæããã«äœãç¥ã£ãŠããæãã ã
ããªãã»ã©ãåãç¯äººã ãâŠãåã¯åœŒå¥³ã®æè²ä¿ãšããŠè²¬ä»»ãæããã®ã ã£ããå¯ãããšãæªæã¯ãªããã£ããå ±æãã©ã«ãã®ãã¡ã€ã«ãåé€ããŠããŸã£ããšãããããªãšããã ããã
ãã©ãã«ã¯èµ·ããã人ã解決ããã¹ã
ãç°äžåãä»åã®ãã©ãã«ãã©ãã«ãããŠãããªããïŒã
ãã®ãšããæ²¢è°·æ¯åºé·ãåé¡ã«æ°ä»ããŠãã£ãŠããã
ãããã§ãããåã¯ãã°ãèããã
ãåçãæ®åœ±ãã人ãã¡ããããäžåºŠãåçãéããŠæŽçããªãããããåãããææ¡ããã
ãããåããŠåã¯èãããŸãšããã
ãåçã«ã¯GPSæ å ±ãåã蟌ãŸããŠããã§ããããããã䜿ã£ãŠãèªåã§åçãæŽçããããã°ã©ã ãäœãã°ãæéãç¯çŽã§ãããããããŸãããã
沢谷æ¯åºé·ãæåŸ ã®ç®ã§åãèŠãããããã¯ããã¢ã€ãã£ã¢ã ïŒã
åã¯ãèµããã«èšãã
ããã©ãã«ã¯èµ·ããã人ã解決ããã¹ãã ããïŒèµããã仿¥ã®ååŸãŸã§ã«ããã°ã©ã ãäœã£ãŠããã
èµããã¯æªèšãªé¡ãããããç§ã«ããã°ã©ã ãªããŠäœãããããªãã§ããããã
ãä»è©±é¡ã®äŒè©±åAIã®ChatGPTã䜿ãã°ç°¡åã ãããã£ãŠã¿ããããã
ã€ãã³ãã«éã«åã£ããïŒïŒ
èµã¯ãã¶ãã¶åã®ææ¡ã«åŸããããã°ã©ã ãäœæããããšã«ãªã£ãã
ä»å¹Žå€§ããŒã ãèµ·ããããChatGPTããGoogle Bardãªã©ã®äŒè©±åAIã¯ããã 質åã«çããŠãããã ãã§ã¯ãªããããã°ã©ã ã®çæãç©èªã®çæãåŸæãªã®ã ã
æ°æéåŸãæªæŠèŠéã®æ«ãèµããã®äœã£ãããã°ã©ã ã¯ç¡äºã«å®æãããããã䜿ã£ãŠãåçãGPSæ å ±ã«åºã¥ããèªåã§ãã©ã«ãã«æŽçããããšãã§ãããç¡äºã«äœçŸæãã®åçãèªåæŽçãããã®ã ã£ãã
ã€ãã³ãåœæ¥ãæã®å ãäŒå Žãç©ããã«ç §ãããŠãããåãšèµãããäŒå Žã®åä»ã§ã®æ¡å ãšããŠé§ãåºãããã
äŒå Žå ã®åããŒãã«ã«ã¯ãã¢ãã¿ãŒãé 眮ãããèªåæŽçãããåçããããã«æ ãåºãããŠãããå®¶ã®æ§åãæ¬¡ã ãšåããããã衚瀺ãããŠããã
ãããŠãã€ãã³ããå§ãŸããšãããããã®ã客ãããã€ãã³ãã«æ¥å ŽããŠããããã客ããã¯ãç©ä»¶åçãç±å¿ã«èŠãŠãå¶æ¥æ åœãšåè«ãããŠããã
ã€ãã³ããçµãã£ãåŸãåã¯èµã«å£°ãããããããç²ãæ§ã§ãããè¯ãé 匵ã£ãããã
èµã¯é¡ãèµ€ãããŠããããªããšãããåœç¶ãããšçãããããã¯ããšãŠãç©ããç¬é¡ã ã£ãããŸãã§åå€ã®å€ªéœã®ããã«ãã©ãã©ãšèŒããŠããã
å®éã®ããã°ã©ã
ããã§ã¯ãèµãããšäžç·ã«ChatGPTã®åãåããŠäœæããããã°ã©ã ã確èªããŠã¿ãŸãããã
ä»åã¯ãä»äºã®èªååã«åœ¹ç«ã€ãšç°äžåãå§ããããã°ã©ãã³ã°èšèªã®ãPythonãã䜿ãããšã«ããŸãããPythonã«ã€ããŠã¯ãæ¬é£èŒã®å§åйé£èŒããã¡ãã«ãããŸãã
ãŸãã¯ããã¡ãã®Pythonã®Webãµã€ããéããŠã[Downloads > Python 3.x.x]ãã¯ãªãã¯ããŠPythonã®ã€ã³ã¹ããŒã©ãŒãããŠã³ããŒãããŸãããã
ããŠã³ããŒããããã€ã³ã¹ããŒã©ãŒã®æç€ºã«åŸã£ãŠãPythonãã€ã³ã¹ããŒã«ããŸãããã ããäžèšã®ç»åã®éããç»é¢äžéšã«ãã[Add python.exe to PATH]ã«ãã§ãã¯ãå ¥ããŠããã[Install Now]ãã¯ãªãã¯ããŠãã ãããããã«ãã£ãŠãPythonãPowerShellããå©çšã§ããããã«ãªããŸãã
Pythonãã€ã³ã¹ããŒã«ã§ããããããã°ã©ã ãäœæããŠã¿ãŸãããã
ãŸããèµããã¯ã次ã®ãããªæç€ºãChatGPT(ç¡æã§ã䜿ããã¢ãã«GPT-3.5)ã«äžããŸããã
倧éã®åçç»åããããŸãã
GPSæ
å ±å
ã«ããŠãã©ã«ãã«åé¡ããPythonã®ããã°ã©ã ãäœæããŠãã ããã
ãšããããã©ããããŸããããŸãããäœãããã®ãšã©ãŒãåºãããäœãåäœããŸããã
ãã®æç¹ã§ãèµããã¯ãäžåžã®ç°äžåã«æå¥ãèšãã«è¡ã£ãããšã§ãããã
ãããããŸãã¯ã緯床çµåºŠã ãã®æ å ±ãåãåºããŠè¡šç€ºããããã°ã©ã ãäœãããããããŸããã£ãããæ¬¡ã«ãã©ã«ãã«åé¡ããããã°ã©ã ã«æ¹è¯ãããšããäºæ®µã¹ãããã«ããããšãææ¡ãããŸãã
ããã§ããŸãã¯ãç»åãã¡ã€ã«ãã緯床çµåºŠã®æ å ±ãåãåºããŠè¡šç€ºããã ãã®ããã°ã©ã ãäŸé ŒããŸããã以äžã®ãããªããã³ããã§ãã
倧éã®åçç»åããããŸãã
ãããã®åçã«åã蟌ãŸããGPSæ
å ±ãã緯床çµåºŠã衚瀺ããPythonã®ããã°ã©ã ãäœã£ãŠãã ããã
ãããšãããŸãè¡ããŸãããããã¯ã以äžã®ãããªããã°ã©ã ã«ãªãã§ãããã
# å¿
èŠãªã©ã€ãã©ãªãã€ã³ããŒã
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
# æå®ãããã¡ã€ã«åã®ç»åããGPSæ
å ±ãæœåºãã颿°
def extract_gps_info(filename):
try:
# ç»åãéã
image = Image.open(filename)
# ExifããŒã¿ãååŸ
exif_data = image._getexif()
if exif_data:
# ExifããŒã¿ã®åã¿ã°ãšãã®å€ã«ã€ããŠã«ãŒãåŠç
for tag, value in exif_data.items():
tag_name = TAGS.get(tag, tag)
# ã¿ã°ãGPSæ
å ±ã§ããã°ã詳现ãªGPSã¿ã°ãæœåº
if tag_name == "GPSInfo":
gps_info = {}
for gps_tag, gps_value in value.items():
gps_tag_name = GPSTAGS.get(gps_tag, gps_tag)
gps_info[gps_tag_name] = gps_value
return gps_info
except Exception as e:
print(f"Error extracting GPS info from {filename}: {e}")
return None
# GPSæ
å ±ãã緯床ãšçµåºŠãèšç®ããŠè¿ã颿°
def get_lat_lon(gps_info):
if gps_info:
# 緯床ãšçµåºŠã®æ
å ±ãååŸ
lat = gps_info.get("GPSLatitude")
lon = gps_info.get("GPSLongitude")
# åç
§æ¹åïŒå/åãæ±/西ïŒãååŸ
lat_ref = gps_info.get("GPSLatitudeRef", "N")
lon_ref = gps_info.get("GPSLongitudeRef", "E")
if lat and lon:
# 緯床ãšçµåºŠãå鲿°ã®åœ¢åŒã«å€æ
lat = float(lat[0]) + float(lat[1])/60 + float(lat[2])/3600
lon = float(lon[0]) + float(lon[1])/60 + float(lon[2])/3600
# åç·¯ã西çµã®å Žåã¯ç¬Šå·ãå転
if lat_ref == "S":
lat = -lat
if lon_ref == "W":
lon = -lon
return lat, lon
return None
if __name__ == "__main__":
directory = "./input"
import os
# æå®ãããã£ã¬ã¯ããªå
ã®å
šãã¡ã€ã«ã«å¯ŸããŠã«ãŒãåŠç
for filename in os.listdir(directory):
# ãã¡ã€ã«ãJPEGç»åã§ããå Žå
if filename.endswith(".jpg") or filename.endswith(".jpeg"):
file_path = os.path.join(directory, filename)
# GPSæ
å ±ãæœåº
gps_info = extract_gps_info(file_path)
if gps_info:
# 緯床ãšçµåºŠãååŸ
lat_lon = get_lat_lon(gps_info)
if lat_lon:
print(f"{filename:30s}: Latitude = {lat_lon[0]:3.5f}, Longitude = {lat_lon[1]:3.5f}")
else:
print(f"{filename:30s}: GPS information found, but latitude and longitude not available.")
else:
print(f"{filename}: No GPS information found.")
äžèšã®ããã°ã©ã ããshow_gps.pyããšããååã§ä¿åããŸãããããããŠãããã°ã©ã ãé 眮ãããã©ã«ãã«ãinputããšãããã©ã«ããäœããããã«åçãäœæãå ¥ããŠè©ŠããŠã¿ãŸãããã
ããã°ã©ã ãå®è¡ããåã«ãå®è¡ã«å¿ èŠãšãªãã©ã€ãã©ãªPillowãã€ã³ã¹ããŒã«ããŸããWindowsã®PowerShellãèµ·åããŠã以äžã®ã³ãã³ããå®è¡ããŠãå¿ èŠãšãªãã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸãã
pip install pillow
次ãã§ãPythonã®IDLEãèµ·åããŠãä¿åããäžèšã®ããã°ã©ã (show_gps.py)ãèªã¿èŸŒãã§ãç»é¢äžéšã®[Run > Run Module]ãã¯ãªãã¯ããŸãããããšã次ã®ããã«åçã«åã蟌ãŸããGPSã¿ã°ã®å€ãèªã¿åã£ãŠã緯床çµåºŠã®æ å ±ã衚瀺ãããŸãã
ãšããã§ãäžèšã®ç»åã®éè²ã§è¡šç€ºãããæ£ããå®è¡çµæã®äžéšåã«ã¯ãNo module named 'PIL'ããšè¡šç€ºãããŠããŸããããã¯ãPowerShellã§æ£ããPillowã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŠããªãæã«è¡šç€ºããããšã©ãŒã§ããåããšã©ãŒãåºãå Žåã«ã¯ãPillowãã€ã³ã¹ããŒã«ããããã«ããŸãããã
æ£ãããäžèšã®ããã°ã©ã ãåãããªãããã®ç·¯åºŠçµåºŠæ å ±ãçšããŠåçããã©ã«ãåãããããã°ã©ã ãäœã£ãŠã¿ãŸãããã
ChatGPTã«æ¬¡ã®ããã«äŸé ŒããŸãã
äžèšã®ããã°ã©ã ãå
ã«ããŠã緯床çµåºŠã®æ
å ±ãå
ã«ããŠç»åãåé¡ããPythonã®ããã°ã©ã ãäœã£ãŠãã ããã
- 緯床ãšçµåºŠã¯å°æ°ç¹ä»¥äž3äœã§åæšäºå
¥ãããã®ã«ããŠãã ããã
- åé¡å
ã®ãã©ã«ãåã¯ã`緯床_çµåºŠ`ãšããŠãã ããã
ãããšã次ã®ãããªããã°ã©ã ãäœæãããŸããäžèšã®ããã°ã©ã ããbunrui.pyããšããååã§ä¿åããŸãããã
# å¿
èŠãªã©ã€ãã©ãªãã€ã³ããŒã
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
import os
import shutil
# æå®ãããã¡ã€ã«åã®ç»åããGPSæ
å ±ãæœåºãã颿°
def extract_gps_info(filename):
try:
# ç»åãéã
image = Image.open(filename)
# ExifããŒã¿ãååŸ
exif_data = image._getexif()
if exif_data:
# ExifããŒã¿ã®åã¿ã°ãšãã®å€ã«ã€ããŠã«ãŒãåŠç
for tag, value in exif_data.items():
tag_name = TAGS.get(tag, tag)
# ã¿ã°ãGPSæ
å ±ã§ããã°ã詳现ãªGPSã¿ã°ãæœåº
if tag_name == "GPSInfo":
gps_info = {}
for gps_tag, gps_value in value.items():
gps_tag_name = GPSTAGS.get(gps_tag, gps_tag)
gps_info[gps_tag_name] = gps_value
return gps_info
except Exception as e:
print(f"Error extracting GPS info from {filename}: {e}")
return None
# GPSæ
å ±ãã緯床ãšçµåºŠãèšç®ããŠè¿ã颿°
def get_lat_lon(gps_info):
if gps_info:
# 緯床ãšçµåºŠã®æ
å ±ãååŸ
lat = gps_info.get("GPSLatitude")
lon = gps_info.get("GPSLongitude")
# åç
§æ¹åïŒå/åãæ±/西ïŒãååŸ
lat_ref = gps_info.get("GPSLatitudeRef", "N")
lon_ref = gps_info.get("GPSLongitudeRef", "E")
if lat and lon:
# 緯床ãšçµåºŠãå鲿°ã®åœ¢åŒã«å€æ
lat = round(float(lat[0]) + float(lat[1]) / 60 + float(lat[2]) / 3600, 3)
lon = round(float(lon[0]) + float(lon[1]) / 60 + float(lon[2]) / 3600, 3)
# åç·¯ã西çµã®å Žåã¯ç¬Šå·ãå転
if lat_ref == "S":
lat = -lat
if lon_ref == "W":
lon = -lon
return lat, lon
return None
if __name__ == "__main__":
input_directory = "./input"
output_directory = "./output"
# åºåãã£ã¬ã¯ããªãäœæ
if not os.path.exists(output_directory):
os.makedirs(output_directory)
# æå®ãããã£ã¬ã¯ããªå
ã®å
šãã¡ã€ã«ã«å¯ŸããŠã«ãŒãåŠç
for filename in os.listdir(input_directory):
# ãã¡ã€ã«ãJPEGç»åã§ããå Žå
if filename.endswith(".jpg") or filename.endswith(".jpeg"):
file_path = os.path.join(input_directory, filename)
# GPSæ
å ±ãæœåº
gps_info = extract_gps_info(file_path)
if gps_info:
# 緯床ãšçµåºŠãååŸ
lat_lon = get_lat_lon(gps_info)
if lat_lon:
# åºåãã©ã«ãã®ãã¹ãçæ
output_folder = os.path.join(output_directory, f"{lat_lon[0]}_{lat_lon[1]}")
# åºåãã©ã«ããäœæ
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# ç»åãåºåãã©ã«ãã«ã³ããŒ
shutil.copy(file_path, os.path.join(output_folder, filename))
print(f"{filename} moved to {output_folder}")
else:
print(f"{filename}: GPS information found, but latitude and longitude not available.")
else:
print(f"{filename}: No GPS information found.")
ãããŠãæ¹ããŠãPythonã®IDLEã§éããŠããã°ã©ã ã§å®è¡ããŠã¿ãŸããIDLEã§éããããã°ã©ã ã®ç»é¢äžéšã®[Run > Run Module]ãã¯ãªãã¯ããŸãããããšãoutputãšãããã©ã«ããäœæãããåçããã©ã«ãããšã«åé¡ãããŸãã
äœæãããããã°ã©ã ãæ¯ã¹ãŠã¿ããšãå ã»ã©ã®ããã°ã©ã ãã»ãŒåãå 容ã§ããã緯床çµåºŠã®æ å ±ãåŸãåŸã§ãç»åããã©ã«ãã«ã³ããŒããŠãããšãããç°ãªããŸãã
ãªããåœç¶ã§ãããåé¡å¯Ÿè±¡ãšãªãåçç»åã§ãããåçãæ®åœ±ããéã«GPSæ å ±ãåã蟌ãèšå®ã«ããŠããå¿ èŠããããŸãã
ãŸãšã
以äžãä»åã¯ãPythonã䜿ã£ãŠç»åãGPSæ å ±ã«åºã¥ããŠãã©ã«ãåããããšããããã°ã©ã ãäœã£ãŠã¿ãŸããã
話é¡ã®ChatGPTã䜿ãã°ããã£ãšããéã«ããã°ã©ã ã宿ããã®ããšæã£ãæ¹ãå€ããšæããŸãããæå€ã«ãç°¡åã«ã¯ãããªãã±ãŒã¹ãå€ããããŸããåœç¶ãææçã®ChatGPT(ã¢ãã«GPT-4)ã䜿ãã°ãæåãã確çã¯åäžããŸãããããã§ãå®ç§ã§ã¯ãããŸããã
ããã§ã倧ããªããã°ã©ã ãäžåºŠã«äœæãããã®ã§ã¯ãªãããŸãã¯ãç°¡åãªããã°ã©ã ããäœã£ãŠã¿ãŠããã®åŸããããåèã«ãå®éã«äœã£ãŠæ¬²ããããã°ã©ã ããäœãããã«ãšæç€ºãããšãããŸããã確çãé«ããªããŸãããšã©ãŒãåºãå Žåãã©ãããŠãã®ãšã©ãŒãåºãã®ããå°ããŠã¿ãã®ãæå¹ã§ãã
ãšã¯èšããæçµçã«ã¯ãèªåã§ããã°ã©ã ãä¿®æ£ããå¿ èŠããããããããŸãããããã§ããããã°ã©ã ãã©ã®ããã«åãã®ããå°ããããšã§ãäžæã«è§£èª¬ããŠãããŸããå°ãé«åºŠãªããã°ã©ã ãäœãããå Žåã¯ãPythonã®åŠç¿ãããªããããã°ã©ã ã宿ãããã€ããã§è©ŠããŠã¿ãã®ãè¯ãã§ãããã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠãããçŽè¿ã§ã¯ããå®è·µåãã¢ãããã Pythonã«ããã¢ã«ãŽãªãºã ã®æç§æž(ãã€ããåºç)ããã·ãŽããã¯ãã©ã PythonèªååŠçã®æç§æž(ãã€ããåºç)ããããã«äœ¿ãã!æ¥åã§å®è·µã§ãã! Pythonã«ããAIã»æ©æ¢°åŠç¿ã»æ·±å±€åŠç¿ã¢ããªã®ã€ããæ¹ TensorFlow2察å¿(ãœã·ã )ãããã³ã¬ã§ãã£ããåŠã¶Python(ãã€ããåºç)ããªã©ã



