{"id":1518,"date":"2025-07-10T07:07:11","date_gmt":"2025-07-09T22:07:11","guid":{"rendered":"https:\/\/beeknowledge.co.jp\/?p=1518"},"modified":"2025-07-10T07:07:13","modified_gmt":"2025-07-09T22:07:13","slug":"360%e5%ba%a6%e5%8b%95%e7%94%bbai%e3%82%a2%e3%83%8e%e3%83%86%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3db%e7%ae%a1%e7%90%86%ef%bc%8bgps%e3%83%9e%e3%83%83%e3%83%81%e3%83%b3%e3%82%b0-%e5%ae%9f%e8%b7%b5%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/beeknowledge.co.jp\/?p=1518","title":{"rendered":"360\u5ea6\u52d5\u753bAI\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3DB\u7ba1\u7406\uff0bGPS\u30de\u30c3\u30c1\u30f3\u30b0 \u5b9f\u8df5\u89e3\u8aac"},"content":{"rendered":"<div class=\"veu_autoEyeCatchBox\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/beeknowledge.co.jp\/wp-content\/uploads\/2025\/07\/4uh9mp4uh9mp4.jpg\" class=\"attachment-large size-large wp-post-image\" alt=\"\" srcset=\"https:\/\/beeknowledge.co.jp\/wp-content\/uploads\/2025\/07\/4uh9mp4uh9mp4.jpg 1024w, https:\/\/beeknowledge.co.jp\/wp-content\/uploads\/2025\/07\/4uh9mp4uh9mp4-300x300.jpg 300w, https:\/\/beeknowledge.co.jp\/wp-content\/uploads\/2025\/07\/4uh9mp4uh9mp4-150x150.jpg 150w, https:\/\/beeknowledge.co.jp\/wp-content\/uploads\/2025\/07\/4uh9mp4uh9mp4-768x768.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/div>\n<!DOCTYPE html>\n<html lang=\"ja\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>360\u5ea6\u52d5\u753bAI\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u00d7DB\u7ba1\u7406+GPS\u30de\u30c3\u30c1\u30f3\u30b0 \u5b9f\u8df5\u89e3\u8aac<\/title>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <style>\n    body { font-family: \"Noto Sans JP\", Meiryo, sans-serif; background: #f7fafd; color: #233; line-height: 2; max-width: 1200px; margin: 0 auto; padding: 2rem; }\n    h1, h2, h3 { color: #1463a2; }\n    h1 { font-size: 2.3rem; border-bottom: 4px solid #b2defc; margin-bottom: 1.5rem; }\n    h2 { border-bottom: 2px solid #a8d7ee; margin-top: 2.5rem; }\n    h3 { font-size: 1.13rem; margin-top: 1.3rem; }\n    pre, code { background: #eef6fd; border-radius: 5px; padding: .6em 1em; font-size: 1em; overflow-x: auto; }\n    ul { margin-left: 2em; }\n    .box { background: #e1f1fd; border-left: 5px solid #58aee9; margin: 1.5rem 0; padding: 1rem 1.5rem; }\n    .alert { color: #e14242; font-weight: bold; }\n    .footer { color: #667; font-size: .98em; border-top: 1px solid #ccd; margin-top: 3rem; padding-top: 1rem; }\n    .step { color: #135384; font-weight: bold; }\n    .sec { margin-top: 2.5rem; }\n  <\/style>\n<\/head>\n<body>\n\n<p>\n360\u5ea6\u52d5\u753b\u306eAI\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30fb\u30e1\u30bf\u30c7\u30fc\u30bf\u7ba1\u7406\u3092\u3001\u73fe\u5834\u3067\u672c\u5f53\u306b\u201c\u6b62\u307e\u3089\u305a\u306b\u56de\u305b\u308b\u201d\u4ed5\u7d44\u307f\u306b\u3059\u308b\u306b\u306f\u3001\n<b>ffmpeg\/ffprobe\u306b\u3088\u308b\u4e8b\u524d\u30b5\u30fc\u30c1\u30fbGPX\uff08GPS\uff09\u30de\u30c3\u30c1\u30f3\u30b0\u30fbDB\u8a2d\u8a08\u30fb\u5168\u5de5\u7a0b\u81ea\u52d5\u5316<\/b>\u304c\u6b20\u304b\u305b\u307e\u305b\u3093\u3002\n\u3053\u306e\u30da\u30fc\u30b8\u3067\u306f\u3001\u52d5\u753b\u51e6\u7406\uff5eGPS\u4f4d\u7f6e\u30de\u30c3\u30c1\uff5eDB\u767b\u9332\u307e\u3067\u73fe\u5834\u4ed5\u69d8\u3067\u7dcf\u307e\u3068\u3081\u3057\u307e\u3059\u3002\n<\/p>\n\n<h2>1. \u306a\u305cffprobe\uff08ffmpeg\uff09\u304c\u5fc5\u9808\u306a\u306e\u304b<\/h2>\n<ul>\n  <li>ffprobe\u306f\u300c\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u306e\u771f\u306e\u4ed5\u69d8\u300d\uff08fps\u3001\u7dcf\u30d5\u30ec\u30fc\u30e0\u6570\u3001\u9577\u3055\u3001\u30a8\u30f3\u30b3\u30fc\u30c0\u3001EXIF\u65e5\u6642\u3001\u30e1\u30bf\u30c7\u30fc\u30bf\u7b49\uff09\u3092\u53d6\u5f97\u3059\u308b\u552f\u4e00\u306e\u6a19\u6e96\u30c4\u30fc\u30eb<\/li>\n  <li>Python\u304b\u3089\u3082\u547c\u3073\u51fa\u305b\u3066\u81ea\u52d5\u89e3\u6790\u304c\u7c21\u5358<\/li>\n  <li>360\u5ea6\u30ab\u30e1\u30e9\u3084\u30b9\u30de\u30db\u52d5\u753b\u306e\u4e00\u90e8\u306f\u3001\u64ae\u5f71\u4f4d\u7f6e\uff08\u7def\u5ea6\u7d4c\u5ea6\uff09\u3084\u65b9\u4f4d\u3082\u52d5\u753b\u30e1\u30bf\u5185\u306b\u683c\u7d0d\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u3042\u308b<\/li>\n  <li>\u4e8b\u524d\u306b\u300c\u52d5\u753b\u306e\u5b9f\u4ed5\u69d8\u300d\u3092\u5168\u3066\u5438\u3044\u51fa\u3057\u2192DB\u306b\u8a18\u9332\u2192\u30d5\u30ec\u30fc\u30e0\u51e6\u7406\/\u518d\u751f\u6642\u3082\u3053\u306e\u60c5\u5831\u3092\u6b63\u306b\u53c2\u7167\u3001\u304c\u9244\u5247<\/li>\n<\/ul>\n<div class=\"box\">\n<b>\u5b9f\u8df5\u30dd\u30a4\u30f3\u30c8\uff1a<\/b> ffprobe\u3067\u306e\u4e8b\u524d\u30b5\u30fc\u30c1\u304c\u306a\u3051\u308c\u3070\u3001\u5f8c\u3067<br>\n\u300c\u30d5\u30ec\u30fc\u30e0\u6570\u304c\u30ba\u30ec\u308b\u300d\u300c\u518d\u751f\u304c\u98db\u3076\u300d\u300cGPS\u7d10\u4ed8\u3051\u304c\u5931\u6557\u300d\u300cDB\u69cb\u9020\u304c\u58ca\u308c\u308b\u300d\u306a\u3069\u7834\u7dbb\u30ea\u30b9\u30af\u304c\u7206\u5897\u3057\u307e\u3059\u3002\n<\/div>\n\n<h2>2. ffprobe\u306b\u3088\u308b\u52d5\u753b\u30e1\u30bf\u30c7\u30fc\u30bf\u53d6\u5f97\u4f8b\uff08Python\u30b3\u30fc\u30c9\uff09<\/h2>\n<pre><code>import subprocess\nimport json\n\ndef get_video_metadata(video_path):\n    cmd = [\n        'ffprobe', '-v', 'error',\n        '-print_format', 'json',\n        '-show_format', '-show_streams', video_path\n    ]\n    result = subprocess.run(cmd, capture_output=True, text=True)\n    info = json.loads(result.stdout)\n    return info\n\ninfo = get_video_metadata('movie_360.mp4')\nprint(json.dumps(info, indent=2, ensure_ascii=False))\n\n# FPS\u3084duration\u306e\u53d6\u5f97\u4f8b\nfps = eval(info['streams'][0]['r_frame_rate'])   # '30\/1' -> 30\nduration = float(info['format']['duration'])     # \u7dcf\u79d2\u6570\n<\/code><\/pre>\n\n<ul>\n  <li><b>Python\u304b\u3089ffprobe\u3092\u53e9\u304f<\/b>\u3053\u3068\u3067\u3001json\u3067\u5168\u3066\u306e\u60c5\u5831\u304c\u53d6\u308c\u308b<\/li>\n  <li>r_frame_rate\u3084duration\u3067<b>\u6b63\u3057\u3044FPS\u30fb\u9577\u3055<\/b>\u3092\u53b3\u5bc6\u7ba1\u7406<\/li>\n  <li>format[&#8216;tags&#8217;] \u3084 streams[0][&#8216;tags&#8217;] \u306b\u64ae\u5f71\u65e5\u6642\u30fbGPS\u30fb\u65b9\u4f4d\u304c\u5165\u3063\u3066\u3044\u308b\u5834\u5408\u3082\u3042\u308b<\/li>\n<\/ul>\n\n<h2>3. GPX\uff08GPS\u30ed\u30b0\uff09\u3068\u52d5\u753b\u306e\u30de\u30c3\u30c1\u30f3\u30b0<\/h2>\n<ul>\n  <li>\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u3060\u3051\u3067\u306f\u4f4d\u7f6e\u60c5\u5831\u304c\u8db3\u308a\u306a\u3044\u5834\u5408\u3001GPX\uff08XML\u5f62\u5f0f\u306e\u4f4d\u7f6e\u30ed\u30b0\uff09\u3092\u300c\u6642\u523b\u30de\u30c3\u30c1\u30f3\u30b0\u300d\u3067\u4f7f\u3046<\/li>\n  <li>\u52d5\u753b\u306eEXIF\u65e5\u6642\u307e\u305f\u306f\u30d5\u30ec\u30fc\u30e0\u6642\u523b\u3068\u3001GPX\u5185\u306etrack point\uff08trkpt\uff09\u6642\u523b\u3092\u7a81\u5408\u3057\u3066\u7d10\u4ed8\u3051\u308b<\/li>\n  <li>\u7279\u306b\u30c9\u30ed\u30fc\u30f3\u30fb\u8eca\u8f09\u30fb\u30a2\u30a6\u30c8\u30c9\u30a2\u30ab\u30e1\u30e9\u3067\u306f\u5fc5\u9808<\/li>\n<\/ul>\n\n<h3>GPX\u304b\u3089\u6642\u523b\u4ed8\u304d\u7def\u5ea6\u7d4c\u5ea6\u3092\u8aad\u307f\u51fa\u3057\u3001\u6700\u3082\u8fd1\u3044\u3082\u306e\u3092\u691c\u7d22\uff08Python\u4f8b\uff09<\/h3>\n<pre><code>import xml.etree.ElementTree as ET\nfrom datetime import datetime, timezone\n\ndef get_gpx_points(gpx_file):\n    tree = ET.parse(gpx_file)\n    root = tree.getroot()\n    ns = {'gpx': 'http:\/\/www.topografix.com\/GPX\/1\/1'}\n    points = []\n    for trkpt in root.findall('.\/\/gpx:trkpt', ns):\n        lat = float(trkpt.get('lat'))\n        lon = float(trkpt.get('lon'))\n        time_str = trkpt.find('gpx:time', ns).text\n        time_obj = datetime.fromisoformat(time_str.replace('Z', '+00:00'))\n        points.append({'lat': lat, 'lon': lon, 'time': time_obj})\n    return points\n\ndef get_closest_gps(points, target_time):\n    min_diff = None\n    closest = None\n    for pt in points:\n        diff = abs((pt['time'] - target_time).total_seconds())\n        if min_diff is None or diff < min_diff:\n            min_diff = diff\n            closest = pt\n    return closest\n\n# \u4f8b: \u52d5\u753b\u306e1\u30d5\u30ec\u30fc\u30e0\u76ee\u306e\u6642\u523b\u53d6\u5f97\nvideo_time = datetime(2024,7,10,14,22,14, tzinfo=timezone.utc)\npoints = get_gpx_points('track.gpx')\nclosest_gps = get_closest_gps(points, video_time)\nprint(closest_gps)  # {'lat':..., 'lon':..., 'time':...}\n<\/code><\/pre>\n\n<div class=\"box\">\n<b>\u30dd\u30a4\u30f3\u30c8\uff1a<\/b>\n\u52d5\u753b\u306e\u300c\u30d5\u30ec\u30fc\u30e0\u3054\u3068\u306e\u6642\u523b\u300d\u3068\u300cGPX\u306e\u30c8\u30e9\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u300d\u3092\u6700\u77ed\u30de\u30c3\u30c1\u30f3\u30b0\u3057\u3001<br>\n\u5404\u30d5\u30ec\u30fc\u30e0\u306e\u7def\u5ea6\u7d4c\u5ea6\u306b\u6b63\u78ba\u306b\u7d10\u4ed8\u3051\u307e\u3059\u3002\u6642\u523b\u306e\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u88dc\u6b63\u3082\u53b3\u5bc6\u306b\u3002\n<\/div>\n\n<h2>4. DB\u8a2d\u8a08\u4f8b\uff1a\u52d5\u753b\uff0b\u30d5\u30ec\u30fc\u30e0\uff0b\u30a2\u30ce\u30c6\uff0b\u4f4d\u7f6e\u60c5\u5831\u306e\u6b63\u898f\u5316<\/h2>\n<ul>\n  <li><b>VideoMaster<\/b>\uff1a\u52d5\u753bID, \u30d5\u30a1\u30a4\u30eb\u540d, \u64ae\u5f71\u8005, \u958b\u59cb\u6642\u523b, FPS, duration, \u89e3\u50cf\u5ea6, \u30c7\u30d0\u30a4\u30b9\u540d \u306a\u3069<\/li>\n  <li><b>Frame<\/b>\uff1a\u52d5\u753bID, \u30d5\u30ec\u30fc\u30e0\u756a\u53f7, \u30d5\u30ec\u30fc\u30e0\u6642\u523b, \u7def\u5ea6, \u7d4c\u5ea6<\/li>\n  <li><b>Detection<\/b>\uff1a\u30d5\u30ec\u30fc\u30e0ID, \u30af\u30e9\u30b9\u540d, x_e, y_e, score\uff08\u4fe1\u983c\u5ea6\uff09<\/li>\n<\/ul>\n\n<h3>SQLite\u3067\u4f5c\u6210\u3059\u308b\u5834\u5408\uff08\u4f8b\uff09<\/h3>\n<pre><code>import sqlite3\nconn = sqlite3.connect('anno.db')\nconn.execute('''CREATE TABLE IF NOT EXISTS VideoMaster (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    filename TEXT, shooter TEXT, datetime TEXT,\n    fps REAL, duration REAL, width INTEGER, height INTEGER, device TEXT)''')\nconn.execute('''CREATE TABLE IF NOT EXISTS Frame (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    video_id INTEGER, frame_num INTEGER, frame_sec REAL,\n    lat REAL, lon REAL,\n    FOREIGN KEY(video_id) REFERENCES VideoMaster(id))''')\nconn.execute('''CREATE TABLE IF NOT EXISTS Detection (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    frame_id INTEGER, class_name TEXT, x REAL, y REAL, score REAL,\n    FOREIGN KEY(frame_id) REFERENCES Frame(id))''')\nconn.commit()\n<\/code><\/pre>\n\n<h2>5. \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u4f8b\uff1affprobe\u30fbGPX\u30fbDB\u9023\u643a\u307e\u3067<\/h2>\n<ol>\n  <li>ffprobe\u3067\u52d5\u753b\u30e1\u30bf\u60c5\u5831\uff08fps, duration, \u64ae\u5f71\u958b\u59cb\u65e5\u6642, \u89e3\u50cf\u5ea6, \u30c7\u30d0\u30a4\u30b9\uff09\u3092\u53d6\u5f97\u2192DB\u306b\u767b\u9332<\/li>\n  <li>\u52d5\u753b\u3092\u30d5\u30ec\u30fc\u30e0\u5206\u5272\uff08OpenCV, ffmpeg\u7b49\uff09\u3002frame_num\u2192\u6642\u523b\u5909\u63db\u306b\u306ffps\u3068duration\u3092\u4f7f\u3046<\/li>\n  <li>\u5404\u30d5\u30ec\u30fc\u30e0\u306e\u6642\u523b\u304b\u3089GPX\u306etrack point\u3092\u30de\u30c3\u30c1\u30f3\u30b0\u3057\u3001\u7def\u5ea6\u7d4c\u5ea6\u3092\u53d6\u5f97<\/li>\n  <li>AI\u30a2\u30ce\u30c6\uff08YOLO\u7b49\uff09\u306e\u63a8\u8ad6\u70b9\u3092360\u5ea6\u5ea7\u6a19\u306b\u9006\u5909\u63db\u3057\u3001\u30d5\u30ec\u30fc\u30e0\u30fb\u691c\u51fa\u3054\u3068\u306bDB\u4fdd\u5b58<\/li>\n  <li>\u691c\u51fa\u7d50\u679c\u306e\u30de\u30fc\u30b8\uff08DBSCAN\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u7b49\uff09\u3067\u91cd\u8907\u6392\u9664\u3002\u4ee3\u8868\u70b9\u306e\u307fDB\u3078<\/li>\n  <li>\u53ef\u8996\u5316\u3084\u518d\u751f\u6642\u306f\u300c\u6b63\u78ba\u306a\u30d5\u30ec\u30fc\u30e0\u6642\u523b\u3068\u5ea7\u6a19\u30fb\u30af\u30e9\u30b9\u30fb\u4fe1\u983c\u5ea6\u30fb\u7def\u5ea6\u7d4c\u5ea6\u300d\u3067\u7d71\u5408\u8868\u793a<\/li>\n<\/ol>\n\n<h3>\u30d5\u30ec\u30fc\u30e0\u30fbGPS\u30fbDB\u66f8\u304d\u8fbc\u307f\u306e\u30a4\u30e1\u30fc\u30b8\uff08Python\uff09<\/h3>\n<pre><code>\n# \u52d5\u753b\u30fbDB\u30de\u30b9\u30bf\u767b\u9332\uff08\u7701\u7565\uff09\nvideo_id = 1\n\n# \u30d5\u30ec\u30fc\u30e0\u51e6\u7406\u30eb\u30fc\u30d7\nfor frame_num, frame_img in enumerate(frame_imgs):\n    frame_sec = frame_num \/ fps\n    # \u52d5\u753b\u958b\u59cb\u6642\u523b + frame_sec \u2192 \u30d5\u30ec\u30fc\u30e0\u6642\u523b\n    frame_time = video_start_time + timedelta(seconds=frame_sec)\n    gps = get_closest_gps(gpx_points, frame_time)\n    cur = conn.execute(\n      '''INSERT INTO Frame (video_id, frame_num, frame_sec, lat, lon)\n         VALUES (?, ?, ?, ?, ?)''',\n      (video_id, frame_num, frame_sec, gps['lat'], gps['lon']))\n    frame_id = cur.lastrowid\n    # \u5404\u7269\u4f53\u30a2\u30ce\u30c6\uff08x_e, y_e, class, score\uff09\u3082\u30eb\u30fc\u30d7\u3067INSERT\n    for det in detections_in_frame:\n        conn.execute(\n          '''INSERT INTO Detection (frame_id, class_name, x, y, score)\n             VALUES (?, ?, ?, ?, ?)''',\n          (frame_id, det[\"class\"], det[\"x_e\"], det[\"y_e\"], det[\"score\"]))\nconn.commit()\n<\/code><\/pre>\n\n<h2>6. \u3088\u304f\u3042\u308b\u8ab2\u984c\u30fb\u514b\u670d\u6cd5<\/h2>\n<ul>\n  <li><b>fps\/duration\/\u30d5\u30ec\u30fc\u30e0\u6570\u304c\u5408\u308f\u305a\u30ba\u30ec\u308b\uff1a<\/b>\n    ffprobe\u3067\u53d6\u5f97\u3057\u305ffps\u30fbduration\u3067\u53b3\u5bc6\u306b\u88dc\u6b63\u3002\u9014\u4e2d\u3067\u30ab\u30c3\u30c8\u3084fps\u5909\u52d5\u304c\u3042\u308b\u52d5\u753b\u306f\u5168\u30d5\u30ec\u30fc\u30e0\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u8a18\u9332<\/li>\n  <li><b>\u7def\u5ea6\u7d4c\u5ea6\u304c\u7121\u3044\u30fb\u30ba\u30ec\u308b\uff1a<\/b>\n    \u52d5\u753b\u30e1\u30bf\u306b\u3042\u308c\u3070ffprobe\u3067\u76f4\u63a5\u53d6\u5f97\u3001\u306a\u3051\u308c\u3070\u64ae\u5f71\u958b\u59cb\u6642\u523b\uff0bGPX\u30de\u30c3\u30c1\u3067\u6700\u5927\u9650\u88dc\u6b63<\/li>\n  <li><b>\u691c\u51fa\u70b9\u306e\u91cd\u8907\/\u30b4\u30df\uff1a<\/b>\n    DBSCAN\u3084\u4fe1\u983c\u5ea6\u30b9\u30b3\u30a2\u306b\u3088\u308b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3002\u95be\u5024\u8abf\u6574\u3082\u91cd\u8981<\/li>\n  <li><b>DB\u80a5\u5927\u5316\uff1a<\/b>\n    \u5197\u9577\u306a\u30c7\u30fc\u30bf\u3084\u4e00\u6642\u89e3\u6790\u7d50\u679c\u306f\u5b9a\u671f\u7684\u306b\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u3002\u4ee3\u8868\u70b9\u306e\u307f\u672c\u30c6\u30fc\u30d6\u30eb\u306b\u683c\u7d0d\u3059\u308b\u69cb\u6210\u3082\u53ef<\/li>\n<\/ul>\n\n<div class=\"box\">\n<b>\u73fe\u5834\u30ce\u30a6\u30cf\u30a6\uff1a<\/b>\n<ul>\n<li>ffprobe\u306b\u3088\u308b\u524d\u51e6\u7406\uff0bGPX\u9023\u643a\uff0bDB\u4fdd\u5b58\u306f\u300c\u904b\u7528\u30c8\u30e9\u30d6\u30eb\u306e9\u5272\u300d\u3092\u672a\u7136\u306b\u9632\u304e\u307e\u3059\u3002<\/li>\n<li>\u3059\u3079\u3066\u306e\u52d5\u753b\u30fb\u30d5\u30ec\u30fc\u30e0\u306b\u300c\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u30fb\u5ea7\u6a19\u30fb\u7def\u5ea6\u7d4c\u5ea6\u300d\u3092\u5fc5\u305a\u6b63\u898f\u5316\u3057\u3066\u6301\u305f\u305b\u308b\u3002<\/li>\n<li>\u4e00\u5ea6DB\u306b\u5165\u308c\u308c\u3070\u3001\u518d\u751f\u30fbGIS\u9023\u643a\u30fbCSV\u62bd\u51fa\u30fbAPI\u914d\u4fe1\u3059\u3079\u3066\u30b9\u30e0\u30fc\u30ba\u306b\u3002<\/li>\n<\/ul>\n<\/div>\n\n<h2>7. \u5fdc\u7528\u30fb\u73fe\u5834\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u4f8b<\/h2>\n<ul>\n  <li>\u5916\u90e8\u30bb\u30f3\u30b5\uff08\u52a0\u901f\u5ea6\u3001\u65b9\u4f4d\u3001\u6c17\u5727\uff09\u3084\u30a4\u30d9\u30f3\u30c8\u30ed\u30b0\u3082\u540c\u6642DB\u5316 \u2192 \u7dcf\u5408\u7684\u306a\u73fe\u5834\u7ba1\u7406\u304c\u53ef\u80fd\u306b<\/li>\n  <li>AI\u63a8\u8ad6\u306e\u4fe1\u983c\u5ea6\u3084\u30e9\u30d9\u30eb\u5206\u985e\u3054\u3068\u306b\u30a2\u30e9\u30fc\u30c8\u30fb\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u30c8\u30ea\u30ac<\/li>\n  <li>GIS\u3084Web\u30d3\u30e5\u30fc\u30ef\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u8868\u793a\u30fb\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u518d\u751f\uff08DB\u304b\u3089\u5ea7\u6a19\u30fb\u6642\u523b\u3092\u9ad8\u901f\u691c\u7d22\uff09<\/li>\n<\/ul>\n\n<h2>8. \u307e\u3068\u3081\uff1a\u3053\u306e\u6d41\u308c\u3092\u201c\u6a19\u6e96\u201d\u306b\u3059\u308b\u7406\u7531<\/h2>\n<p>\n<b>ffprobe\uff0bGPX\uff0bDB\uff0b\u91cd\u8907\u6392\u9664\uff0b\u5168\u81ea\u52d5\u5316<\/b>\u3067\u300c\u5f8c\u623b\u308a\u4e0d\u53ef\u306a\u73fe\u5834\u30c8\u30e9\u30d6\u30eb\u300d\u3092\u6839\u7d76\u3067\u304d\u307e\u3059\u3002<br>\n\u52d5\u753b\u89e3\u6790\u00d7AI\u30a2\u30ce\u30c6\u00d7GIS\u6d3b\u7528\u6642\u4ee3\u306f\u3001\u201c\u6b62\u307e\u3089\u306a\u3044\u201d\u30a4\u30f3\u30d5\u30e9\u30ec\u30d9\u30eb\u306e\u904b\u7528\u304c\u8981\u6c42\u3055\u308c\u307e\u3059\u3002<br>\n\u3053\u306e\u69cb\u6210\u3092\u5fb9\u5e95\u3059\u308b\u3053\u3068\u3067\u3001\u73fe\u5834\u306eAI\u30fbIoT\u30c7\u30fc\u30bf\u57fa\u76e4\u3068\u3057\u3066\u3082\u5b89\u5fc3\u3057\u3066\u904b\u7528\u30fb\u62e1\u5f35\u3067\u304d\u307e\u3059\u3002\n<\/p>\n\n<div class=\"footer\">\n2025 &copy; \u682a\u5f0f\u4f1a\u793e\u30d3\u30fc\u30fb\u30ca\u30ec\u30c3\u30b8\u30fb\u30c7\u30b6\u30a4\u30f3\n\u3053\u306e\u8cc7\u6599\u306e\u30b3\u30fc\u30c9\u30fb\u8a2d\u8a08\u306f\u5168\u3066\u518d\u5229\u7528\u30fb\u793e\u5185\u5c0e\u5165\u30fb\u5546\u7528\u53ef\u3002\u73fe\u5834\u5c0e\u5165\u30b5\u30dd\u30fc\u30c8\u3084\u30b7\u30b9\u30c6\u30e0\u5316\u76f8\u8ac7\u3082\u968f\u6642\u627f\u308a\u307e\u3059\u3002\n<\/div>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>360\u5ea6\u52d5\u753bAI\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u00d7DB\u7ba1\u7406+GPS\u30de\u30c3\u30c1\u30f3\u30b0 \u5b9f\u8df5\u89e3\u8aac 360\u5ea6\u52d5\u753b\u306eAI\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u30fb\u30e1\u30bf\u30c7\u30fc\u30bf\u7ba1\u7406\u3092\u3001\u73fe\u5834\u3067\u672c\u5f53\u306b\u201c\u6b62\u307e\u3089\u305a\u306b\u56de\u305b\u308b\u201d\u4ed5\u7d44\u307f\u306b\u3059\u308b\u306b\u306f\u3001 ffmpeg\/ffprobe\u306b\u3088\u308b\u4e8b\u524d\u30b5\u30fc\u30c1\u30fb [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1520,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"saved_in_kubio":false,"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","vkExUnit_EyeCatch_disable":"","_veu_custom_css":"","veu_display_promotion_alert":"common","vkexunit_cta_each_option":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[5,59,6],"tags":[],"class_list":["post-1518","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-59","category-programing"],"aioseo_notices":[],"veu_head_title_object":{"title":"","add_site_title":""},"jetpack_featured_media_url":"https:\/\/beeknowledge.co.jp\/wp-content\/uploads\/2025\/07\/4uh9mp4uh9mp4.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1518"}],"version-history":[{"count":2,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1518\/revisions"}],"predecessor-version":[{"id":1521,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1518\/revisions\/1521"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/media\/1520"}],"wp:attachment":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}