{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4EbxDfo7mUv9", "outputId": "f4b1dcdb-f68c-43ec-9482-7352e06c55be" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Requirement already satisfied: streetview in /usr/local/lib/python3.10/dist-packages (0.0.6)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from streetview) (2.31.0)\n", "Requirement already satisfied: pillow in /usr/local/lib/python3.10/dist-packages (from streetview) (9.4.0)\n", "Requirement already satisfied: pydantic in /usr/local/lib/python3.10/dist-packages (from streetview) (2.6.4)\n", "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic->streetview) (0.6.0)\n", "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic->streetview) (2.16.3)\n", "Requirement already satisfied: typing-extensions>=4.6.1 in /usr/local/lib/python3.10/dist-packages (from pydantic->streetview) (4.10.0)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->streetview) (3.3.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->streetview) (3.6)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->streetview) (2.0.7)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->streetview) (2024.2.2)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (4.66.2)\n" ] } ], "source": [ "!pip install streetview\n", "!pip install tqdm" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "RpmnZgBb2Ajr" }, "outputs": [], "source": [ "# functions for\n", "\n", "from streetview import search_panoramas\n", "from streetview import get_panorama\n", "from google.colab import files\n", "import random\n", "import requests\n", "import xml.etree.ElementTree as ET\n", "\n", "# get IDs\n", "def generate_random_coordinates():\n", " latitude = round(random.uniform(-90, 90), 5)\n", " longitude = round(random.uniform(-180, 180), 5)\n", " return latitude, longitude\n", "\n", "def array_to_txt_file(strings, filename):\n", " with open(filename, 'w') as file:\n", " for string in strings:\n", " file.write(string + '\\n')\n", "\n", "def fetch_random_land_location(country=None):\n", " if not country:\n", " url = \"https://api.3geonames.org/?randomland=yes\"\n", " else:\n", " url = f'https://api.3geonames.org/?randomland={country}'\n", " response = requests.get(url)\n", " response.raise_for_status()\n", " root = ET.fromstring(response.content)\n", "\n", " latitude = root.find('.//latt').text\n", " longitude = root.find('.//longt').text\n", "\n", " return latitude, longitude\n", "\n", "# specify a country if you want only want panoramas from a specific country\n", "def get_panorama_id(country=None):\n", " # generate randomly (includes ocean)\n", " # coords = generate_random_coordinates()\n", "\n", " # generate randomly (land only)\n", " latitude, longitude = fetch_random_land_location(country)\n", " coords = [latitude, longitude]\n", "\n", " try:\n", " panos = search_panoramas(lat=coords[0], lon=coords[1])\n", " except Exception as e:\n", " print(f\"An error occurred: {e}\")\n", " return None\n", " if not panos:\n", " return None\n", " pano_id = panos[0].pano_id\n", " return pano_id\n", "\n", "def download_panos_from_ids(pano_ids, FILE_NAME):\n", " array_to_txt_file(pano_ids, FILE_NAME)\n", " files.download(f'/content/{FILE_NAME}')\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17 }, "id": "3xzZtyyAyCF9", "outputId": "6e8e25c6-178a-4a26-bd2c-07eb21685caa" }, "outputs": [ { "data": { "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "download(\"download_5f5e130d-50e4-445d-88cc-0a4f89c44309\", \"panorama_ids\", 230)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# basic test script\n", "NUM_IMAGES = 10\n", "pano_ids = []\n", "\n", "while len(pano_ids) < NUM_IMAGES:\n", "\n", " pano_id = get_panorama_id()\n", " if not pano_id:\n", " continue\n", " pano_ids.append(pano_id)\n", " print(f'fetched pano {len(pano_ids)} of {NUM_IMAGES}')\n", "\n", "download_panos_from_ids(pano_ids, \"panorama_ids\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 106 }, "id": "17Sg7aJh0R4i", "outputId": "619ac908-3f62-4953-b62e-2e7a3f4d13a2" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "fetched pano 1 of 5\n", "fetched pano 2 of 5\n", "fetched pano 3 of 5\n", "fetched pano 4 of 5\n", "fetched pano 5 of 5\n" ] }, { "data": { "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "download(\"download_cc75e39d-1c07-4a27-a625-25b1c6cf14dc\", \"panorama_ids\", 115)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# test fetching by country\n", "NUM_IMAGES = 5\n", "pano_ids = []\n", "\n", "while len(pano_ids) < NUM_IMAGES:\n", "\n", " pano_id = get_panorama_id('CA')\n", " if not pano_id:\n", " continue\n", " pano_ids.append(pano_id)\n", " print(f'fetched pano {len(pano_ids)} of {NUM_IMAGES}')\n", "\n", "download_panos_from_ids(pano_ids, \"panorama_ids\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "background_save": true }, "id": "GYKpN8thF0EZ" }, "outputs": [], "source": [ "# fetch 5000 panoramas randomly with coordinates\n", "from google.colab import files\n", "from google.colab import drive\n", "import json\n", "\n", "NUM_IMAGES = 1000\n", "BATCH_COUNT = 5\n", "pano_ids = []\n", "\n", "drive.mount('/content/drive')\n", "directory_path = '/content/drive/My Drive/Princeton/'\n", "\n", "# split into 5 batches of 1000 images\n", "for i in range (BATCH_COUNT):\n", " while len(pano_ids) < NUM_IMAGES:\n", " pano_id = get_panorama_id()\n", " if not pano_id:\n", " continue\n", " pano_ids.append(pano_id)\n", " print(f'fetched pano {len(pano_ids)} of {NUM_IMAGES}')\n", "\n", " # download JSON at the end to drive\n", " FILE_NAME = f'random_panos_{i}.txt'\n", " file_path = directory_path + FILE_NAME\n", " panos = {\"panos\": pano_ids}\n", " with open(file_path, 'w') as convert_file:\n", " convert_file.write(json.dumps(panos))\n", " pano_ids = []" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "0Okpj8T8nmlI", "outputId": "deeb2c09-7f36-48bb-9252-4a985b8b75aa" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['AL', 'AR', 'AU', 'AT', 'BD', 'BE', 'BM', 'BT', 'BO', 'BR', 'IO', 'BG', 'KH', 'CA', 'CL', 'CX', 'CO', 'HR', 'CW', 'CZ', 'DK', 'DO', 'EC', 'EE', 'SZ', 'FO', 'FI', 'FR', 'DE', 'GH', 'GI', 'GR', 'GT', 'HK', 'HU', 'IS', 'IN', 'ID', 'IE', 'IM', 'IL', 'IT', 'JP', 'JO', 'KE', 'KR', 'KG', 'LA', 'LV', 'LT', 'LU', 'MY', 'MT', 'MX', 'MC', 'ME', 'NL', 'NZ', 'NG', 'MP', 'NO', 'PA', 'PH', 'PL', 'PT', 'PR', 'QA', 'RE', 'RO', 'RU', 'RW', 'SM', 'SN', 'RS', 'SG', 'SK', 'SI', 'ZA', 'ES', 'LK', 'SE', 'CH', 'TW', 'TH', 'TR', 'UA', 'AE', 'US', 'VI', 'UY']\n" ] } ], "source": [ "all_countries = [\"AF\", \"AX\", \"AL\", \"AS\", \"AD\", \"AI\", \"AQ\", \"AR\", \"AW\", \"AU\", \"AT\", \"BD\", \"BY\", \"BZ\", \"BE\", \"BM\", \"BT\", \"BO\", \"BQ\", \"BW\", \"BR\", \"IO\", \"BG\", \"KH\", \"CA\", \"IC\", \"CL\", \"CN\", \"CX\", \"CK\", \"CC\", \"CO\", \"CR\", \"HR\", \"CW\", \"CZ\", \"DK\", \"DO\", \"EC\", \"EG\", \"EE\", \"SZ\", \"FK\", \"FO\", \"FI\", \"FR\", \"DE\", \"GH\", \"GI\", \"GR\", \"GL\", \"GT\", \"HK\", \"HU\", \"IS\", \"IN\", \"ID\", \"IQ\", \"IE\", \"IM\", \"IL\", \"IT\", \"JP\", \"JE\", \"JO\", \"KE\", \"KR\", \"KG\", \"LA\", \"LV\", \"LB\", \"LS\", \"LT\", \"LU\", \"ML\", \"MO\", \"MG\", \"MY\", \"MV\", \"MT\", \"MQ\", \"MX\", \"MC\", \"MN\", \"ME\", \"NP\", \"NL\", \"NC\", \"NZ\", \"NG\", \"MK\", \"MP\", \"NO\", \"PK\", \"PS\", \"PA\", \"PH\", \"PN\", \"PL\", \"PT\", \"PR\", \"QA\", \"RE\", \"RO\", \"RU\", \"RW\", \"PM\", \"SM\", \"VC\", \"SN\", \"RS\", \"SG\", \"SK\", \"SI\", \"SB\", \"ZA\", \"GS\", \"ES\", \"LK\", \"SJ\", \"SE\", \"CH\", \"TW\", \"TZ\", \"TH\", \"BS\", \"TN\", \"TC\", \"TR\", \"UG\", \"UA\", \"AE\", \"GB\", \"US\", \"UM\", \"VI\", \"UY\", \"VU\", \"VN\"]\n", "missed = [\"AF\", \"AX\", \"AS\", \"AD\", \"AI\", \"AQ\", \"AW\", \"BY\", \"BZ\", \"BQ\", \"BW\", \"IC\", \"CN\", \"CK\", \"CC\", \"CR\", \"EG\", \"FK\", \"GL\", \"IQ\", \"JE\", \"LB\", \"LS\", \"ML\", \"MO\", \"MG\", \"MV\", \"MQ\", \"MN\", \"NP\", \"NC\", \"MK\", \"PK\", \"PS\", \"PN\", \"PM\", \"VC\", \"SB\", \"GS\", \"SJ\", \"TZ\", \"BS\", \"TN\", \"TC\", \"UG\", \"GB\", \"UM\", \"VU\", \"VN\"]\n", "fetchable_countries = [element for element in all_countries if element not in missed]\n", "print(fetchable_countries)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "background_save": true }, "id": "H5MCpi6qJFQs" }, "outputs": [], "source": [ "# fetch 50 panoramas from each country with streetview coverage\n", "import json\n", "import time\n", "from google.colab import files\n", "from google.colab import drive\n", "\n", "drive.mount('/content/drive')\n", "directory_path = '/content/drive/My Drive/Princeton/'\n", "\n", "countries = [\"AF\", \"AX\", \"AL\", \"AS\", \"AD\", \"AI\", \"AQ\", \"AR\", \"AW\", \"AU\", \"AT\", \"BD\", \"BY\", \"BZ\", \"BE\", \"BM\", \"BT\", \"BO\", \"BQ\", \"BW\", \"BR\", \"IO\", \"BG\", \"KH\", \"CA\", \"IC\", \"CL\", \"CN\", \"CX\", \"CK\", \"CC\", \"CO\", \"CR\", \"HR\", \"CW\", \"CZ\", \"DK\", \"DO\", \"EC\", \"EG\", \"EE\", \"SZ\", \"FK\", \"FO\", \"FI\", \"FR\", \"DE\", \"GH\", \"GI\", \"GR\", \"GL\", \"GT\", \"HK\", \"HU\", \"IS\", \"IN\", \"ID\", \"IQ\", \"IE\", \"IM\", \"IL\", \"IT\", \"JP\", \"JE\", \"JO\", \"KE\", \"KR\", \"KG\", \"LA\", \"LV\", \"LB\", \"LS\", \"LT\", \"LU\", \"ML\", \"MO\", \"MG\", \"MY\", \"MV\", \"MT\", \"MQ\", \"MX\", \"MC\", \"MN\", \"ME\", \"NP\", \"NL\", \"NC\", \"NZ\", \"NG\", \"MK\", \"MP\", \"NO\", \"PK\", \"PS\", \"PA\", \"PH\", \"PN\", \"PL\", \"PT\", \"PR\", \"QA\", \"RE\", \"RO\", \"RU\", \"RW\", \"PM\", \"SM\", \"VC\", \"SN\", \"RS\", \"SG\", \"SK\", \"SI\", \"SB\", \"ZA\", \"GS\", \"ES\", \"LK\", \"SJ\", \"SE\", \"CH\", \"TW\", \"TZ\", \"TH\", \"BS\", \"TN\", \"TC\", \"TR\", \"UG\", \"UA\", \"AE\", \"GB\", \"US\", \"UM\", \"VI\", \"UY\", \"VU\", \"VN\"]\n", "# countries minus ones that don't have enough streetview coverage\n", "#countries = ['AL', 'AR', 'AU', 'AT', 'BD', 'BE', 'BM', 'BT', 'BO', 'BR', 'IO', 'BG', 'KH', 'CA', 'CL', 'CX', 'CO', 'HR', 'CW', 'CZ', 'DK', 'DO', 'EC', 'EE', 'SZ', 'FO', 'FI', 'FR', 'DE', 'GH', 'GI', 'GR', 'GT', 'HK', 'HU', 'IS', 'IN', 'ID', 'IE', 'IM', 'IL', 'IT', 'JP', 'JO', 'KE', 'KR', 'KG', 'LA', 'LV', 'LT', 'LU', 'MY', 'MT', 'MX', 'MC', 'ME', 'NL', 'NZ', 'NG', 'MP', 'NO', 'PA', 'PH', 'PL', 'PT', 'PR', 'QA', 'RE', 'RO', 'RU', 'RW', 'SM', 'SN', 'RS', 'SG', 'SK', 'SI', 'ZA', 'ES', 'LK', 'SE', 'CH', 'TW', 'TH', 'TR', 'UA', 'AE', 'US', 'VI', 'UY']\n", "\n", "NUM_IMAGES = 50\n", "pano_ids = []\n", "panos = {}\n", "missed_countries = []\n", "MAX_ELAPSED_TIME = 120\n", "\n", "for i, country in enumerate(countries):\n", " print(f'-----------------------------------------------------------')\n", " print(f'Current fetching: {country}')\n", " start_time = time.time()\n", "\n", " while len(pano_ids) < NUM_IMAGES:\n", " current_time = time.time()\n", " elapsed_time = current_time - start_time\n", "\n", " if elapsed_time > MAX_ELAPSED_TIME:\n", " print(\"Time exceeded 1 minute, moving to next country.\")\n", " missed_countries.append(country)\n", " break\n", " try:\n", " pano_id = get_panorama_id(country)\n", " except Exception as e:\n", " print(f'Exception encountered while fetching {country}, moving on to next country. Error: {e}')\n", " missed_countries.append(country)\n", " break\n", " if not pano_id:\n", " continue\n", " pano_ids.append(pano_id)\n", " print(f'fetched pano {len(pano_ids)} of {NUM_IMAGES}')\n", " start_time = time.time()\n", "\n", " panos[country] = pano_ids\n", " pano_ids = []\n", "\n", "FILE_NAME = 'countries_5000.txt'\n", "file_path = directory_path + FILE_NAME\n", "panos[\"missed_countries\"] = missed_countries\n", "\n", "# download JSON at the end to drive\n", "with open(file_path, 'w') as convert_file:\n", " convert_file.write(json.dumps(panos))\n", "#files.download(f'/content/{FILE_NAME}')\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17 }, "id": "9inlK3KG0nZu", "outputId": "96f19b2c-3fa7-4ebd-b04b-8425ef9838e3" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "download(\"download_edfb6a7d-2682-4723-8983-4de086e63ca7\", \"panorama_ids\", 23220)" ] }, "metadata": {} } ], "source": [ "# download panos for streetview Download 360 format (one on each line, separated by a newline)\n", "panos = [\"B3HpLrBkVoSEYCyCiXw_Lw\", \"U4VLo4366wg-b8hjW1-XLA\", \"ZoY2qEC3QX5GvVYjSf8xiw\", \"LTy_-AOLwR58z-z2--cw3w\", \"YoVFKHuqtxZzdQuPz13c2g\", \"c22ZLSFWS61Jtqjch7pyPw\", \"PwYqWAOFrWMlg9oz4lLNsA\", \"CM63yD4OADgfYdODwj7RKg\", \"QdtZ-rkoAP_NK3SFmGJK5g\", \"JquzGKRPomiCt-7nGMo07g\", \"td31cEodSa4laX8nYdGApg\", \"vq8jhxIoInqUi4kO3cMvpQ\", \"sCs0zo__M3Q6ZTnKDz4shg\", \"2JW4ly7WkY6dX4KWMmRP-w\", \"cWnC55GKOSrFTptySAk3uA\", \"eJUQsgYgRfJG63RJ5zeHQw\", \"AF1QipNZPN7-Vkz8kk33z5QIUo_-NlJ2PfZsfQd8zEgA\", \"n2SchmX_Ot7A8Ahq8aZlpw\", \"oNTxi0D4k2fIPh9tigUxhA\", \"4q4rpW2NrXMZblZw0HFt2Q\", \"-blquHn_-72nH1WsxoG6zw\", \"DhgLyOABBeui02kxY8nFJg\", \"qXZju-b9IlA-HBIQPqmg9w\", \"kiFj-Sx0i507SWwU8cuPjQ\", \"Yr7ZZHLtt683_epQv3CYAQ\", \"7nyOV9f2JwK7HJgDvM55YA\", \"Nb-QuBguFm2jSqK8zEge7w\", \"S5hhjpgKlROnzSX3xGKdIg\", \"qbDuOhJoUciTdU96roizVg\", \"HvgPK8qKQe4X0T-ejzsQvA\", \"dYXbS3-Tc4wnH1NQNj-uFA\", \"5-C5KnOdpQcQSAeNZAOTZQ\", \"EuZ1WsOIBpLYvStgN9e6CA\", \"9EsYcX63i-myDcgvbRn4VA\", \"J39LkpHvb-UF51Po5l5Qvw\", \"eAR8tWP6FDL4yCnbQQDf3w\", \"kHDuS2BA1eCVDZlnIGYNiA\", \"cLNMPm5t-wAKcTMZoTDRfA\", \"y44QJRsc_ytHVrawsS1KbQ\", \"8YtL12lvoxgieZ1Onooh2w\", \"mVxT39CLrvuX4feLTxzDzA\", \"GEmtXXa5AlO4sS2KJj9peA\", \"QbiS4cUV4rJTa6dDIEEjbQ\", \"A-k0duWxWTfYbQ4uAoNbIw\", \"DnrOEZSHiQTw7HHMirlEPg\", \"VqbdLQMONOAIFejSDyfR6w\", \"zWQsVtC-CyDb08ZCKZHclg\", \"Rof9BZ5S37R4s-4AJCp5GA\", \"LhHJT3Iuh8-sGgFnDYgajw\", \"0zoSmPkBwKAkPhg_PUTLnA\", \"7OampA24k1aTDdCL-pEYOQ\", \"1RpmB8b6qmp71hxSLqCBBA\", \"n7xNOGoE3ceGOeEfYtU2uw\", \"wbYMJIEJaiGJGWVTpSXJpg\", \"Pi5vhp0vpr5oBEuF2n-PeQ\", \"mAT5QVoAeiCkV6CW-QPMvw\", \"VnTVmTmHhH_NLiT0OpnJXw\", \"GAzWmLoNuvNYrj1IarmGpw\", \"3Sqi23R6bh6IF8_g8xnJ5w\", \"SXpUDmo2IchLjQvFvChIZg\", \"gp4zfLdjBF3UFevZOTeiiA\", \"OPrMSUBuwW459erEsrXYVw\", \"Px0T37ztGbkcHPlsAHsHzQ\", \"iRNwhCSroNshDGBAXsEq8g\", \"ogiEgI2ZlHmMKVAaqQisiw\", \"jtiXTk3vlQ1otRUKHQwLNA\", \"zKflXzFWIVusvdMUagAH0Q\", \"qD5yvHVhKN2nl1xrvydKag\", \"AzBOoaOA9mU3Rra4kOuJnw\", \"GajBX64Gi1hZu4y_MvMKmA\", \"vuvtHZE3HOMN1Yu710v43w\", \"boQZwFVnmR6GhAwvgPeS6w\", \"-CBpTRrveA0SDs8nyGM1bw\", \"qQ0iUGkcQZ2d4YB2IYZ8pQ\", \"K_kbrsgMZCMJ3gVew9c3Aw\", \"DkpeJuDEWVO8FTt2z0dr8Q\", \"Rq7ZJ0pMqm4U4MLIeAAk9g\", \"Ojl8a80OHuJMlbD1QcgjTA\", \"lgwD2D82lUPZYGI92mUqQQ\", \"RjN4bfW1JK-dY44aPoxTPA\", \"wVx2DJolSw6BktXbQu78LQ\", \"4rEA0mDtuX6jRer-x0D04A\", \"OAwmHjsQckZ5ZcRiPURDWg\", \"BQT5Y-xMsckd881Iu1JEWg\", \"Aa04bbQyGQu_6TWE4FHKyQ\", \"AF1QipMaAAcsYCa2dQr5d7hTiP1OS4dJq9a2Hhd4upIa\", \"cm9k0s8C6U0U4cqvRKiqMw\", \"TaYcWBG9mC9MP5R5uQgexg\", \"Ngi8wU_wztIqLHE9N24mNA\", \"vfoIskrI6VvlVEKhrl5jlQ\", \"EG-tX7fsE3GexyyWoj_LEQ\", \"_xJZgrCyl2biqanPgzOtBA\", \"ncrGvJqvmqeOWg-Nz-R5Jg\", \"2iuStJocbyXO126V872EWA\", \"8T4khEhqVCJDCidjxOGHqg\", \"GLjDfLC3Q5P0tPBLZPp9pA\", \"Iq4Cx6vwhkVhKleIOY90Vw\", \"JJD7UYVTyIjA5kheD01p8A\", \"4APOvN0ALWbXrtSa9CcZkg\", \"CtjXnIeDsGnUz7XaSkEM_g\", \"v7hI8sU8XFDwJE_1dGQeNQ\", \"To8UvSMq0-Gx_5zkJv3RfA\", \"_IZDkK95e7QCsThTcy_P6A\", \"w5gDCNcxgqle_6ZqPldqCw\", \"8A3_r3HHuxiyq11wVs9hOg\", \"YbdZuAB14Nb_UPvR5OLP2Q\", \"bVjOJQCdoOThv7JqkO2Tmw\", \"5BnSAg51D1aJfcw61y1enQ\", \"G6Gw0s0dV0cvopYTzZj84Q\", \"d6QePIYeuUyLdPys0_4-8w\", \"1po98ZjU9XieNKEb4nDpFw\", \"yJO-mUuv77FNcedLCbUJqg\", \"IxL--PLOW1DFnM_ehF27Aw\", \"-JZBOA3cPCJv1U68dArZJw\", \"y9D30rPn5aFFROf6Hgfykw\", \"JlQBVCDyrD3DtRPj2lJqGg\", \"KK49mcT8-7aAELs47Ecihw\", \"atFxmy-tRWR7nPogsLVXrg\", \"M7-1rdJY9GAT3e_ccxa9oQ\", \"DncIBlE_RoXeI14a9QcRqw\", \"d5DswchbLKw8uXfw3P3lWQ\", \"QuQz_0ryIrJ5opffM2XzGg\", \"WzHJkm9jB_OYsHzMqXHoNA\", \"c0OuFfxV0KaLVekuyllsHw\", \"AFQRGF5ldJvVi5t6TdaElA\", \"YoVFKHuqtxZzdQuPz13c2g\", \"7mVC03Fhwgxgproxop3dXA\", \"yp0mNLBbZgwlBNJazggd0Q\", \"72a3WlqFmWlJQpzAdGfkug\", \"ZX0XNVtCZhlI9DbMKxIlcA\", \"Pq84YzT1bejSLu2cztQwVw\", \"plipiviXhKT29YCqBD43uw\", \"raae8Yt9RO994Rt5N_n20Q\", \"qhfNodAm3gpiATtSw03udg\", \"j_koIVpOp91cAZO9AsjqWA\", \"dIdD_ISCvEsHhtZ4zCTZkg\", \"5ET9RwKnRjTjqxmckoe2rg\", \"n5UwfwAhDKa-8_cCQwa-Gw\", \"pBhQ2anjLQQj3FzZLrCn5A\", \"8QNZBAaH-9zuEMRmYSM6og\", \"3-9DlWL94N0FufxyeujtgA\", \"QRkhBitIq8UVzVzr4ZSCvw\", \"tUJBapNtuiiGaoXrMaNZSw\", \"LAq-tnYkYyJ7JVc2X7vV2Q\", \"KJvWan8UhZ9dbNMVfZmv_g\", \"hquo-omp0tJAqSzPGaCfiA\", \"o-jNUF_ylykVa1frmIsqiQ\", \"LsqO1C-YQnpb63xyKJqinw\", \"iF4nIURjsCv_KfxTuXm53w\", \"ZxVC8qLbrEBpR56_4B2euw\", \"1iU_wwxNjKHUBpthR8dKbw\", \"q5IjhUtAjh6jsWr6yLjtnA\", \"Ocpw789cOo7Vf5gGsA3gRg\", \"2NdEq9gIRe7EvlW4ZBVUCA\", \"hyRcNf9ggykirpjibKLLpA\", \"Q_kP0TqkPPzZwN819BAbdw\", \"BR6d5t1NQ0Zs96MbQLRYcw\", \"jllgoD0MvxUU2uhwEgRWRQ\", \"vjUSMADDsemRDtAs0cEifw\", \"zBdsYOZsIalqjA7WEpqDNg\", \"bbthAb80273g2BZQ4txmXw\", \"V8pV1c-l4T0TMsHOcVif1w\", \"wFRYP69dbhwwlvJPZD7AAg\", \"CHdR5o2budT2HRnuZ4EqxA\", \"rpVT0TWZRIKcss4SeFPp1Q\", \"fQ8GBmWSC3q5b6WoorUEmQ\", \"I9Gmpp8Td7SUAYXaG8p0fQ\", \"wuGt9uIFWjHTMC4eil43bA\", \"L-qqRn4kh6lGk_kybyGfSA\", \"-azgbkegh2vMURnTdqYGTA\", \"MmsEiQr3B38-zNwrquozKQ\", \"bCzTfFF7up1Z2rVUNASxlA\", \"aQ5Tw3gmPBzOl7LQ7YD0cg\", \"a4LwhuIqItYIPgRm4OQUpg\", \"Fa0JoGlI7FPBBPW10biiOw\", \"naIYTTQVAvKDV28L8nmnyA\", \"QXmH7bgXxV8pZQ5P5o1Eww\", \"_ougxluU2fn3AQfGa5BbNw\", \"ZQafYdxholYEY6Twzm_4wQ\", \"FZ4BxBAXd7N9hHQ46CGEoQ\", \"t_jWFo2zyqZW7QUaJAzvAw\", \"6ZioBfAYGkizyh8s3G1KVQ\", \"oVUCjByUgxQZCwOWL8vHog\", \"nkGvrO9U0BcxihAHVBS5JQ\", \"0rjjNl85VHbzyosRd_722g\", \"UcHA6xY5OnI1l57TbO_nnw\", \"9QV95EGUE8kBqJsRlBZLzw\", \"nS_lE-Ll8A-JqcFO1PxKPw\", \"CxZ0CWIo4WuCqTtOosAqJQ\", \"XEJeGcC7Jbg1F6knDmR8gQ\", \"q2HNtCTnpM-IxTYBty_xUg\", \"1wExQwodHew984AIL5C9-g\", \"JhiNVAwCXPopqnjEdqES8A\", \"mHanUZgvY8JjZCHa3Ds9Ew\", \"RfylcoBv5PnvFRJRLCD2iA\", \"evV3-UaFLo4n8OEWO-NUOQ\", \"rHrDtBtzk1LluWIxQlCGRQ\", \"Vj1G2iLrl53YIwlAzR5CXA\", \"r-Y4Mlt8pAJMyLhyMZk8tA\", \"GCLmAiOT65KqRiFrgHuQiw\", \"8jAfmmGn6mgLLP2R_vaj3A\", \"PvOk_FOzSPjvjOVtcXs0eg\", \"uKVgeJVe-QqXRHZoboCp7w\", \"Pi5vhp0vpr5oBEuF2n-PeQ\", \"-Qkj2S-J3R-QuSuXkDeEuw\", \"Ujz94JY-Vf5T3mX15StzUg\", \"agmalWiYjcTKhkcHqMzoeg\", \"dfOBrtMa94nMojvhP6auAw\", \"HlbePUVmUTheTDI0U-mRsg\", \"1xmv1qP1GyBMzWiX2ph_9A\", \"PsLGZxKvPqZIrtHlzF37hA\", \"6k6Aqg_Wrchhxk5IcXP8fg\", \"MwdIxk5pD1pGcxeEolwjsg\", \"cFIhk4ZK498b50e8Aupqug\", \"04pXoFoi6KNvg_HaIAvqEw\", \"EcFcpcMApb0d0_DRHL1IJw\", \"AF1QipMtfLHgdw3cOEAnoYPKmHnMOyZR7ONtUFBwY-tp\", \"hM8GYf-JVmvr0QzrYeTl6w\", \"27cgSzGytjQiUTMUMYANFg\", \"SmSbfRW-QW9m5AJRvlw2Xg\", \"koGBYpS3hMX7xUpu5s_p6g\", \"_TiHlnqUmxA1GQv-bDYwHQ\", \"Q9Gb3eahcEjMzksaOrNmTA\", \"zcM4okm3lJn6amGGMM-dVQ\", \"ZJJu-xoJA7he7rmcFCKvhw\", \"K-4-uITuEeMn6P9XVwCJGA\", \"B65XhKjxvKGmpsoJ-dCybg\", \"L0Ix0ljFf22tOfeKFjL3ew\", \"F0SagkHBK_WjL7aexiGfxQ\", \"ljMs3U-TBUE7iaeI_XhE1g\", \"lqwcrwzTitt0i0Eanbo7xA\", \"0SwghVi4M5MaaXLy9hqMCg\", \"mbj5OHLOjEStFJMehRKryg\", \"TmP5sU-2Dd3d_g2gV_XQjw\", \"YDv9JEWIKC7NHHkUXnAZlg\", \"nJQONjK1SFIcBr8nixAljA\", \"XGtWuY2cT41mN-Ue96kWKg\", \"ehjMvQi4rxcnTA9Uo1MC6Q\", \"a3SA9L3fBmZetVqUAGJAcg\", \"vHQxn36mClNAZu6xDXsmag\", \"vIcSu6-ckAIRDKDimlPipg\", \"szpuchNFGE2r0Cj0Yw5JMA\", \"giyligGUfTBZTNbS7vrqSQ\", \"PdjMeJc2w7xzLA2q8pUiow\", \"rMxL9Po7CDEZvu0uoUqnpA\", \"bJSAcJ2vAYG-zumIerdUPg\", \"rQhOrTZus2ZPavPQfznWMQ\", \"8pQlTfSKCX2QtPpDXLclBA\", \"2SFDYRVBkdM2_wkkPLpJLg\", \"92PTbluXrM0t9SsdZdZVvw\", \"vgj8IpRE0q8BNibp_9qS6w\", \"HmIGE2wGddopsC_o5WVvzw\", \"CT77bGq44DN2nsqWSZm-sQ\", \"7G-kuzSSXIs0bjW4v1cn4A\", \"xnbr82a4ew7ZMfY3EFMlpQ\", \"-CK_8Q0PfIScNllFJJWEMQ\", \"VejesG-JQw8weUYIcY7qtg\", \"Yq6LdARp1rrAhb19hG_Bbg\", \"arCq_tVkvBedGwZ8d2g8Sw\", \"kVh9EOPLwuCan8qjpM_lcA\", \"hWyyEEhZgDHr4xI80kcStw\", \"IrROn8KtTJUV5XBsuWae2Q\", \"4wIGBVCEMtoj0Knh-mlW-w\", \"neExAl26231AWF1T1vrIUw\", \"by_75V-fhKa2FuaQH6jMmA\", \"1wY2N_wi9b8buzUEzyEnMw\", \"f5kQKPGtknnPsoDIxU-9mA\", \"doMyhHFIzWHavgb27WgEXg\", \"0Ze4pTltB6rnZA24KnOqMw\", \"kth3UYiMHndbSaFQ8C0R4g\", \"0NMAbuPOC5quatcp3Wh4Hw\", \"U98qXbU0YgnfV2CMCnHtFg\", \"e-QvzYXqNXaQ7ghCGBzXfQ\", \"sj58h5yVe1J0unlZ-G9GuA\", \"6ew5I3mh-poMQuumwHrdyw\", \"S9xcOq7hTY8LwS44njBlRQ\", \"715A2cIEbNCZ1-ckPNE5bA\", \"vFXixKcgwBCjloe_G8JZKQ\", \"dPZFWrt1mG6oU8An5QHC4g\", \"jlXztZQJEFiMP2BSQCZsfg\", \"Eug0SGPTtEfobslI9cvB9g\", \"14j7lFs-Xbl6PPXeMlnLAQ\", \"ySWN76c0KYii4uR_3lfqCA\", \"V4VC5May2Q1eYd-Fh65wsg\", \"xcLxJiRs14g5SC9jr_z75g\", \"ke1GtfWHy7RG1F48ryHUGA\", \"OVcA16ktKFyL72uwkcePMg\", \"ojc_88QRDQQSPQ7ZXjyqLQ\", \"9mdJVUDKQTOHn5Jwud17Kw\", \"GC2cq5K6ULVVvZPNtxJVgw\", \"HAKGSzQxy84a2cjtZbe7_w\", \"1VXkYWCs_GfqMX5QpLavLw\", \"Ayco3WCqM-B91Vu_QDV9rw\", \"17xc0T5MpYXrFFkm8JovsQ\", \"nLLNP5dm4xb7GbATthswPg\", \"HHnZRVGMqWS1x7KDCQxo4A\", \"Q32jgs7pguces9g50A50Zw\", \"ctbPhdi4E7_TNwDaH52yEw\", \"unEvYYzSYPjX7NLK7wR-ZQ\", \"xGQx-C15E1EM3Hy3VsfMRQ\", \"qMzm94R6krIVunf5VZXfzQ\", \"yANw1BwBsctXGaNkujobnQ\", \"_X9oatrUsERDWqXgTxNcIw\", \"MutMMJKpJ_XNvzs7N7AzeQ\", \"-HzBd3PktkSy8kcOaUZMDw\", \"3o-GdCRy13SIG9Aa85WDZw\", \"W_gjpS5Z5dFMjbEKYCRwHw\", \"MsEGbK_s7qLuUupvgm2LhA\", \"OfZ4zkF0sK4h3jj0wE5S3A\", \"94KQz81EeoQIdu0Vb6nVfg\", \"XRxFDD4ccQAU9EC5igyT0g\", \"l0kjYy6mfX9AZOuS95uh9A\", \"t87k3YYoI_Y6sCrssFUKhg\", \"aBBb1kVkLbfMMZoEd5Vclg\", \"_n19CsuOsObK464aTvECSg\", \"MxTudMH64EjUybo2SLNRyQ\", \"deCQUid7GbvoV2gcVUEwNg\", \"HhgJA4D9VUB4JfOI88NbOQ\", \"VNmE-mDPAZs_89C3F_Jm0Q\", \"jj2EvvuBH7TmWv0zh_GGlA\", \"IYnYZLxd394LIHLXcheOow\", \"NIguT4Y0V-puF9gHwdGo0Q\", \"aYgOBMtJn0YLy6qBd1qKeQ\", \"24aUiQkJbO6HPi9gOG_lLw\", \"YjrSdmRgXsV1AM8sPcK2Qg\", \"QUtuc0avYCNdbt-pTYNKxA\", \"3qTtzD49M7L9lAS6fkg88g\", \"V2YrGMMts93bydNGRBb3lQ\", \"XxyZ6lmVGsMm4FNFUoDNdg\", \"y73w0j0AYSQGmxOMg8B2Qg\", \"W92zrLCt71wQZS3GHRNZGg\", \"ccAi94Do_diNOy5RWJ8aOg\", \"LBZMIQ3mdBAfInmeISR_iA\", \"PZRuldlyqdQYu6E5wDkmZg\", \"8jVSiWpJXGTdO6y9LVqUPQ\", \"XtXzrJnsLs1ncUJPKF_H2g\", \"ka21m-AFTd_EBQjvEnW_yw\", \"b5VXJsgzi7OoY6DimfL_Fg\", \"kGqmpmIelqPIB9TXg46hXQ\", \"DXhWj5KnVAFVbuLPYd4O3w\", \"jfotMbRNbuPWLySs-vvAAg\", \"zzmA3S49xKvc5yn6sEA8OQ\", \"F6wvRs9-spO8istxUj73lA\", \"V3KXxJmM7zGqKntUozsClA\", \"JHR5YGA5rhZqdIJXhNP5kQ\", \"D-u-gKi1DN4-cmgtfBdP1g\", \"1g8zzvy9vmy9prrK56igGg\", \"2Lgv2QFtXRl3b8rUWDgZ4g\", \"3PzVQ17IbfcwcYi-MRSm6Q\", \"BtsgxWdK0-z6JunVFaiwTw\", \"0Uu1P7QNLJ_cGBi-OJ0YgA\", \"mDVxj5LgjQpVevGaMyzCIA\", \"s7nG0L4VXunj1mqaqbpYqA\", \"hvNZymCDVbi6Ox76aLqQCQ\", \"00MreGJunlyuSftXhki11g\", \"n5Ce1EOSyTTQlO6MOd1y3g\", \"iCxdzi6lTqf6L1UgDGmYGA\", \"7Xy9iLX_wsl3UYxM3lemIQ\", \"wHMdk6t5zz9zQ3AJSoHaeg\", \"FiiYmrPcIlyc_jmxyLVsRQ\", \"FzE0nH-8qgZe7uOSfcxwWA\", \"zTeIHysQISTFbTU56CsHyg\", \"lo88cdkZUvONbFH37YdlUA\", \"vFXixKcgwBCjloe_G8JZKQ\", \"PHy-KV57PZD027GJ8LOoKQ\", \"bm162SjVYyTkH6afrjeqaQ\", \"cg7PskmVbBMriT2fGQUP8Q\", \"SEWmZAoAtH_5jg2NAQ501A\", \"Cm5xFM2TqJluJhKQ_reoTQ\", \"6xU5BYS7bVd6Rwg7ulqmyg\", \"2Og7Vl-DXZs7USLis3R_5w\", \"4HaX0vNfQ3J8KAGhgEoauA\", \"B1psdsCc7WN2nFEWbM6yRg\", \"k9B2wI1h-y4cGoV9Y--SEw\", \"mPUsDNyt8Pym5o5TQh9F5A\", \"g3Nkp4DStePdzncddOfieQ\", \"GgUhGDYIttx9eHja0skAvQ\", \"rFagavBaJovNbrZ1It-36A\", \"Dpx3eCu_-B8VjOFbX_9E3Q\", \"MxcmYo4rxG1H8ggXkI2WBA\", \"YVtfVZU3MNq7hSP_oHul3A\", \"bu_0ZCaioDm8dqKmRcJLQQ\", \"nB-T1sRW92mhEPQTq3IDuw\", \"Fktt7LD2VdjMcfDhcyDvyw\", \"YxUse9PlaPVPt7c3llM4eQ\", \"HZDFZKqOLE6jDWME-9jq7w\", \"A6ldywrW1yhoOyreRFmtJw\", \"kqjoH4R6fFmGwOp5kphW4g\", \"r25Nx8eLKrpe3SYQxhBHwg\", \"SeCrcFRVIaXq5c6iKTxjNw\", \"47YgCyFOTR1x_iwUhqAQnw\", \"cFVN122SXy-1VnRZrL9Rsw\", \"-TaXYIZk3r_ffvc0GamB0Q\", \"yZgYkboE2ADQwY-hyf84Gg\", \"21zzsOdYRix7F3cE_WzqnA\", \"XtXzrJnsLs1ncUJPKF_H2g\", \"SeOGA0WqrNqsTV2o934pvQ\", \"xgKJ6sLMg1wJjEEXARnvnQ\", \"Peg-9bt1O5QEqT7KazSzpw\", \"cEl1HdyKuWq3BVxXIMPfoA\", \"R7mtaYtK5HRt1WLewN4INg\", \"9gU0-ioasdSTvPK-AKf-zw\", \"cPoAFUc_dpieXOm6FcB9Ew\", \"6bZxpDUALtD6z_9aZ9vOMw\", \"x2Cgc1fzWzsgqwYDcB14Ww\", \"5ZEGSSU0rGYRdxAoB5rRwg\", \"Xy8Qw53KOfJjX_vk9y5Z2Q\", \"6Tdbzu4N5ddap6sFR8qj7w\", \"vgNJrjH0rvB1bj1ATA9-zA\", \"ZZR54J4HiimmIvXEHeGidg\", \"5Zh8d7ExN7K-n7lAjADT0w\", \"Ufh8mrUDe87M1aHVitQHVw\", \"2h8CxhSlND_GO85NxOrvbg\", \"c2jMrfDMZ-ZP-W4c25W0ew\", \"ss_yhB48Bi-ih8A7NfoHKw\", \"z4i15DhxIdzipi3z8Hqwfw\", \"2KRgY_822u0XsZZJjAciiQ\", \"UJBPKfjOIqsC0Jt-E27SDA\", \"qrkPSvTzc76yfHuoNT7mbQ\", \"nB-T1sRW92mhEPQTq3IDuw\", \"oB0fzN6zR1ElZJoHeezpbA\", \"L1GDurYbKstV_otLpuCC2w\", \"ta82bygOUkOkhPQBa40eoA\", \"SXG77QRQP3wZn5t7c_sAbQ\", \"9-TlCB44V84PzxsVdl6xHg\", \"E0k0v7JO7dWmL75o1Wp2YA\", \"DtMfiyFsz2aquL-l2Kjulw\", \"FnssTNcSeyCi1IgUkd3Reg\", \"AxrvfjArA6PxJMHpyUS0UQ\", \"bCgOWHJ0vL0d3Nz0hYtHdA\", \"es89JivlzIcZVxUpaoyXWA\", \"4LCjCFKoB-lZuNh5-6F_iQ\", \"AINU3HL0p6MdER_GjPH43w\", \"eiSuuWj4ztW_ly7AyV78tw\", \"qcmUoH5LaJxvLv7AC8Ys8g\", \"Ydqb-VIwZINbhkSVvprnfg\", \"4BPmXCNIkwVz0LHKtB-zlw\", \"mL14tPS_IlvPs9wbs4tpIA\", \"Q0FHZqcTXw2UBJ5oakYNXg\", \"_ZVfYDA3Ynww8XP_xaiMSA\", \"--c5k1zGDSG78k96pcxmRQ\", \"04BC7MTeSrCDV0qbQSVQOA\", \"DCRb2ng6XNgoMCJxnkIpQg\", \"Ws3j291JNtzVMQ1ZvkFpXQ\", \"QcFppkgKLcrq5e16-HsvZw\", \"Wf4fpPWrI_rtIxb45ICC6g\", \"BSHVlMffEDXUvbZkY8HGDg\", \"i-d2lQxiJ7PtCEBpqo33pA\", \"F3fmzHQvjLtPw7-ROVGJ_g\", \"M52y5u5KBbjfw822W41_jw\", \"aXFA5_Z1w8bZK-WWIY6JCw\", \"G3HbkOTEe0tWG7J2iRoO-Q\", \"UaQXv15q6FLlaixg5m3JuA\", \"beQ5B97l-OS2-_35stouqQ\", \"VRz32zEYg4pH0XKeG8kDeA\", \"AsrUpZ6_heHfZuDadOK6hQ\", \"0QwRN5VurSYLB4Xm9fXk_A\", \"c7q3cZ-egTexSzWYt6rsXQ\", \"QANVbpS4Kr9Ks0Rtd2S15A\", \"kuZn3nVp_JJluM8s2q3yGQ\", \"Wp-8HZXo72XF34wEoEuaZA\", \"AvLxoYGMPVGND6ZYc_jdag\", \"6Ub2NCPQvEae5xWZNpv36g\", \"Gu-I8HZZfO-eniQwP7hCXQ\", \"fXLwbRobPzfJszj-l5QzBw\", \"sAmw93qTHYBnA87aajCJUQ\", \"VJ1OPuUi5p574-10xKnFHg\", \"RaVR4zzBL9onvC_2ddEP7w\", \"PP7DJV1tumafzZ_LP7UOrQ\", \"FNhlSM4cFG2WypltGoVC3Q\", \"dgS-u4lPdRkVm0Ng5L9m7Q\", \"P4PzyZcr5wOclmSNedPXqQ\", \"Q8eGJJffDlEXiA9Dht-Qyw\", \"7_BRw2KZrg3IGnxfpyWEBA\", \"GkHlTTjgOBz1zRzZNwlhWA\", \"-PWTALrCVPevYp8nxLlIAg\", \"m082jRa2ZYnpfTecwqyRvA\", \"BqbnoKh6XHFGvuSCnLonuw\", \"-BTy1UkmiIUCIk6AG1pKSQ\", \"y3zuqg7jcifFC1dKJes3Ww\", \"oPjcwYNgthUWVYfMLs_Alw\", \"2h8CxhSlND_GO85NxOrvbg\", \"ylQlX6IF_z8cuwLt9TaEfA\", \"5krSo6mC0c4munVqc6tueg\", \"0n6el5eWSYDtIFWMCBLRrg\", \"xuYCqcCYtLc686kENBxMSw\", \"z-bR7G4y5FpOfSEHS7bDjg\", \"sU-HIfhd3bi0jtkPBOh1EQ\", \"TaYH_b-v1FKgvsLt8cyeXA\", \"brzO7czIwQFlQ_1G8ccAXg\", \"G14AscyxFw2p6fi-ywB2yQ\", \"mf5JX7KWCUWaAeO4-ybWbQ\", \"_vH0_sx-mXvFwEoAyJNFXg\", \"sjUvmBZ50zG1RNIh_n70tA\", \"7GYq9GRdnN2agthhjJlLTg\", \"3flrdG77cL6tRpsGiZ_m9w\", \"o1CSbob0jmLm5f7qMz0kBQ\", \"xtYxDEb__jwKM30BNsz6kA\", \"BGlfMVa6h4OrscYtTR8-sA\", \"nnnymrLZrSqUMavkmI6sZQ\", \"soj4cMgepqEV0r5a_Qp5MA\", \"lyuG3Nbm3IYqCDVQc_7CsA\", \"GufwMMUkKaQIfCwXwZsAEA\", \"TThR1SPLPxENW4WW1yKitw\", \"AbFE96nG5G-QBKT6LrbP7A\", \"Xo1EwX6inpzItJ3y9L3M4w\", \"H3XvEOjzsIwHQ2BRYyul1g\", \"kZDZD8ACwwWEosEQ2jOm6Q\", \"ubE2cHGHXqMatAK465lOWw\", \"ZXWDa66k9qpVixNC3Z992g\", \"pLwrYY3qGxoVEua0d8flmQ\", \"YJtFs__IfP3efNuXIYOnDw\", \"zQVnIUNojDWE2j4p7am1nw\", \"8XVzu6PLrU3BrnOpHZTwdg\", \"pHGDQ9-w-W7Ve6xVyKYpow\", \"_KgcI52GMp8pepmZHbywkA\", \"C0KplLMhXZGsknm85wNffQ\", \"KJkp31jl9R3FetgRxrwdIw\", \"Qqa1x4Kkp06HJBCwaEsYmA\", \"RDyIJwnA7LFWFqdI5WjPig\", \"no-CHpXgaHQ6KFJ0KB8bBw\", \"Pe2z0g58wzFpknk4BTaIFQ\", \"_6K5uEAJLFTlQK30wQGe2A\", \"mmIi9IlRDejw4i0KwqOIGA\", \"P-pGD6CO8eF6XGDWU_8Aiw\", \"zz5K3eYzRf_g3BCkiDeMnQ\", \"z9Lh_S21UoNtwudlIJJePw\", \"KZ6imcwiK459yy6mRp9ISA\", \"jJUvgdJ9y5fvQjk2m8bgcA\", \"KlEPbDDAl_rXAMulVhvmCA\", \"O1HMw9Hhkyx1q17v9gQePg\", \"E5CSfI5YdqFk-VNOX0BoRg\", \"oSyh_rzqCtPai5cA3UTIZA\", \"q1h2fawb9N0iSF5ElpFbBw\", \"8aoRvoDPLnqICWrxQGGyfw\", \"Uzrwstq75mEzuHrvE19hEw\", \"WeSmKvFsfLYy_e1oV9b8tw\", \"4LCjCFKoB-lZuNh5-6F_iQ\", \"qilDDvC4MFNwc0JhnayHJg\", \"cpChYreJKT-TRSmKzaql4w\", \"L1H6MtcWhYoT9jem3gHJFA\", \"l0_kjEP0-0uP7T0NAYwOJg\", \"3FcH3NuXMW7YskVD0LtH-g\", \"9pvh0767GnCeL3cO8O9PlA\", \"dvUVzEWVGJtkdn8PZDq3Sg\", \"1wY2N_wi9b8buzUEzyEnMw\", \"vBOANjeo2i113afuRjTNcQ\", \"o15Q2BuHa-jvBu-z9s9yRA\", \"abM3XUko7mtjhxK6Jr6i5w\", \"SQTKXLnJdGpO6cNXlwj9Zw\", \"DIxgz3UPD35u4Kbf03oMQA\", \"7Mg2oq5yWMj0rucvvjn7PA\", \"AF1QipM6b71wurPxJmBeFATCXrqxzNb0jLacBIaklAAX\", \"_VBKl4m6ZgG7QF4dWdWtig\", \"VBd6YpE6TKcswQQKhbKt6g\", \"xdrS4T7mLymeUYPnduZ9ug\", \"WhF3FF8KdLWUcXCh6OVx9Q\", \"p3Gv3z77xRfCtIsiOjFUww\", \"3dynLyChDeDlg5wunvE7Rw\", \"T1NduewaIEEVs3t0ceUWgg\", \"B4sPfGFX0JvXFlxkNA3-Dw\", \"yL5tOqb0VnhZ18oVfpWISA\", \"DB0-aCtJEysRv5Gx415ayA\", \"v5mfRIhsqN8lhxjUmiC2fA\", \"_ZjEqadvCuc3WEDgI5zmkQ\", \"-K1iu5vdWoeC-o-zt7iIZA\", \"mjpbjIXP_7ddKsa3QfZNYQ\", \"1pecYKUqcayT3SSylBzOww\", \"uQp3CDiva0Sh9tj3DrwOsw\", \"W_s203GbrD3P0UJSYSpVEw\", \"z5qio57UKqURJ6SkEK6gOQ\", \"AryFG8QIuzJ-tsh7nSziMA\", \"lCprrDItNHVodrIppLHqvQ\", \"09USFD0b3qKG_er-DpJQPA\", \"reXi0aGtdn0_yYHWRFu4JA\", \"Nenw6kqKvfNmbvsUXIIt0g\", \"s2Gi_rwGmEQfLXUM2H7z3w\", \"UWX6CtzV7nltI9J0Wj381Q\", \"QVXy4YgCCe5ut-H0wSu2Bg\", \"VxNMKHKZblUu5HNpz3ILWA\", \"a4LwhuIqItYIPgRm4OQUpg\", \"NptaSr1MT-P20OkwHvPX8Q\", \"zrvIqNTc-rjTFLyOjFSxtQ\", \"2wz_pmP2HcHo2jXx_FxC7A\", \"VqvK18yfgDAKU9RdxIO1tw\", \"U2zgbc009IBI6_BiyBS-Ww\", \"suEs4pqoLLL-ak_qe13EKQ\", \"xQMkgr_4EkMFfT3HWImxSQ\", \"MjsVseo9dlZzqnIuViBXqA\", \"nXmNizX7wgynb5L575n_qg\", \"HuV7GypuzO3WFwU7OMHjZg\", \"SiE0dSvesaqPfnmg380bTA\", \"5-Dg8mhP5uIbJHyERgbT5g\", \"WvSnbyzvA1s9_-zRwBID4g\", \"WlY9Mol9V2MBYVHTbiaWBg\", \"6V6hgnfaQA1_IRLcIMGJog\", \"zT_lactY0fs5-lKYQhNmqw\", \"vY7Pz6AUUOaOfArMH2w0Hw\", \"vFXixKcgwBCjloe_G8JZKQ\", \"BPGuLhqtBJubdXR7SGMbpw\", \"lVzCHetFG9XVxSVQ2tFZyg\", \"11FT6Sh8E9HWr0poGK3MjQ\", \"jbfqiY8yIEabaPHH6rHQew\", \"kdJ1pJdfutdK6IaBrY7fpA\", \"TPjOoCR7wtb64dL4qQsvAg\", \"kUoTv6uHI2DSv3qhN8QeeA\", \"izI-4LGv9Dho2JNG6rEvEg\", \"jdl3KBjsZbJIT1eWCC3pZQ\", \"SgZJtGy_2ZwPdCSz5EaGiA\", \"CLDkUiTqb1rBAHgTpTMmdQ\", \"3jIhvtPH9I-EIr1vAGP-cw\", \"7Q6tpkV_4iLSjMaAIJ5Imw\", \"47TJwfuHBpvb_Jb7OaRoIA\", \"AF1QipPzm9kIMPCI4nJ9ykoTmNa7NaN7NSCkI-sHoyYb\", \"rtWt-aypnmxU65YHZDeJnw\", \"gOPgltGeZzwhGyyadkr1kg\", \"kAeOgLgxf4OQ4IeCYqQf3w\", \"8Nj27owCOI24MAxkKMJMRg\", \"MFPz41P_rV39LIryEkklfw\", \"YyTCetf5JjNC2xgLhLtYzQ\", \"OO_Bgmq9YlOAeo0-q0p--g\", \"7nyOV9f2JwK7HJgDvM55YA\", \"CgELaIatsZXdGnU8GF0tng\", \"Y9gJ_5fY1zFsbstcShg2yQ\", \"OaTwD9aKZRHD5rk9paCRHw\", \"E9wlUkdZnrXynYuS2jcY9A\", \"fpEH4c4FsAsuMox-u4pPnQ\", \"8XPUTulpeZ9MXg3m60Z8Aw\", \"-UsCI5rexhzcmFWXyHkTdQ\", \"Syad33M8Jstp94TuYwF1sQ\", \"pamspj6Fk7VHXZcGqjM9XA\", \"azMgSATpmF9liIKrdc7aMQ\", \"9CTvhBBpphEum73fkHBVTw\", \"HUG70GNjDRdCA5P-emwFsA\", \"Uh6AZ1dcLZJg0GWQWs-jWw\", \"01IzjRHOm_jvZYBp1DGRsA\", \"KvbGBYXN4rNRHtSkg6DP2g\", \"UmCQJSzSmJ2YzoHk4NpJKw\", \"qO1CDdEX7W4f_eqbs0Sz3Q\", \"oDWlHnGQRz8atSqFnQvskQ\", \"gwoXaB4rm-t9kz7FOVGt_A\", \"UrADoAKsW-YtMBQlqdXQHw\", \"O6B6FTkyT79X64AqIYbjFw\", \"qnv8t9DDrDuOX90gayzKGg\", \"Mbpt5d5eFPzZbEt877z9gw\", \"IC-N61zmHZmMsdTIL_vEMg\", \"6LwooPxtCzMeRwXoTmHGig\", \"bEDfhcMQUwibQmr7qNM73Q\", \"9fMgqJsT66v8XlASSiPtDQ\", \"RkKbHsgnzOXMCGFW07Vh9w\", \"IQV2l5BH-xQ_YkVRpadBBA\", \"VsZdmjrtrxZRMFFON_-eoQ\", \"GxBw_o_xqxIw1zQfMmtaJQ\", \"f0YmBZqi2Zn2Pc89HHqqlA\", \"qE1TJtgYEWw4NShE9F9Aqw\", \"n1D-o8LI5YK_0V3_jAWDZw\", \"qTY7NZ46IsAevCWOZfcSOA\", \"aG4VYVzpneVeQcDiRro_ug\", \"RR1DNA_fon7a3CuGIT_r0A\", \"E0dkGcSrCA9UDHfJitZ6Mg\", \"ORUUKj5Er3ehStHWzkvMVg\", \"AF1QipPLGypkd44Ptx7Piq2RPd-VCUvUm1eolLUaDJIN\", \"6Zur2oG-51-XaXkOwavRaw\", \"s5uk7VojyoPhmmC_Io4S9Q\", \"Nno00Eupmq24AevQHdUwrQ\", \"qYVn7Is9Y-Tolotb0wYDhw\", \"QdUvaBREYbP98b61_7L8QA\", \"mR_svRBbIc_hcqVI_WGChQ\", \"jlPoRO0wRXRtRp41gWD8-Q\", \"sAXf_j6mmLJ_SrBj8EC6NQ\", \"6YR-AkLxnMJLXdTBWeTTCA\", \"MaJ_jtukcH8Htu3-IlN8pw\", \"dmppnbOJA9bOfPJL_PCNXw\", \"qtKyRXQqAQWboJHPReMQrQ\", \"OlB-BHEei1ORFj3OrDHF1w\", \"52e_pSvMglWMO_vCMaCJNg\", \"05fRyUeEUlOpQTKFUnCpzQ\", \"7E9tTK7LEJjTePQGpKB6tg\", \"A7kySK0fIgqx8BvN8Ljaug\", \"eORqntvaXX2f53DopF0xPQ\", \"yR3Dp7X52wuwv2goLh16fg\", \"kFptukmOqu-9nA0a8b75Kg\", \"zzmA3S49xKvc5yn6sEA8OQ\", \"1CKjtZPvexWN1Qp-Fgm0Vg\", \"OWbNu225gPlKLq7Bpdu6UA\", \"J1T0TyDqlm6ylKpd-yqUsw\", \"0BWPnfgnA0GhgpUJFOudsA\", \"cHOLFK0YyHj9wZQOpLWBjQ\", \"rxkyNbwCNfsMfbL2GpVwnw\", \"kkJdH_SEVFg2D10lAMW4nA\", \"QTDkziH1Hf0H9hSoQibkLg\", \"RZhQ7x8ahUQUu6catN79-w\", \"CWI4EITeXXIS-cCotgWU3w\", \"LUepb3Ueu_wzn66-xozhsA\", \"MxcmYo4rxG1H8ggXkI2WBA\", \"1X_pBCP3a3aJQG617a8q5A\", \"9iChgpzMLuR-rRMuc8z0qA\", \"3aIPm5s4DFMjqN5FosxxOg\", \"wGFfa-ikoZ3dD3QVCEOZ2A\", \"Osb0eI7mNo5a7Bl8CC8R9A\", \"2t3PEHXaVHlC0-BtL-ph2g\", \"sX3N7rJe6ayeEHXltDdFVQ\", \"85SXO_CBqp37qsnDfv6M1w\", \"yTsmbi65uDECUrKyxzHw1g\", \"L9E84HNABLxqZCDMoDiKLg\", \"NG-g79EJ1h0PeKNj7bHgSg\", \"qVq33DE6fhI-YLLmbfuBEQ\", \"eVndxFx1ho7YDnZxic4rMA\", \"oncd5LtH29ypL7i6ZtCx6w\", \"_OrVmQNGxPj5ZtbPrRMHNA\", \"1frawj7Q1CbzlpThpkILLg\", \"n5UwfwAhDKa-8_cCQwa-Gw\", \"tcC_1FWV-FHWpFyDWOjuDw\", \"-mkTqgMcXDe_1wtMQpSI7g\", \"-UrtZusYV8TwRznE-X4TzQ\", \"m2thAQ4TrooPPND1qL_gBQ\", \"3CcFA_gneLSf1hihYFHk_w\", \"8j3LrnUu9urwJjuU_R3ZTg\", \"QzNMadOyfje_CEK4rnYSNw\", \"yRM3hWh7GMcZ4f3iBqT-LA\", \"uYGZz4ssWky2SOw76aFFUg\", \"R1xph-b8KhJx_4RPZTFrvw\", \"BQT5Y-xMsckd881Iu1JEWg\", \"Lv2qaDzMrPWLWISQsL51cg\", \"BVftm6lfPCCXvP60Yh0Eig\", \"-hLnKiRFH0BaCecrZNFUCw\", \"PU91B1SVyP85ww-f1yx7-Q\", \"LvAebaYdp1w85GZLXVQ2qQ\", \"z9lxTOBite5EHtE8ASSAvA\", \"hK6HSBWqouwTtUxeO-E0mg\", \"QlrMv8mhXuuj1q3qOk7TVg\", \"k7uyMXrdC0fLEI3PDgrSjw\", \"FPKMIl6ER-h44mqHZ7t5Ig\", \"Yb39GckSiZdvC-7CVV8AzQ\", \"y0gSyDkGggmuFSAfqAOijA\", \"QANVbpS4Kr9Ks0Rtd2S15A\", \"YLAg-RYAMJjUmUors4p2LA\", \"cxQX1qNbFGGOhVjRLWXhSA\", \"xqWuAHJ4BOFRVEtJMZrXCg\", \"K6ASRb0hlJP9pLDBeoAvMQ\", \"cXYkh2-B0FsM2dOlJ_zbyA\", \"8c5hbWxigzToVMtjutYhpQ\", \"E79DWvT1ELOcg_6eWb4pdw\", \"MOLx4cIEGMOwJZost9tuNQ\", \"5nX_Uy9vonnk1CuD4qbzhg\", \"GC2cq5K6ULVVvZPNtxJVgw\", \"WSCzwpug50o-GfI5KRfwbw\", \"0APqgUzM0tirLSTUPeV3oQ\", \"3GXyumIdJywrFBxczPRrJA\", \"-iwR3y2oQKvY2glZzoaFEg\", \"uLhR61rjlGFRYI3uUzoaTw\", \"hWJTaA94T2dsFfYKrPkdPg\", \"trRm01DRfOgAwSoHEN9wyw\", \"VoTwoHTfbI0GzCVFS_qDow\", \"7_FWgM0dO4ThFBtUqVSGOA\", \"ysbtfvWYR8Q7snqvOA3Kqg\", \"fBEvGikHeZ8gVs5oYhHWCg\", \"xG1xwgXAMlQHxWzsjoYtBA\", \"zO16q7w6UWtnH56yEQ4cWA\", \"cWnC55GKOSrFTptySAk3uA\", \"MdlafVrlQzW8grH04FIiMQ\", \"T18RNFPhhFEt401LQwSrpQ\", \"npVnPD-E5BMuIntdXtYxIg\", \"3P6BNRN6ECumDnmQyYGEDQ\", \"oV9hEh4pkTkQF7-Tr0f3OQ\", \"112XHthNApcld-uHMju7mw\", \"XqUIm9_HVM4Z-jZpd3b0Yw\", \"jZvoNgclxlbikUEgrEE4Ag\", \"efPoUwcdA7kHTzhUk67xJw\", \"zQZ_f5q_jKmj8R_1bZ09qA\", \"YRjgNr8_dmih3ZQFqURsZw\", \"7-eo4B4GN-5GOSDwhcZVBg\", \"RTbTeexGRT9QZdcSSXCM4g\", \"BCYds5SlVwg3k-mFWNz9-Q\", \"6cRlzDVbtQKSnw7hrR7h9g\", \"Iku7JsInHHi0-AHHQyt7Eg\", \"51X6AnMe_JqRFe1M6STp-g\", \"4PDYJm1gfDZgfQzIO4Kuxw\", \"b35mcIhl41KYBU_Vph-CKQ\", \"YL0Sm5AIcl9-VNQ7FNMApw\", \"NSHJhFuwKLH9hJzouBC1Pw\", \"iT63JOzKJUSvrWikXG0giA\", \"Em3mwtjomD9IEUZo1boqiw\", \"IAfwM2EKdxNKSZukdwRzFA\", \"rdhqnVKSRnTUD2sRpN3FRw\", \"OZMWXI5LlkogxKZFDl0xew\", \"FT4TCXw4t6LCJEhLtnBDwA\", \"unEvYYzSYPjX7NLK7wR-ZQ\", \"dR7LsHDD-QqIiTM2qQMdWA\", \"kv23EDunkiOKUkut_CuCnw\", \"hGTh-drMO-29RFTQn6AxkA\", \"_RiXuFnaMv57yX-NIed8Tg\", \"y92Q-ch_8B9CEHq3__ZvcA\", \"AF1QipMHwFoVoJoRBkZWpPb-wi6bmz6jphOkj-580G-P\", \"6gi_aCJaedg9F9tucoqY6g\", \"MFgQhFXfpJnzsMOOJ5seEg\", \"AJZ_5ySL4fiAFVOhFnGFaA\", \"3NaSqB5g1TYJhTp2bliDGA\", \"Qa-x4YFl3FATz4a_cLgMgw\", \"_VOD4xtVQ00rI_J8z0esXQ\", \"zFR_tEdH-8hvW-Zgn56D2A\", \"GTR0rEFPlE7I79mLCwhhEQ\", \"40htfJD8OPzaer41Keyo5w\", \"NNhwfqlCpuooQxSMHUUwTA\", \"K8zqKplJWR1oyXgsOuq2IA\", \"nzRzhyTxJz_bLcuO42HdsA\", \"ljgl3isLZ64WYrIoNRdeIA\", \"VFmzP8H2Tpz39eZVE-0kwg\", \"ugJMIJ6fPk4rLoGeDb1YjQ\", \"MNpuudYiUijXigSomysArQ\", \"2zHf99yqJ7UcZmk_fUz5vA\", \"snnv8hRyqYxhZkwH3BkuyQ\", \"7u4_EWb2raV6VYC9j96USA\", \"iU4nZOd1kSdKFH6AJJ-aJw\", \"2exxtQeW84As8MbMIiFGzA\", \"TjCKrhoGSKPKhvjybpAfdA\", \"JEnHPZLO4IVBJfo_tjQcSA\", \"ljMs3U-TBUE7iaeI_XhE1g\", \"xUkrptK2NVzztYF_jqPwtw\", \"ay6OwaVIDOH16vsBGyL34w\", \"tYlViHOvF2aTr7eG9x5ADg\", \"5QqJg5Y1FjXPzNvBAzckQw\", \"KJvWan8UhZ9dbNMVfZmv_g\", \"xBKk5W92NU18I8pl6HPTVw\", \"Ck3GHvumfFKUKwaesTbVfQ\", \"cAv3nbQR6-BilM8Pb6nHTg\", \"FY5IkqU08zZzk8ncEiJ-CA\", \"-kJOFbpGsWGYNqWomIPSMQ\", \"8q8HJcH8uzklyAd1z-LNtQ\", \"PsC0DVTEc7iBYatuPqfVag\", \"8boBGjDzf0tVAJQeRhJn1A\", \"fpO1-oxFAVUadMAX1XZHtQ\", \"oDpwHYcPQ72SoKbEZ7N7Rw\", \"pBhQ2anjLQQj3FzZLrCn5A\", \"UdSyJDzP_vPfP5FkL3ix1Q\", \"65sEzh1IivPexNEu06RTsw\", \"mdHbj4YZYCHxybFHghY5MQ\", \"JQi4PbCwMKtsgGRdVI914w\", \"s_9Rn6HgpbwVbUyqxH1LwA\", \"u5rabN_RM7c1bYB3ou9RAw\", \"6oX0oXz57Mr5rklb74kWrQ\", \"4eo6oNPh1fYWgAwSh20pug\", \"IWV_Rf0exWPjVXmGMhR-wA\", \"4vUMCh2jpMFwOiB7XOCccA\", \"wMlY0jxt_IVrSeCMsl56pg\", \"n1Slji05mpNMHZmhEF8dwA\", \"qO1CDdEX7W4f_eqbs0Sz3Q\", \"IUQy8G9xWuHhyhkKC3pn8A\", \"3LREolxH8tmZe_oklPGOTQ\", \"Olpo2id2SN21TOjipywo8Q\", \"y2Ego_4bUDRjUuJAAw_RcQ\", \"LstZoYOTOu1x-a05ZkJgbw\", \"ZKdj23CHjh1d96YyqTl-2Q\", \"w4s86MeEMrBWdamtpgJCxg\", \"5HnUM6Ondv_Drw7gLWHrog\", \"APr3kiq5kFeQDAby0gyGbg\", \"tN5boKcIYWxqskEiJK9xlw\", \"zDJW0bEILqYvc8Ilkl3GsA\", \"ssCtZ2Qnk_RSOvyOmd8ZoA\", \"Iq_Uq8rRXGSD83KcDkqFKQ\", \"YhlHXsuofNYTf1E2SEsvfg\", \"2oioqQV77JXgZyn5puKBXA\", \"F21k4wUJiOEKyt-XLkdxAw\", \"P2ySkuQbyZ0kjNzgKZ3-ww\", \"AF1QipPUmEr5CZeLWOTN6KVo_W_5Hx3ZDsmWCYzDJUdK\", \"YjG1PejXcn6fNpCkt_vKIQ\", \"UdVis1Vj6gdvd05WGmlebg\", \"iq-koEYkN-fUSbzEdUMrCg\", \"dpxEfVx0Pwno_K0qvhPQOw\", \"8mWiLtKYhNVUfDLp8KeeTg\", \"cLNMPm5t-wAKcTMZoTDRfA\", \"qoJkowmwLCVv4TLYq0kCSw\", \"fvh9C_g_u4YBTuJKniDUdg\", \"SCrgjnoHT490IwrsERrpHQ\", \"y0PwGLtw2Hri17BT4IFd8Q\", \"b5vQ2xLcmCSXbcBj7hMonw\", \"vexjDrSQymWr-RORen8N7A\", \"A_K8ekybfxMvhwwgmeiaEA\", \"ot0cKeGXxAWMBISVq9H8nQ\", \"cxQX1qNbFGGOhVjRLWXhSA\", \"w7F2V8VRleRm-vggrOvEng\", \"ytQl6nB2dzXxuCjT0T0tOQ\", \"kuAemT14tdyyAkMjpMRd_A\", \"goY8_nRDoTGlJww-ETRn7Q\", \"9PbvE69CQM1cZy1k-3YBfg\", \"9TY--wT5-_vDWGXtxOif6g\", \"z8J24F3c3ujDVfPsRVMAtQ\", \"92i2dojSJIDV-Z-7kyg5DA\", \"RESzl01n732Ab5QUThbKag\", \"cZP0sKYTlEAf1jBbLCDkwQ\", \"9CrhmoQhYuz-GGF23JVNBw\", \"jDUdqqcbJJiR2vdvlVVE1A\", \"kHDuS2BA1eCVDZlnIGYNiA\", \"faJ5mIXWju1FJXqt7a9Y6Q\", \"vFEABqGNJ76OjDExuBr14A\", \"5vxl0uyMNNUomDQdOk1iPg\", \"0Wukq4NzeYy447dJKyhkXw\", \"QWJdtoL-ZFeGy3d0eSdqhQ\", \"o1B4ToxconS9ATwd4kvKgA\", \"rm_3OPJbov0X9rL_LxpRGA\", \"zMCEOzVh25kWFXnnaZmd0Q\", \"lQfZm7CLi00d26blxbiwKw\", \"Ilp18CohuGJPGLGe2-KU0g\", \"eSUUnPwqr1GUrKtqFVOQ8g\", \"s_SBe3FYheh9y2R7lY_C3Q\", \"PoGhYrhk0kEauZvWNZ9VUQ\", \"dmy_Lu-4TPMatC7xuZqjaQ\", \"j9lXPLClUMSL25a2VQigmg\", \"cFljSeR9aD0yQFdR9xEWZg\", \"eZ0EfmPoBnNPIW4lxm4ndw\", \"ZsQ-h4HPqYF8YwlJBe4Uxw\", \"evz5yzuRNH0B_f-Ix_7Wfg\", \"VPwEWWbJiwvqA85aB_lywA\", \"9FIFAORdkzzttCoQGJS9bA\", \"9XAjQrDcyzcyiXfEpdBiQA\", \"sBATNUYPt3fNBzJ2eNyXVw\", \"fmhcRId3KjPvLmj8_p7ERw\", \"fgw8enMFRL8mI9TSHkdN8g\", \"DQXjdMbfWAevbhuvZizd9Q\", \"o952E6yuPjQa0CD0EcKLcQ\", \"v2fm-24hfCfzBiazWB3luQ\", \"NtYCOJwM7zZhWK6zdF0_MA\", \"M8w8NFKo6qJ4jvy3YgJqaQ\", \"Uaw_Z7FRMt5vdjcsgt5gbA\", \"0f-EQU0yUjxaSrz3tAld4w\", \"sIb-rOjfWmqnytgv2VYN_w\", \"q05-DCYLaMGCJcvBVWywdw\", \"r1wU8IUamLcin2b4D24LHQ\", \"bJUDZ9amBb7bnTj0Xq_A6w\", \"dgmqwTTAzp48SDvjNRTH8Q\", \"aqqzYH93YgEQCcyMeCffkQ\", \"hcOv5KXgFvLTrcMmSz7czw\", \"mh3aBWK5YDenrG-Phxdfsg\", \"qnv8t9DDrDuOX90gayzKGg\", \"v__cubK_9SSdttfM_A16TA\", \"Vik7yhmzcW6Vr5BUm1D14A\", \"I7W-WrmcfxRe-H6yVL58rw\", \"BX4H70SmklJnCQzzA84g2g\", \"cw1oticqAeUMo9Ywr8BRYQ\", \"BmlRToSFIEf8ok4MliqaFQ\", \"85SXO_CBqp37qsnDfv6M1w\", \"OPYDwn3871KjqEXCKPXTMQ\", \"l8c9XL4L6r9ZMh_A5DWQ7A\", \"IjZoj9QI3HmH8OB3QCKf9A\", \"O6bn-W-Ht0pqv9Cf70x5pA\", \"bVpvH1MHYx94PSmeAzv2jg\", \"GDhgktiViQf36EaMG2r2nA\", \"y5SHuzKEEZ-o9N9j9MXvRQ\", \"9codcCKn6ojXfavVs1GGlA\", \"w3xq65rb0tJm4_EtjSxfOA\", \"wBsQNmHlGmgY5pdaNmQsUg\", \"2dz1DHM8Y-OCZ7nvt-nENg\", \"t94jbpQXkGXkYLwd44MXuQ\", \"yXIne4gd3vD44FGu75zv1A\", \"NXWQnWSZp0WYfUuMbV0JKg\", \"UgtDCXCZReqfBc3wUnQ_jA\", \"bE0eL4S1ZDBtX51Fv41EdQ\", \"clFrJh-MBzAHDCSl1p4c7g\", \"vn3NDAIpOJnyVBpVfyrRtA\", \"NEoSo3kELbVXEL_2W75VKw\", \"GzhxQANlSG0wGwzK_tKlTw\", \"9ewm1M5IxTFVYvqe3qHgcQ\", \"MOLx4cIEGMOwJZost9tuNQ\", \"U4E170pO-r4qi6Pvg8lY3A\", \"TsmPmkv9qxj3zcGWB_Qahw\", \"Ofq89ILTXfaZOE5HZX_fqg\", \"PULEBbNgB_nrWLYAcryDWA\", \"dgmqwTTAzp48SDvjNRTH8Q\", \"vKDMGVxz5VJYVS1UxB-6ig\", \"V1bv2vAkKpwg7qlvnF4I4w\", \"J5ixaYFQpWEdX111QzIgow\", \"AF1QipMwFs7AU2tk4NKqDHo611Zlya_GBYvk72z08qZi\", \"jeUCGWHdAqwEfUVZEUVp5w\", \"7DQ4uG6__Uffs1yngZRRbQ\", \"E3HTImUb4xjPBa8D99Npdw\", \"k_-SLY1nWt4ZIRFQQ47oHA\", \"5ZHXGeJR7nNP20kfAjMUEw\", \"LxrsFpkdNQf57iuAGdm-6g\", \"AF1QipOBLZMZZi4iglSajW8Hj4zAZUFbWe2GJeWZpuYL\", \"fVAbxnWsv6fMhE4s-zhbBw\", \"jigZmO20dvwF3U08_zqLig\", \"5eHWywA1yLA6wbfSaAJB0w\", \"FEEaD2kaucLMhuDDKaMp-Q\", \"Ku6VI6NQeTiJVLTpW9wGWA\", \"WVhx_Zxk2psJh28Xm-VbCA\", \"C6UC9czokxa1zNEhNTTHJA\", \"lBy8rGgehXds55UPdDwfrQ\", \"Lsdkoln9s38glQCwimvofw\", \"vwmtsG9oDqpw5OvHkz9nuw\", \"MeAPEG37imyKHLm5d14I6Q\", \"4CC5FOOj7CWHhmAAo9QMyQ\", \"uhrNjivimNJg4XmxaQ15dQ\", \"VOCmb6viiOgXUReiSQOO0w\", \"6p6Doc5ukqRfrjOPmH4_cA\", \"eGTPvePyFCEmTZxU7M_AMQ\", \"CsreFDvWZYioQ2PJ3PlU_Q\", \"Tv3wuNx7NgtwE2xZzCFaSQ\", \"88KBurDru11ON9tnwemucA\", \"U585inZL4Wy3DHeJTybnmw\", \"EJwmnJqNMw4gBdkH-QfBCQ\"]\n", "download_panos_from_ids(panos, \"panorama_ids\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "r1tSn0eSn1w0" }, "outputs": [], "source": [ "# mappings\n", "COUNTRY_TO_CONTINENT = {\n", " \"AD\": \"Europe\",\n", " \"AE\": \"Asia\",\n", " \"AF\": \"Asia\",\n", " \"AG\": \"North America\",\n", " \"AI\": \"North America\",\n", " \"AL\": \"Europe\",\n", " \"AM\": \"Asia\",\n", " \"AN\": \"North America\",\n", " \"AO\": \"Africa\",\n", " \"AQ\": \"Antarctica\",\n", " \"AR\": \"South America\",\n", " \"AS\": \"Australia\",\n", " \"AT\": \"Europe\",\n", " \"AU\": \"Australia\",\n", " \"AW\": \"North America\",\n", " \"AZ\": \"Asia\",\n", " \"BA\": \"Europe\",\n", " \"BB\": \"North America\",\n", " \"BD\": \"Asia\",\n", " \"BE\": \"Europe\",\n", " \"BF\": \"Africa\",\n", " \"BG\": \"Europe\",\n", " \"BH\": \"Asia\",\n", " \"BI\": \"Africa\",\n", " \"BJ\": \"Africa\",\n", " \"BM\": \"North America\",\n", " \"BN\": \"Asia\",\n", " \"BO\": \"South America\",\n", " \"BR\": \"South America\",\n", " \"BS\": \"North America\",\n", " \"BT\": \"Asia\",\n", " \"BW\": \"Africa\",\n", " \"BY\": \"Europe\",\n", " \"BZ\": \"North America\",\n", " \"CA\": \"North America\",\n", " \"CC\": \"Asia\",\n", " \"CD\": \"Africa\",\n", " \"CF\": \"Africa\",\n", " \"CG\": \"Africa\",\n", " \"CH\": \"Europe\",\n", " \"CI\": \"Africa\",\n", " \"CK\": \"Australia\",\n", " \"CL\": \"South America\",\n", " \"CM\": \"Africa\",\n", " \"CN\": \"Asia\",\n", " \"CO\": \"South America\",\n", " \"CR\": \"North America\",\n", " \"CU\": \"North America\",\n", " \"CV\": \"Africa\",\n", " \"CX\": \"Asia\",\n", " \"CY\": \"Asia\",\n", " \"CZ\": \"Europe\",\n", " \"DE\": \"Europe\",\n", " \"DJ\": \"Africa\",\n", " \"DK\": \"Europe\",\n", " \"DM\": \"North America\",\n", " \"DO\": \"North America\",\n", " \"DZ\": \"Africa\",\n", " \"EC\": \"South America\",\n", " \"EE\": \"Europe\",\n", " \"EG\": \"Africa\",\n", " \"EH\": \"Africa\",\n", " \"ER\": \"Africa\",\n", " \"ES\": \"Europe\",\n", " \"ET\": \"Africa\",\n", " \"FI\": \"Europe\",\n", " \"FJ\": \"Australia\",\n", " \"FK\": \"South America\",\n", " \"FM\": \"Australia\",\n", " \"FO\": \"Europe\",\n", " \"FR\": \"Europe\",\n", " \"GA\": \"Africa\",\n", " \"GB\": \"Europe\",\n", " \"GD\": \"North America\",\n", " \"GE\": \"Asia\",\n", " \"GF\": \"South America\",\n", " \"GG\": \"Europe\",\n", " \"GH\": \"Africa\",\n", " \"GI\": \"Europe\",\n", " \"GL\": \"North America\",\n", " \"GM\": \"Africa\",\n", " \"GN\": \"Africa\",\n", " \"GP\": \"North America\",\n", " \"GQ\": \"Africa\",\n", " \"GR\": \"Europe\",\n", " \"GS\": \"Antarctica\",\n", " \"GT\": \"North America\",\n", " \"GU\": \"Australia\",\n", " \"GW\": \"Africa\",\n", " \"GY\": \"South America\",\n", " \"HK\": \"Asia\",\n", " \"HN\": \"North America\",\n", " \"HR\": \"Europe\",\n", " \"HT\": \"North America\",\n", " \"HU\": \"Europe\",\n", " \"ID\": \"Asia\",\n", " \"IE\": \"Europe\",\n", " \"IL\": \"Asia\",\n", " \"IM\": \"Europe\",\n", " \"IN\": \"Asia\",\n", " \"IO\": \"Asia\",\n", " \"IQ\": \"Asia\",\n", " \"IR\": \"Asia\",\n", " \"IS\": \"Europe\",\n", " \"IT\": \"Europe\",\n", " \"JE\": \"Europe\",\n", " \"JM\": \"North America\",\n", " \"JO\": \"Asia\",\n", " \"JP\": \"Asia\",\n", " \"KE\": \"Africa\",\n", " \"KG\": \"Asia\",\n", " \"KH\": \"Asia\",\n", " \"KI\": \"Australia\",\n", " \"KM\": \"Africa\",\n", " \"KN\": \"North America\",\n", " \"KP\": \"Asia\",\n", " \"KR\": \"Asia\",\n", " \"KW\": \"Asia\",\n", " \"KY\": \"North America\",\n", " \"KZ\": \"Asia\",\n", " \"LA\": \"Asia\",\n", " \"LB\": \"Asia\",\n", " \"LC\": \"North America\",\n", " \"LI\": \"Europe\",\n", " \"LK\": \"Asia\",\n", " \"LR\": \"Africa\",\n", " \"LS\": \"Africa\",\n", " \"LT\": \"Europe\",\n", " \"LU\": \"Europe\",\n", " \"LV\": \"Europe\",\n", " \"LY\": \"Africa\",\n", " \"MA\": \"Africa\",\n", " \"MC\": \"Europe\",\n", " \"MD\": \"Europe\",\n", " \"ME\": \"Europe\",\n", " \"MG\": \"Africa\",\n", " \"MH\": \"Australia\",\n", " \"MK\": \"Europe\",\n", " \"ML\": \"Africa\",\n", " \"MM\": \"Asia\",\n", " \"MN\": \"Asia\",\n", " \"MO\": \"Asia\",\n", " \"MP\": \"Australia\",\n", " \"MQ\": \"North America\",\n", " \"MR\": \"Africa\",\n", " \"MS\": \"North America\",\n", " \"MT\": \"Europe\",\n", " \"MU\": \"Africa\",\n", " \"MV\": \"Asia\",\n", " \"MW\": \"Africa\",\n", "}" ] }, { "cell_type": "code", "source": [ "!pip install pycountry_convert" ], "metadata": { "id": "B6zoYdhimygr" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "import requests\n", "import pycountry_convert as pc\n", "\n", "# Your Google Geocoding API key\n", "api_key = 'YOUR_KEY'\n", "\n", "# Function to fetch detailed address components from coordinates using the Google Geocoding API\n", "def get_address_details(lat, lon, api_key):\n", " url = f\"https://maps.googleapis.com/maps/api/geocode/json?latlng={lat},{lon}&key={api_key}\"\n", " response = requests.get(url)\n", " details = {\"Country\": \"\", \"Continent\": \"\", \"Province/Region\": \"\"}\n", " if response.status_code == 200:\n", " data = response.json()\n", " if data['results']:\n", " for component in data['results'][0]['address_components']:\n", " if \"country\" in component['types']:\n", " details[\"Country\"] = component['long_name']\n", " country_code = component['short_name']\n", " continent = country_to_continent(country_code)\n", " details[\"Continent\"] = continent if continent else \"\"\n", " elif \"administrative_area_level_1\" in component['types']:\n", " details[\"Province/Region\"] = component['long_name']\n", " return details\n", "\n", "def country_to_continent(country_alpha2):\n", " country_continent_code = pc.country_alpha2_to_continent_code(country_alpha2)\n", " country_continent_name = pc.convert_continent_code_to_continent_name(country_continent_code)\n", " return country_continent_name\n" ], "metadata": { "id": "zruVyBS-L2KK" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Qg7Wy5rtLoqm" }, "outputs": [], "source": [ "# create .txt caption files from google drive\n", "\n", "# in colab, mount google drive folder with path containing images\n", "# in a for loop, iterate over the images\n", " # for each image, create a txt file\n", " # read the coordinates of the image location from the file name\n", " # use the google geocoding API to fetch the address from the coordinates and write that into the txt file\n", " # save the txt file with the same name as the image file\n", "\n", "from google.colab import drive\n", "import os\n", "\n", "drive.mount('/content/drive')\n", "image_folder_path = '/content/drive/My Drive/Princeton/Senior/IW/Data/images'\n", "\n", "\n", "# Iterate over each file in the image folder\n", "for filename in os.listdir(image_folder_path):\n", " if filename.endswith('.jpg'):\n", " # Extracting latitude and longitude from the filename\n", " parts = filename.split('_') # Splitting the filename into parts\n", " try:\n", " # Assuming the last two parts are latitude and longitude\n", " lat, lon = parts[-2], parts[-1].rstrip('.jpg')\n", " lat, lon = float(lat), float(lon)\n", " except ValueError:\n", " print(f\"Skipping {filename}: unable to extract coordinates\")\n", " continue\n", "\n", " # Fetch the address using the Google Geocoding API\n", " details = get_address_details(lat, lon, api_key)\n", "\n", " # Create a text file with the same base name as the image file, but with a .txt extension\n", " txt_filename = os.path.join(image_folder_path, f\"{filename[:-4]}.txt\")\n", "\n", " with open(txt_filename, 'w') as f:\n", " f.write(\"StreetView360X, \")\n", " f.write(f\"{details['Country']}, \")\n", " if details['Continent'] != \"\":\n", " f.write(f\"{details['Continent']}, \")\n", " if details['Province/Region'] != \"\":\n", " f.write(f\"{details['Province/Region']}\")\n", "\n", " print(f\"Address for {filename} written to {txt_filename}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "IiRq9WJ90vvS", "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "outputId": "9a2fff44-1680-4b57-c565-94d1cd4152ce" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/drive\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "download(\"download_424ed8d9-85fc-4ec0-ac55-252b959588fe\", \"country_ids\", 45039)" ] }, "metadata": {} } ], "source": [ "# read from countries.txt and convert it to list of IDs (removing duplicates)\n", "from google.colab import drive\n", "import json\n", "\n", "drive.mount('/content/drive')\n", "\n", "file_path = '/content/drive/My Drive/Princeton/Senior/IW/panorama ids/countries_5000.txt'\n", "\n", "\n", "def collect_ids(file_path):\n", " with open(file_path, 'r') as file:\n", " data = json.load(file)\n", " del data['missed_countries']\n", " # Collecting all IDs across all countries in a set for uniqueness\n", " all_ids = set()\n", " for country_ids in data.values():\n", " all_ids.update(country_ids)\n", "\n", " return all_ids\n", "\n", "ids_set = collect_ids(file_path)\n", "download_panos_from_ids(ids_set, \"country_ids\")" ] }, { "cell_type": "code", "source": [ "# write all file names in a folder to file_names.txt\n", "\n", "import os\n", "folder_path = 'your_folder_path_here'\n", "file_names = []\n", "\n", "for filename in os.listdir(folder_path):\n", " if os.path.isfile(os.path.join(folder_path, filename)):\n", " file_names.append(filename)\n", "\n", "output_file_path = 'file_names.txt'\n", "\n", "with open(output_file_path, 'w') as file:\n", " for name in file_names:\n", " file.write(f\"{name}\\n\")\n", "\n", "print(f\"Filenames written to {output_file_path}\")\n" ], "metadata": { "id": "8R8Ws4cI3oHF" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# create .txt caption files containing location prompts for images from their file names\n", "\n", "import os\n", "import requests\n", "from collections import defaultdict, OrderedDict\n", "from tqdm import tqdm\n", "from google.colab import drive\n", "import json\n", "\n", "drive.mount('/content/drive')\n", "\n", "file_path = '/content/drive/My Drive/Princeton/Senior/IW/file_names.txt'\n", "\n", "output_path= '/content/drive/My Drive/Princeton/Senior/IW/captions'\n", "\n", "metadata_output_path = '/content/drive/My Drive/Princeton/Senior/IW/caption_metadata.txt'\n", "\n", "# Replace with your Google Geocoding API key\n", "api_key = 'YOUR_API_KEY'\n", "\n", "countries = defaultdict(list)\n", "continents = defaultdict(list)\n", "regions = defaultdict(list)\n", "total_images = 0\n", "\n", "line_count = 0\n", "with open(file_path, 'r') as file:\n", " for line in file:\n", " line_count += 1\n", "\n", "with open(file_path, 'r') as file:\n", " with tqdm(total=line_count) as pbar:\n", " for line in file:\n", " pbar.update(1)\n", " filename = line.strip()\n", " parts = filename.split('_')\n", " try:\n", " # Assuming the last two parts are latitude and longitude\n", " lat, lon = parts[-2], parts[-1].rstrip('.jpg')\n", " lat, lon = float(lat), float(lon)\n", " except ValueError:\n", " print(f\"Skipping {filename}: unable to extract coordinates\")\n", " continue\n", "\n", " details = get_address_details(lat, lon, api_key)\n", "\n", " # Create a text file with the same base name as the image file, but with a .txt extension\n", " txt_filename = os.path.join(output_path, f\"{filename[:-4]}.txt\")\n", "\n", " # two options\n", " # option 1: StreetView360X India\n", " with open(txt_filename, 'w') as f:\n", " f.write(\"StreetView360X, \")\n", " f.write(f\"StreetView360X {details['Country']}, \")\n", " if details['Continent'] != \"\":\n", " f.write(f\"StreetView360X {details['Continent']}, \")\n", " if details['Province/Region'] != \"\":\n", " f.write(f\"StreetView360X {details['Province/Region']}\")\n", " # option 2: IndiaStreetView360X\n", " # with open(txt_filename, 'w') as f:\n", " # f.write(\"StreetView360X, \")\n", " # f.write(f\"{details['Country']}StreetView360X, \")\n", " # if details['Continent'] != \"\":\n", " # f.write(f\"{details['Continent']}StreetView360X, \")\n", " # if details['Province/Region'] != \"\":\n", " # f.write(f\"{details['Province/Region']}StreetView360X\")\n", "\n", "\n", " # collect metadata\n", " # add to country, continent, and district counts\n", " countries[details['Country']].append(filename)\n", " if details['Continent'] != \"\":\n", " continents[details['Continent']].append(filename)\n", " if details['Province/Region'] != \"\":\n", " regions[details['Province/Region']].append(filename)\n", "\n", " total_images += 1\n", "\n", "# get countries, continents, and regions, sorted by frequency\n", "country_counts = {key: len(values) for key, values in countries.items()}\n", "continent_counts = {key: len(values) for key, values in continents.items()}\n", "region_counts = {key: len(values) for key, values in regions.items()}\n", "\n", "sorted_countries = OrderedDict(sorted(country_counts.items(), key=lambda x: x[1], reverse=True))\n", "sorted_continents = OrderedDict(sorted(continent_counts.items(), key=lambda x: x[1], reverse=True))\n", "sorted_regions = OrderedDict(sorted(region_counts.items(), key=lambda x: x[1], reverse=True))\n", "\n", "metadata = {\n", " \"countries\": dict(countries),\n", " \"continents\": dict(continents),\n", " \"regions\": dict(regions),\n", " \"sorted_countries\": dict(sorted_countries),\n", " \"sorted_continents\": dict(sorted_continents),\n", " \"sorted_regions\": dict(sorted_regions),\n", " \"total_images\": total_images\n", "}\n", "\n", "with open(metadata_output_path, 'w') as convert_file:\n", " json.dump(metadata, convert_file, indent=4)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "MXu2HusJBhPx", "outputId": "46ad3b77-cfdc-4b00-971c-6030ba3292cc" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 6342/6342 [20:57<00:00, 5.04it/s]\n" ] } ] }, { "cell_type": "code", "source": [ "# fetch X number of real images for the given countries\n", "\n", "import json\n", "from google.colab import drive\n", "drive.mount('/content/drive')\n", "\n", "# read in json file from txt\n", "json_file = '/content/drive/My Drive/Princeton/Senior/IW/caption_metadata.txt'\n", "with open(json_file, 'r') as f:\n", " metadata = json.load(f)\n", "\n", "all_files_path = '/content/drive/My Drive/Princeton/Senior/IW/all_files.txt'\n", "with open(all_files_path, 'r') as f:\n", " all_files = json.load(f)\n", "\n", "all_files = set(all_files)\n", "\n", "countries = [\"United States\", \"India\", \"Brazil\", \"France\", \"Russia\", \"Japan\", \"Spain\", \"Canada\", \"Italy\", \"Thailand\", \"Indonesia\", \"Australia\", \"Mexico\", \"Poland\", \"Norway\", \"Germany\", \"T\\u00fcrkiye\", \"Greece\", \"United Kingdom\", \"Philippines\", \"Sweden\", \"Argentina\", \"Cambodia\", \"Taiwan\", \"Finland\", \"South Korea\", \"Malaysia\", \"Romania\", \"South Africa\", \"New Zealand\"]\n", "continents = [\"Europe\", \"North America\", \"Asia\", \"South America\", \"Oceania\", \"Africa\"]\n", "regions = [\"Texas\", \"England\", \"California\", \"Nebraska\", \"Ontario\", \"Kansas\", \"New South Wales\", \"Ohio\", \"Maharashtra\", \"Nouvelle-Aquitaine\", \"Florida\", \"Minas Gerais\", \"Michigan\", \"Victoria\", \"Occitanie\", \"New York\", \"Rajasthan\", \"Castilla y Le\\u00f3n\", \"Uttar Pradesh\", \"Alabama\", \"Georgia\", \"Auvergne-Rh\\u00f4ne-Alpes\", \"Karnataka\", \"S\\u00e3o Paulo\"]\n", "\n", "IMAGES_PER_COUNTRY = 5\n", "\n", "files = []\n", "for country in countries:\n", " curr, i = [], 0\n", " curr_countries = metadata[\"countries\"][country]\n", " while len(curr) < IMAGES_PER_COUNTRY and i < len(curr_countries):\n", " if curr_countries[i] in all_files:\n", " curr.append(curr_countries[i])\n", " i += 1\n", "\n", " files.extend(curr)\n", "for continent in continents:\n", " curr, i = [], 0\n", " curr_countries = metadata[\"continents\"][continent]\n", " while len(curr) < IMAGES_PER_COUNTRY and i < len(curr_countries):\n", " if curr_countries[i] in all_files:\n", " curr.append(curr_countries[i])\n", " i += 1\n", " files.extend(curr)\n", "for region in regions:\n", " curr, i = [], 0\n", " curr_countries = metadata[\"regions\"][region]\n", " while len(curr) < IMAGES_PER_COUNTRY and i < len(curr_countries):\n", " if curr_countries[i] in all_files:\n", " curr.append(curr_countries[i])\n", " i += 1\n", " files.extend(curr)\n", "\n", "print(files)\n", "print(len(files))\n", "assert(len(files)==300)\n", "print(len(set(files)))\n", "\n", "\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "MKhR-hHxxYiT", "outputId": "5f712d5f-99e2-441c-a654-ba0a31a0e2c5" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n", "['0_3i8lekiiEXayPwus0mPHgg_38.51271605_-109.47755135.jpg', '1005_zz5K3eYzRf_g3BCkiDeMnQ_30.91348322_-90.12831068.jpg', '1008_GajBX64Gi1hZu4y_MvMKmA_48.21059283_-115.85746193.jpg', '100_vrKG71F3S4TLz961hDcbPg_45.46238555_-98.43349365.jpg', '1010_FUz1ZpAgvX1P3JfqcsOEcQ_43.71011725_-82.60973825.jpg', '0_czgxdGu5OGDeM4UMG5PESg_26.34864265_73.04373521.jpg', '1006_eQZfjxW480yE3P4v5zC7bA_14.78602252_76.09818941.jpg', '1007_ewnxwTcOwaXLHSNK2-7IKg_28.84396541_77.57780746.jpg', '1017_eMDtZhx7GqYW0RMH7HISvw_24.29572556_71.51888884.jpg', '1018_4zHrZELhDEmWZ8qkSlmLOw_23.44980291_78.82581227.jpg', '1001_irEnbVOUa_UQl5eywQ-z6Q_-29.47164594_-53.46900690.jpg', '1009_1CKjtZPvexWN1Qp-Fgm0Vg_-6.27612255_-35.49859678.jpg', '1019_qHc6tvdq7JFrC_IPceRO5w_-21.49727805_-41.34124209.jpg', '1029_7jR0qIj7LJjyEdYF108R0w_-2.93338470_-40.28288744.jpg', '1038_WZItHRVLU3Pts32qcH566A_-16.47392581_-39.06383094.jpg', '1003_6Ub2NCPQvEae5xWZNpv36g_44.87134535_1.80392266.jpg', '1023_XgIuN9KD6VBUZz3ItKDRzw_48.54252320_7.42720254.jpg', '1028_Zz0znWLIp53aLgMbVYIv-A_49.97662114_3.38253340.jpg', '1042_5ikLxiY2SgUwfQwaWAqp1w_50.28168626_3.98450178.jpg', '1043_1X_pBCP3a3aJQG617a8q5A_46.21420434_-0.55239215.jpg', '100_Sot4Jx_tz4pMJ8Q-ZEkXuA_54.74903146_74.98965468.jpg', '107_j9lXPLClUMSL25a2VQigmg_57.93023872_56.23611256.jpg', '1085_HOntkxyYRp4rGKmbO0Yx9g_55.53271938_41.96726133.jpg', '1119_3ZIXPv-SJkIR8ea0CfFkCQ_56.22986762_32.79465903.jpg', '1126_dKRfraTin2TfSafYXgrClw_59.43329984_33.76649303.jpg', '1011_924Jf4tar-vBHxrOTBM6Ag_26.33306767_127.86633985.jpg', '1015_HznJK3ryZL1IHoIOpzBUsg_43.88025211_143.99954269.jpg', '1065_qD5yvHVhKN2nl1xrvydKag_35.85022932_140.15008676.jpg', '1077_GuPYpk7fmw3Amp1zETRhIA_43.29234167_141.84510726.jpg', '1080_rLlPe4Eji5jYzqDZ_CXmFw_35.33308459_137.13217967.jpg', '1014_nS_lE-Ll8A-JqcFO1PxKPw_43.35650806_-3.01119126.jpg', '1026_EyzA3nt038MiKR45GXyquw_43.27011376_-3.90744075.jpg', '1030_ZQPrOfD1ZFOvG9dsayjR-A_39.70016849_3.41682049.jpg', '1032_zIx5L2yr2FUC2WF-aegKZw_43.26723296_-6.84991092.jpg', '106_BOEJ_dgBM3hebNAnsj9Qfg_37.49302914_-4.19382083.jpg', '1031_SGgYfWCu1tNzJSmheCyFQQ_46.25131466_-73.61187786.jpg', '1045_-zB-bw6C0KlOioSQvSzLyA_49.15831545_-57.44768654.jpg', '1048_YhwNHawJNg4ZjhyBR0Bibw_44.60011733_-75.69962255.jpg', '1061_tKFUKKdt3iHQuS_J344rjg_43.23607657_-79.80675292.jpg', '1089_BmQmvdHplB2jQFOuyKRrBg_44.56452813_-77.46797742.jpg', '1013_c3l66H7_RMvHWvayuo7n5g_43.28113636_13.33397094.jpg', '103_x1brqqLxhY1NO_3Um1V70A_45.87139502_11.06338048.jpg', '1046_D8PjOM-bU1H8YRlArHHHuw_44.58171318_10.81251184.jpg', '105_s1rD5ZtYl15cikJe-iXrAA_44.35074153_10.63147007.jpg', '1067_H9-ssyP96a9jNq4MO7V22w_41.83534663_12.88904726.jpg', '1006_LUru3bZzCEaTzzOXFNADWg_16.69551734_102.46637881.jpg', '1023_JTAEXoP4a8Wd3RaKhmmcVQ_15.05618299_102.50116024.jpg', '1024_JszNC8YMAuCrRAXYnd_olQ_17.52759082_101.73077359.jpg', '1043_T4E9NS2uzbXvpl8a4597-w_15.27868764_100.79560285.jpg', '1060_qW0D4bdeW0_QGVN9MeEDKA_15.67614573_100.61651821.jpg', '1002_8dY4n23vIXah-4fyZXpQdw_-8.14695691_113.11743561.jpg', '1053_3H0dl3yEk8OrIETV_q_ZyA_-0.35077948_117.43553814.jpg', '1060_ZySBiAl0eRcWnpJwx-VkZg_-0.23962988_117.12734917.jpg', '1089_dYEsFsaOJH5XbclwS04Q-g_-8.21821599_124.54032603.jpg', '1090_0ikZs6ZZggNs_SrDFXAncw_1.22629797_97.41759072.jpg', '1032_alZdIEGwfS_19fNFLrNlMA_-24.18369101_145.73304459.jpg', '1058_3QFl30hRhfTn-DJUE8-blQ_-37.77636864_144.94594390.jpg', '108_sU-HIfhd3bi0jtkPBOh1EQ_-33.95414230_136.24641018.jpg', '1093_V3_EzmS76oylZNzByH15gA_-37.87523837_142.29062445.jpg', '10_aq1JEmI6fjfJ444STr6zCQ_-24.35592418_151.29958021.jpg', '1011_6lHm0n9LhMpnfwepL8YMGg_16.33426699_-91.75046257.jpg', '102_ZFS06zbYaHoA1sHNjjBJ9g_19.04894243_-99.31674502.jpg', '1034_IH9UknfvOM8WXRNyY7J5Hg_20.65034166_-101.51653884.jpg', '1076_X_8ltzA0WxOOporjBkn3Dg_20.64618941_-100.30176436.jpg', '107__YQL8MsPoVdY-_kOm_M0Yw_26.75064373_-106.04783781.jpg', '0_EViu-jCQ3g2sGawYkzeJ3A_54.29258460_18.59956533.jpg', '1035_UKgyMo5_vy0pSESiRBF3Bw_53.57752041_23.10576033.jpg', '1044_ZtHhMSszRlqA1r329fkNHA_51.75002039_22.17306816.jpg', '1055_bPHWVPvAHuUWDI2YOnZNzQ_54.15873142_15.73555626.jpg', '1058_H7mbSRAPSXfQmWh0qOiJ7A_51.77137893_19.34762426.jpg', '1004_6L3RH0WXfUAzH8aPLr1rkA_63.29447409_9.84442952.jpg', '1014_cuoOe6TzmOStpgq2PGa90w_59.66251010_8.03838121.jpg', '1022_YhbC6o1pyHGxYxOOGGLaWw_58.66458778_6.71648133.jpg', '1027_kbPbb_tS-E2SlTlYE1T9iQ_59.74725045_10.20700297.jpg', '1035_BDsCHVrBs-mrW3hti7y-eg_59.26104561_10.41588957.jpg', '1034_QnIBVdxH5bSlwOcK0cy18A_52.75935010_12.42006342.jpg', '1040_OhSAIPqfhC3gb3Y63kloxg_48.52090922_8.06797735.jpg', '1061_EiDOmGAorTrOKBhUo5nUQg_53.88469495_11.65939521.jpg', '1105_VD7bNB5Hj5LbIGNN4jNf8Q_52.16414997_9.91251271.jpg', '1162_IQtyDV8ARkZ8Jkhb87N2Tg_50.82049607_6.97914478.jpg', '1007_XtXzrJnsLs1ncUJPKF_H2g_37.87158765_32.50509251.jpg', '1016_fgkjObU65iOJQu2TfsmFYw_39.27464511_36.74836550.jpg', '1087_swuBY1Jga6eAeEPVsg9IBg_41.30270287_27.23450835.jpg', '1152_35N6-xquiKu3kHmbg8AM0g_39.66461018_31.30555874.jpg', '1172_K02mgmuPhqNTAJimLudXwQ_40.82104439_31.12793844.jpg', '1004_BfObL-IhbFtNZcF7ypRLQw_35.21575227_25.70358029.jpg', '1020_BIfjfIQk-cW--_hc1luh6g_39.75839760_19.69686409.jpg', '1022_7nh2J-tKCkoPI0qTRdnvlQ_40.05348857_20.60172104.jpg', '1026_wJW6W9XCnwr5rpAdhdcu_Q_37.07541234_21.98875465.jpg', '1068_jVaupccUrZpMW2c3eNcM2g_39.99964997_23.57611523.jpg', '105_VwWiqJdHcZXPbCgh9A638g_50.72605973_-3.91284941.jpg', '1206_j0bmjfkO4FKOZHl-UiplZA_57.76819297_-5.59918709.jpg', '1224_8-IwjG-w3qoJEjvqQRIITQ_59.89191504_-1.31217796.jpg', '1284_2I58Zh200gqgC1zRH-CTnA_55.54820198_-1.69327096.jpg', '1325_SxVOX2W8_O-ikDojHTwIAA_53.86624529_-1.91674775.jpg', '1008_gcKoefiZmv-Buyiqt5dpSA_14.61695260_121.13117127.jpg', '101_yEDym0zUKyIQV7fRL5CEdQ_13.87274388_121.22697907.jpg', '1025_TGI2X6ce91DaKnwbShKWjw_11.44589831_125.49356967.jpg', '1052_m2BwFVjC-fobaLRA18Ea-w_15.02380932_120.67601272.jpg', '1066_BdObkdI9DrymfnrtB4kEvw_12.21765729_123.53038555.jpg', '1039_K3i9OpKD7U_QEeN4bwTQJA_59.33611094_18.05648091.jpg', '1040_0H2i06hgm3UFJrCvxm6unw_63.85207019_15.55586700.jpg', '1069_gCt79jy5oJfP5v1ynewkwA_58.93301718_11.26671078.jpg', '1110_GTtneBxfLkbF-7qKhYPxxA_64.58307318_18.68340995.jpg', '1113_GJ_tnrcVxLptItKX27TcOA_58.37897784_12.29833295.jpg', '1033_NDtilt9KFZc8NUCzM_hoEQ_-34.65126636_-58.62257949.jpg', '1056_bW_IQdUbWgBZDfBWdZIa2g_-32.15000677_-64.10942503.jpg', '1072_lu9RPZ722HDU-4MyqBQ3Mg_-30.65214419_-61.04063232.jpg', '1075_eynaN_NREBh4UNQ6-9ItsA_-32.15757145_-61.10995933.jpg', '1131_3w9DCT2tQ1lh7NVI6lYGkw_-32.79945507_-60.72866502.jpg', '100_HZSmQU81IuYnylew6UMhow_11.55327100_105.12172661.jpg', '1024_Z7FvAUP-DbajrEuzIjED1g_13.76109828_103.23446408.jpg', '1071_j6f2WdYulRZnsxiz1IblHA_13.82526979_105.24765125.jpg', '1112_VJoCwVazqnkDAWfNxiV3PA_12.27940747_105.25671327.jpg', '1214_GXB8aDn7c3Nmb88E_zj-aQ_13.36730823_103.84909800.jpg', '1033_qCEjrP1Etqc_lDBLkfW8iw_25.15273960_121.74445940.jpg', '1070_NOLgVM6SQ2YIjajPuvfzww_23.09837776_120.44345873.jpg', '1078_mEjCVxdhEyqPnF_GWxGVWQ_22.92583255_120.65246399.jpg', '1133__xLxiUru_r0ia9VdkTyJ3g_24.72834763_121.73040216.jpg', '1134_o42LUPmwkNj-b4L09J__kA_23.66203003_119.66593745.jpg', '101_FtFQQIrler8RMNnPTh2V2w_63.74999214_25.33328737.jpg', '1062_bVRYJUixUeKtPvEPDezKFg_64.74987766_28.25102699.jpg', '1096_Q9Gb3eahcEjMzksaOrNmTA_63.33499907_26.20828674.jpg', '1099_WUZbSSjbFfS9XVWy5rYREA_61.37352763_21.99394113.jpg', '1127_qzHuJd-jcCkPK6BxolnGjQ_62.94545772_21.54838472.jpg', '1019_Goy3wSYQOMFKY2tkCbq6Pw_37.74975365_127.23740930.jpg', '1021_KsB63xRY_s0IhNbw1kY_Ow_35.72797195_129.31650154.jpg', '1051_je_iFijYk6B7FtkDOiauoQ_37.31891557_127.06572322.jpg', '1092_fkjNRJsqa6deWJuoIS0AyQ_35.85407454_128.43142593.jpg', '1111_Tq1yhipGNqdI3yRmKlrV5w_35.69697187_128.38020757.jpg', '1015_IoY_9sRHuRaXux7PIpraQg_2.29062832_111.83035294.jpg', '1037_0pVyfsfpyaFmNb6uc_sUHw_1.69978266_103.48472342.jpg', '1108_78gucUAjLN_gk3STTC04rg_5.53765880_102.18251622.jpg', '1122_gNQjitFmec20H1V9Ot1Tqg_6.90932575_116.84725951.jpg', '1201_1LMsQH7oRXbiz_ac802_bw_3.21096799_101.67078881.jpg', '1219_7oaC0d5sei_znig87_13Pw_45.76129813_24.82035201.jpg', '1243_iKxTf-Tj-RivErpC1Kj8Lw_45.74377663_24.22531046.jpg', '1245_RU3pw1a8u4p--xqxYV4Tcg_47.08285465_22.11665590.jpg', '1254_z4ncD_vQJBfZcC2s0i22cA_45.58318326_25.45023083.jpg', '1291_fZ_utlwxf5ljY_DbQ3wQwQ_43.90834827_23.11643710.jpg', '1055_jDNFY6cgmYDUA0vmb9tE1g_-33.30002031_26.49991633.jpg', '1071_eoLhcm_IyEgeJeMydU8hQQ_-28.23665167_21.35062608.jpg', '1109_ljTeSrGIBBUFTPHOusxVtw_-30.71143982_25.10158145.jpg', '1125_eMkHu14HeRwkh5kBLV9Qgg_-33.97347855_25.62041721.jpg', '1185_uKVgeJVe-QqXRHZoboCp7w_-29.92013553_30.96470007.jpg', '110_SLwRon_0lmXZ25vlbMvKdg_-37.00852895_175.28979766.jpg', '1182_09KLhbOMrzGDutq64pUOMA_-38.35822830_176.75016100.jpg', '1193_CUwtKxSWJh6VbXBk1LzYEg_-45.82251877_169.53022208.jpg', '1205_ozM80sTxFcJZOLar91n8wg_-36.82818346_174.79026805.jpg', '1214_XqEvP4vw1Sa9UXk4vEXOIA_-38.66821919_174.62015981.jpg', '0_EViu-jCQ3g2sGawYkzeJ3A_54.29258460_18.59956533.jpg', '1000_vndrMkPBye9554GhnjixQg_37.86692756_-25.83342649.jpg', '1001_yjiX86BamJCkU_ZbClHQVA_42.06753405_19.51294901.jpg', '1003_6Ub2NCPQvEae5xWZNpv36g_44.87134535_1.80392266.jpg', '1003_MxJlrisy1jGza9yUiGpDKw_46.25772547_7.36365008.jpg', '0_3i8lekiiEXayPwus0mPHgg_38.51271605_-109.47755135.jpg', '1002_QTDkziH1Hf0H9hSoQibkLg_7.97632837_-80.41662365.jpg', '1005_zz5K3eYzRf_g3BCkiDeMnQ_30.91348322_-90.12831068.jpg', '1008_GajBX64Gi1hZu4y_MvMKmA_48.21059283_-115.85746193.jpg', '100_vrKG71F3S4TLz961hDcbPg_45.46238555_-98.43349365.jpg', '0_czgxdGu5OGDeM4UMG5PESg_26.34864265_73.04373521.jpg', '1002_8dY4n23vIXah-4fyZXpQdw_-8.14695691_113.11743561.jpg', '1006_eQZfjxW480yE3P4v5zC7bA_14.78602252_76.09818941.jpg', '1006_LUru3bZzCEaTzzOXFNADWg_16.69551734_102.46637881.jpg', '1007_ewnxwTcOwaXLHSNK2-7IKg_28.84396541_77.57780746.jpg', '1000_pMgT1G9shhP7Dhpl2QXpgg_-17.29863170_-70.98817317.jpg', '1001_irEnbVOUa_UQl5eywQ-z6Q_-29.47164594_-53.46900690.jpg', '1009_1CKjtZPvexWN1Qp-Fgm0Vg_-6.27612255_-35.49859678.jpg', '1009_xcLxJiRs14g5SC9jr_z75g_-34.48849399_-70.90693910.jpg', '1019_qHc6tvdq7JFrC_IPceRO5w_-21.49727805_-41.34124209.jpg', '1032_alZdIEGwfS_19fNFLrNlMA_-24.18369101_145.73304459.jpg', '1058_3QFl30hRhfTn-DJUE8-blQ_-37.77636864_144.94594390.jpg', '108_sU-HIfhd3bi0jtkPBOh1EQ_-33.95414230_136.24641018.jpg', '1093_V3_EzmS76oylZNzByH15gA_-37.87523837_142.29062445.jpg', '10_aq1JEmI6fjfJ444STr6zCQ_-24.35592418_151.29958021.jpg', '1042_PC3TwhopoQ6kU2OqmWbaHA_7.80867863_-2.10094263.jpg', '1055_jDNFY6cgmYDUA0vmb9tE1g_-33.30002031_26.49991633.jpg', '1071_eoLhcm_IyEgeJeMydU8hQQ_-28.23665167_21.35062608.jpg', '1079_7jgLrcELfSuuZ5Mt9582BQ_-4.46696532_39.48338738.jpg', '1109_ljTeSrGIBBUFTPHOusxVtw_-30.71143982_25.10158145.jpg', '1041_ho3KzyL8L3Hhg7jG2ZxEvw_31.55604632_-97.25221429.jpg', '1064_F_wu_TCrsJcfxSIl4tTHmA_32.42801257_-96.84240176.jpg', '1108_uZ4Ujr-7P9sp5md2is7V3w_33.27234831_-95.58449387.jpg', '114_lx2ZqH3hv8pDqigrt2LeBg_31.13004510_-99.32330345.jpg', '1203_JjofxCXBEuKXk1Ysqd_D3Q_27.22506962_-98.14217248.jpg', '105_VwWiqJdHcZXPbCgh9A638g_50.72605973_-3.91284941.jpg', '1284_2I58Zh200gqgC1zRH-CTnA_55.54820198_-1.69327096.jpg', '1325_SxVOX2W8_O-ikDojHTwIAA_53.86624529_-1.91674775.jpg', '1347_Ka3sx5_paV2ULSHrrupi2Q_50.69809333_-3.67414717.jpg', '1375_6gu7A5SddvSDTRwCgROU3Q_53.71029234_-1.27912877.jpg', '1045_AAWb3LOzxpjbzyw6BTiS3Q_35.46696882_-115.27224440.jpg', '1163_cFIhk4ZK498b50e8Aupqug_36.93454464_-121.76735283.jpg', '1180_p7xAxKZCmIFafR_SJkDHaw_35.14251940_-119.45663538.jpg', '1186_KrAkimkwV3J2aIdotKqLNQ_37.53665317_-121.20525276.jpg', '1240_fegx_jlNHpjoThnzXHgkWw_40.16969016_-120.36891420.jpg', '1031_Sa7JzSIVgr1u1USNW-WW_Q_41.44168003_-99.72539693.jpg', '1128_XcpQWo3T4V22IEsJQDYCYg_41.46185886_-96.77973854.jpg', '1364_-NF2VLntl4gNlXbg_8kFcw_41.24228084_-96.66018645.jpg', '1422_NAZDsv5iy_yQn6jYZzoFFg_42.04215747_-100.83151130.jpg', '1443_R2N86C1Nisbk6L9rxFzsxw_41.43098096_-96.76676386.jpg', '1048_YhwNHawJNg4ZjhyBR0Bibw_44.60011733_-75.69962255.jpg', '1061_tKFUKKdt3iHQuS_J344rjg_43.23607657_-79.80675292.jpg', '1089_BmQmvdHplB2jQFOuyKRrBg_44.56452813_-77.46797742.jpg', '1135_I-0fMXjF_Sl6Kzi6QVwutg_44.36544320_-79.69627478.jpg', '1156_SzAAbOsC8B8JWePf9c3MWg_43.55042701_-79.61589612.jpg', '1083_gBkj2Qd67-qSR_4CKVMWIw_39.39391086_-96.41358154.jpg', '1161_fiTM1xXFPrW2OCP-KsNdkw_37.26785901_-97.76318409.jpg', '1240_2SlEtkfmGMKxMPzTgN3aQg_39.77226289_-100.03511797.jpg', '1329_UD-x4q7agDcPStqCWEKzjA_39.71224141_-97.35981488.jpg', '1498_pPRGNyVbU_NsrRf59V0bDQ_38.98599869_-94.61979706.jpg', '1109_gf2zt57-fv9NtpqaqGC4xA_-35.65429116_147.84469396.jpg', '1115_HIt6Upg2o3q0zknZFfSbmQ_-30.96716596_152.83334742.jpg', '1230_NRdxQMlI5VCJ0tUeFbMTVQ_-33.38148803_148.00127797.jpg', '1281_ID5qdTxGLfvw4aPfRdk4qw_-28.73153164_152.61846866.jpg', '1299_MY8fcCpivQ4DmbGFrUmgbQ_-28.92851513_153.49285591.jpg', '1020_bAJfg-5pjGtzY3TB4m2Zgw_40.88656183_-82.42882971.jpg', '1155_snY56DfNn7lLLjVPSuuXkg_38.83127922_-82.51753568.jpg', '1167_hYhKqekSgY13Qi3W58ujLw_41.24539425_-82.38691166.jpg', '1182_Y2lywy64sxXr1_vDQxndXA_40.79307311_-81.43565045.jpg', '1247_d0_fhB_PJU54SgFAermnKw_41.16708697_-80.69610259.jpg', '1029_zrTk7uLDX6xExB4qZ3uCtA_18.67827302_73.73416972.jpg', '1220_c3eSFrjC94dRQpm4cleKFg_19.10792358_77.49288234.jpg', '1454_lhUIUBqQpUju0WqBBZP1nA_16.99278065_73.29336382.jpg', '151_BYGMzzVEhB9NBxvSZ0DcBA_17.99075804_74.43155213.jpg', '1673_LxEAnOIvX4QTJD6gL6fI2Q_18.96278234_74.75364898.jpg', '1043_1X_pBCP3a3aJQG617a8q5A_46.21420434_-0.55239215.jpg', '1160_wdOv9VgirjEDx2pBDu2-Xw_45.99321611_0.64587533.jpg', '1270_8BCSOlVm-y1fZsWUnvh84g_44.80653350_-0.62930843.jpg', '1282_hnUmyZWlx4BNT4lWP0kshg_45.58319044_1.71979083.jpg', '1309_W8fY2HIQ5mK1xNXvb169PQ_45.12715875_1.58055964.jpg', '102_Nl7vCPBQH8qNgK_u9ISRbA_26.46335459_-80.10290633.jpg', '103_d6XLKlWpampB9jANBDNI_w_26.60708730_-82.11070116.jpg', '1119_3tuRSA0Am1Z8kOwUA5e-IA_29.39128563_-81.63866776.jpg', '1169_ictckD9bcendrROpkhHUBQ_27.49531005_-82.71085548.jpg', '120_akqj_RCfNsVM-Ka6Eaaong_28.30372231_-81.41672396.jpg', '1066_BAeDw8i50UUC6ZnDwJbUjg_-21.28272083_-44.76051177.jpg', '1249_P6EKpg3GZnfrxYZRLHfI9Q_-18.96695802_-43.25607938.jpg', '1268_antKfvwX_KsenqhezIfwMw_-17.85595747_-42.85849559.jpg', '1285_nJQONjK1SFIcBr8nixAljA_-17.31502304_-44.23413915.jpg', '1404_YC4OrX9cZEcYMoqUhme_4A_-20.73407320_-46.60125770.jpg', '1010_FUz1ZpAgvX1P3JfqcsOEcQ_43.71011725_-82.60973825.jpg', '1027_mlFjC-5HbipRtpw13dNBAA_42.55983937_-83.83378278.jpg', '112_keM_WJ9I8ibwSQFwsRg2iA_45.31945799_-85.25889363.jpg', '1499_qHwKn9WUgPRorTmpxxFrCQ_45.40536813_-87.53342374.jpg', '1681_nlkcdcFkc7oUnn_3w1CN7Q_44.97251352_-84.68254912.jpg', '1058_3QFl30hRhfTn-DJUE8-blQ_-37.77636864_144.94594390.jpg', '1093_V3_EzmS76oylZNzByH15gA_-37.87523837_142.29062445.jpg', '1104_83_07y8Mx8fcfRUgQ37N9g_-36.60681919_142.35770258.jpg', '1149_QI9nA5re6N6TePZmStfAAA_-38.00104355_145.19074495.jpg', '1179_gZhfdThAaOpDRgTqjTc76w_-36.75004899_143.83334816.jpg', '1003_6Ub2NCPQvEae5xWZNpv36g_44.87134535_1.80392266.jpg', '109_Sqqd1lK1OW29OD0a4xZySg_43.89094717_2.12904542.jpg', '1352_NfBW_5ZHx4lEjHxckbVayw_44.57465656_2.27104268.jpg', '1401_wuB4NyNynGlCGolPHKhoMw_44.10029923_0.93360995.jpg', '1494__GGSD_AHPygj9s-zKPYQWA_43.18187324_2.36136220.jpg', '102_NBW4pKuCwLnXiou23SetAw_43.88628461_-75.44721170.jpg', '1046_Kf0iwzKPW36kkZ6pGW2D2g_43.15508682_-78.52003190.jpg', '1059_KCpMF74gqrnBq3788ubDaA_42.27453671_-78.67213403.jpg', '1067_idAmfmPM3vJy7lr9pQaMxw_42.67032135_-77.63532371.jpg', '1195_Jo6t6eB9iX3jzdyIGep0iQ_42.09712378_-79.23654269.jpg', '0_czgxdGu5OGDeM4UMG5PESg_26.34864265_73.04373521.jpg', '1018_K_CnadLQtLytSj1_0ItWfw_25.39149086_75.66815178.jpg', '1050_QfEbA5ipMq_aJxYUMp9nZw_29.11263243_75.16590873.jpg', '1101__OAIHD6busATq9O-rflHhA_24.99912602_72.27140492.jpg', '1156_Egsz4Ozloi9hKnovTJzjag_26.92001916_75.80019239.jpg', '1082_hziQdMTjLOF1rOZx3xEZQg_40.93649856_-5.57933611.jpg', '1095_qOZgOVU4bk-AT9vT2hc7mA_42.89729973_-4.88654863.jpg', '127_74cwu8-k-VI0Vkt-2dHQkw_42.83028177_-3.42633341.jpg', '1351_ttzpZtfmFhAUxcxOBnv98A_42.22422601_-3.58946221.jpg', '1366_2JW4ly7WkY6dX4KWMmRP-w_41.09645231_-4.23946487.jpg', '1007_ewnxwTcOwaXLHSNK2-7IKg_28.84396541_77.57780746.jpg', '1174_MF1uy4A861qnCFTm6o-UWQ_26.71556391_84.24101978.jpg', '1484_CmedwdVM6Ttfx8G8RuCfkw_27.70418953_79.62344651.jpg', '150_YnmG2hm9tILSR8mDch3N7A_26.54954609_80.63316950.jpg', '1524_eqz_CidtlD1AfnrvL_CUJw_26.28696774_80.43759541.jpg', '1097_LjsxjYHOXQSmCEG3gbyl0A_31.79686890_-88.23749968.jpg', '1141_ObDFYkNi-BJzOfTEqXCbYg_31.58737316_-85.72534679.jpg', '148_IrxBg6byVMbO0NsVRT1nyA_32.52465198_-85.85111044.jpg', '1565_g6jhDC_AJYHF7LG7iH5wHw_31.97764056_-87.13050595.jpg', '1579_mPziNZ9zkmh8uI9cQSXhtQ_31.22681430_-86.69140337.jpg', '1068_3sO0ZQo3sjhc0IY7lKa-EA_33.79530237_-85.26823597.jpg', '1226_8LIpaca81giERfcgx0jF7A_33.80298946_-84.60292915.jpg', '1678_QchiLZM7Y5gvs-xybJiPAw_34.92516360_-85.24117105.jpg', '176_qbT-lXLHLSO7tC7oUscvYA_33.27927499_-84.87944661.jpg', '1827_EvwGJWpdlkWUdp6rZfLWmw_34.98664344_-84.37116354.jpg', '1094_r_KPCjbpT2lX-8OoFhdnwQ_45.41757879_3.28442160.jpg', '1154_siTahmEBRwB0Grs_D210ng_45.63128136_5.57101479.jpg', '1209_ocxZptpV-rC7purrKEQeEw_46.53090695_3.31630801.jpg', '128_RCGI5mvak7Ly83Hbct28aw_44.94412257_4.73007454.jpg', '1305_UCAt9sq5VZ4J00bjQ2yMyg_44.92210444_2.83748807.jpg', '1006_eQZfjxW480yE3P4v5zC7bA_14.78602252_76.09818941.jpg', '104__Km5hyh3aPiTi8rayfG83Q_13.76075839_76.34866136.jpg', '1121_7_HREIKqxLyexCmJgB2hxw_12.71641372_77.38228883.jpg', '1161_eS-E3F2a9GKG2YX-E4Prmw_14.41521161_75.43938244.jpg', '1211_pa3IO2QP8tboXCvHb-XExw_13.12682489_77.07273565.jpg', '1051_o8hfVlryqeGc9cigZFODDw_-23.57207634_-46.03870867.jpg', '112_vYWsD3Vj7nMc-80MWEj50A_-21.91689200_-47.61703962.jpg', '11_1Unb1cAHVEGv8asYhMGhwg_-23.05666100_-49.62636121.jpg', '130_GAHBr-itzIHXxris6A410g_-21.06397620_-47.74429794.jpg', '138_LJvYcY86FcdHMXq0XLZz0A_-21.63760151_-50.50008216.jpg']\n", "300\n", "264\n" ] } ] }, { "cell_type": "code", "source": [ "!pip install torch-fidelity\n", "!pip install torchmetrics\n", "!pip install Pillow" ], "metadata": { "id": "f78isuAM8-g0" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "!pip install pytorch-fid\n", "!pip install scipy==1.11.1\n", "!pip install diffusers\n", "!pip install accelerate" ], "metadata": { "id": "YHis5fltJPsW" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# calculate FID scores\n", "\n", "from google.colab import drive\n", "drive.mount('/content/drive')\n", "\n", "streetview_path = \"/content/drive/My Drive/Princeton/Senior/IW/Data/streetview_clip\"\n", "sd_path = \"/content/drive/My Drive/Princeton/Senior/IW/Data/sd_clip\"\n", "ldm3d_path = \"/content/drive/My Drive/Princeton/Senior/IW/Data/ldm3d_clip\"\n", "dataset_path = \"/content/drive/My Drive/Princeton/Senior/IW/Data/real_images\"\n", "\n", "print(\"streetview fid:\")\n", "!python -m pytorch_fid --device cuda:0 \"/content/drive/My Drive/Princeton/Senior/IW/Data/real_images\" \"/content/drive/My Drive/Princeton/Senior/IW/Data/streetview_clip\"\n", "print(\"streetview fid:\")\n", "!python -m pytorch_fid --device cuda:0 \"/content/drive/My Drive/Princeton/Senior/IW/Data/real_images\" \"/content/drive/My Drive/Princeton/Senior/IW/Data/sd_clip\"\n", "print(\"ldm3d fid:\")\n", "!python -m pytorch_fid --device cuda:0 \"/content/drive/My Drive/Princeton/Senior/IW/Data/real_images\" \"/content/drive/My Drive/Princeton/Senior/IW/Data/ldm3d_clip\"" ], "metadata": { "id": "D2ZJFbHvd3bb" }, "execution_count": null, "outputs": [] } ], "metadata": { "colab": { "provenance": [], "machine_shape": "hm", "gpuType": "A100" }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" }, "accelerator": "GPU" }, "nbformat": 4, "nbformat_minor": 0 }