{"id":96,"date":"2025-02-24T20:22:32","date_gmt":"2025-02-24T20:22:32","guid":{"rendered":"https:\/\/database.victorzsantos.com\/?page_id=96"},"modified":"2025-02-24T22:16:29","modified_gmt":"2025-02-24T22:16:29","slug":"python","status":"publish","type":"page","link":"https:\/\/database.victorzsantos.com\/?page_id=96","title":{"rendered":"Python"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"96\" class=\"elementor elementor-96\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-31b4428 e-flex e-con-boxed e-con e-parent\" data-id=\"31b4428\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c10474e e-n-tabs-mobile elementor-widget elementor-widget-n-tabs\" data-id=\"c10474e\" data-element_type=\"widget\" data-settings=\"{&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"202393422\" aria-label=\"Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-2023934221\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-2023934221\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tPython 1\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-2023934222\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-2023934222\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tTerminal\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-2023934223\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-2023934223\" style=\"--n-tabs-title-order: 3;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tTab #3\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-2023934221\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-2023934221\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-7840691 e-con-full e-flex e-con e-child\" data-id=\"7840691\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32bc5ed elementor-widget elementor-widget-text-editor\" data-id=\"32bc5ed\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>import os<\/p><p>import requests<\/p><p>import pandas as pd<\/p><p>import time<\/p><p><br><\/p><p># Google Maps API Key<\/p><p>GOOGLE_MAPS_API_KEY = &#8220;AIzaSyCard2PScx5ziEsMJ8MwysTeEUHh8f19iY&#8221;<\/p><p><br><\/p><p># Create a directory to store images<\/p><p>IMAGE_DIR = &#8220;roof_images&#8221;<\/p><p>os.makedirs(IMAGE_DIR, exist_ok=True)<\/p><p><br><\/p><p>print(&#8220;The script is starting&#8230;&#8221;)&nbsp; # Debugging print<\/p><p><br><\/p><p># Function to format the address using Google Maps API<\/p><p>def format_address(address):<\/p><p>&nbsp; &nbsp; print(f&#8221;Formatting address: {address}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; time.sleep(1)&nbsp; # Add a delay to avoid blocking<\/p><p>&nbsp; &nbsp; url = f&#8221;https:\/\/maps.googleapis.com\/maps\/api\/geocode\/json?address={address}&amp;key={GOOGLE_MAPS_API_KEY}&#8221;<\/p><p>&nbsp; &nbsp; response = requests.get(url)<\/p><p>&nbsp; &nbsp; if response.status_code == 200:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; data = response.json()<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; if data[&#8220;status&#8221;] == &#8220;OK&#8221;:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formatted = data[&#8220;results&#8221;][0][&#8220;formatted_address&#8221;]<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(f&#8221;Formatted address: {formatted}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return formatted<\/p><p>&nbsp; &nbsp; print(f&#8221;Could not format address: {address}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; return address&nbsp; # Return original if formatting fails<\/p><p><br><\/p><p># Function to get latitude and longitude using Google Maps API<\/p><p>def get_lat_lon(address):<\/p><p>&nbsp; &nbsp; print(f&#8221;Getting coordinates for: {address}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; time.sleep(1)&nbsp; # Add a delay to avoid blocking<\/p><p>&nbsp; &nbsp; url = f&#8221;https:\/\/maps.googleapis.com\/maps\/api\/geocode\/json?address={address}&amp;key={GOOGLE_MAPS_API_KEY}&#8221;<\/p><p>&nbsp; &nbsp; response = requests.get(url)<\/p><p>&nbsp; &nbsp; if response.status_code == 200:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; data = response.json()<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; if data[&#8220;status&#8221;] == &#8220;OK&#8221;:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; location = data[&#8220;results&#8221;][0][&#8220;geometry&#8221;][&#8220;location&#8221;]<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(f&#8221;Coordinates for {address}: {location[&#8216;lat&#8217;]}, {location[&#8216;lng&#8217;]}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return location[&#8220;lat&#8221;], location[&#8220;lng&#8221;]<\/p><p>&nbsp; &nbsp; print(f&#8221;Could not get coordinates for: {address}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; return None, None<\/p><p><br><\/p><p># Function to fetch satellite image<\/p><p>def fetch_satellite_image(lat, lon, address):<\/p><p>&nbsp; &nbsp; url = f&#8221;https:\/\/maps.googleapis.com\/maps\/api\/staticmap?center={lat},{lon}&amp;zoom=20&amp;size=600&#215;600&amp;maptype=satellite&amp;key={GOOGLE_MAPS_API_KEY}&#8221;<\/p><p>&nbsp; &nbsp; print(f&#8221;Fetching image for {address} at {url}&#8221;)<\/p><p>&nbsp; &nbsp; response = requests.get(url)<\/p><p>&nbsp; &nbsp; if response.status_code == 200:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; image_path = os.path.join(IMAGE_DIR, f&#8221;{address.replace(&#8216; &#8216;, &#8216;_&#8217;)}.png&#8221;)<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; with open(image_path, &#8220;wb&#8221;) as file:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file.write(response.content)<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; print(f&#8221;Saved image to {image_path}&#8221;)<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; return image_path<\/p><p>&nbsp; &nbsp; else:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; print(f&#8221;Failed to fetch image for {address} with status code {response.status_code}&#8221;)<\/p><p>&nbsp; &nbsp; return None<\/p><p><br><\/p><p># Load CSV with separate address columns and process it<\/p><p>def process_csv(csv_file):<\/p><p>&nbsp; &nbsp; print(f&#8221;Reading CSV file: {csv_file}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; df = pd.read_csv(csv_file)<\/p><p>&nbsp; &nbsp; print(&#8220;CSV read successfully!&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; df[&#8220;Full Address&#8221;] = df[&#8220;Street Address&#8221;] + &#8220;, &#8221; + df[&#8220;City&#8221;] + &#8220;, &#8221; + df[&#8220;State&#8221;] + &#8221; &#8221; + df[&#8220;Zip Code&#8221;].astype(str)<\/p><p>&nbsp; &nbsp;&nbsp;<\/p><p>&nbsp; &nbsp; print(&#8220;Formatting addresses&#8230;&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; df[&#8220;Formatted Address&#8221;] = df[&#8220;Full Address&#8221;].apply(format_address)<\/p><p>&nbsp; &nbsp;&nbsp;<\/p><p>&nbsp; &nbsp; print(&#8220;Processing addresses for images&#8230;&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; for index, row in df.iterrows():<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; address = row[&#8220;Formatted Address&#8221;]<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; print(f&#8221;Processing: {address}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; lat, lon = get_lat_lon(address)<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; if lat and lon:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(f&#8221;Fetching image for {address}&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; image_path = fetch_satellite_image(lat, lon, address)<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; df.at[index, &#8220;Image Path&#8221;] = image_path<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; else:<\/p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(f&#8221;Skipping {address}, no coordinates found.&#8221;)&nbsp; # Debugging print<\/p><p>&nbsp; &nbsp;&nbsp;<\/p><p>&nbsp; &nbsp; output_csv = &#8220;output_with_images.csv&#8221;<\/p><p>&nbsp; &nbsp; df.to_csv(output_csv, index=False)<\/p><p>&nbsp; &nbsp; print(f&#8221;Processing complete. Output saved to {output_csv}&#8221;)&nbsp; # Debugging print<\/p><p><br><\/p><p>print(&#8220;Starting CSV processing&#8230;&#8221;)<\/p><p>process_csv(&#8220;kansas.csv&#8221;)<\/p><div><br><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-2023934222\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-2023934222\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-313abb1 e-con-full e-flex e-con e-child\" data-id=\"313abb1\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-35777db elementor-widget elementor-widget-text-editor\" data-id=\"35777db\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>cd ~\/Desktop\/RoofDetection<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51e55b8 elementor-widget elementor-widget-text-editor\" data-id=\"51e55b8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>python3 main.py<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-2023934223\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-2023934223\" data-tab-index=\"3\" style=\"--n-tabs-title-order: 3;\" class=\" elementor-element elementor-element-00bc109 e-con-full e-flex e-con e-child\" data-id=\"00bc109\" data-element_type=\"container\">\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-187075e e-flex e-con-boxed e-con e-parent\" data-id=\"187075e\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c096c14 elementor-widget elementor-widget-heading\" data-id=\"c096c14\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Add Your Heading Text Here<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f96dd12 e-flex e-con-boxed e-con e-parent\" data-id=\"f96dd12\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a7c80c elementor-widget elementor-widget-heading\" data-id=\"3a7c80c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">run the program<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-44c6885 elementor-widget elementor-widget-text-editor\" data-id=\"44c6885\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>~\/Desktop\/RoofDetection\/tf-env\/bin\/python3 label_images.py<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-57f7c91 elementor-widget elementor-widget-text-editor\" data-id=\"57f7c91\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"p1\">Here\u2019s a step-by-step prompt with everything that worked so far. You can follow this tomorrow to make sure you\u2019re set up properly and ready to continue.<\/p><p class=\"p1\"><b>Project Setup &amp; Running the Model (Roof Type Detection)<\/b><b><\/b><\/p><p class=\"p2\"><br><\/p><p class=\"p3\"><b>Follow these steps to ensure everything is working before you continue.<\/b><b><\/b><\/p><p class=\"p2\"><br><\/p><p class=\"p4\"><b>1. Open Terminal and Navigate to Your Project<\/b><\/p><pre><code>cd ~\/Desktop\/RoofDetection<\/code><\/pre><p class=\"p1\"><b>2. Activate the Virtual Environment<\/b><\/p><pre><code>source tf-env\/bin\/activate<\/code><\/pre><p class=\"p1\">If this command fails with <span class=\"s1\">no such file or directory<\/span>, ensure you\u2019re in the correct directory before running it.<\/p><p class=\"p2\"><br><\/p><p class=\"p3\"><b>3. Check if TensorFlow is Installed and Recognized<\/b><\/p><pre><code>python -c \"import tensorflow as tf; print(tf.__version__)\"<\/code><\/pre><p class=\"p1\">If it prints <span class=\"s1\">2.16.2<\/span>, TensorFlow is correctly installed. If you get an error, you might need to reinstall TensorFlow.<\/p><p class=\"p2\"><br><\/p><p class=\"p3\"><b>4. Check Installed Packages<\/b><\/p><pre><code>pip list | grep tensorflow<\/code><\/pre><p class=\"p1\">This should return:<\/p><pre><code>tensorflow                   2.16.2\ntensorflow-io-gcs-filesystem 0.37.1\ntensorflow-macos             2.16.2\ntensorflow-metal             1.2.0<\/code><\/pre><p class=\"p1\">If any of these are missing, install them again using:<\/p><pre><code>pip install --upgrade --force-reinstall tensorflow-macos tensorflow-metal<\/code><\/pre><p class=\"p1\"><b>5. Ensure the Right Python Version is Used<\/b><\/p><pre><code>which python3<\/code><\/pre><p class=\"p1\">It should return:<\/p><pre><code>\/Users\/victorsantos\/Desktop\/RoofDetection\/tf-env\/bin\/python3<\/code><\/pre><p class=\"p1\">If it returns something like <span class=\"s1\">\/opt\/homebrew\/bin\/python3.10<\/span>, explicitly call Python from the virtual environment when running scripts:<\/p><pre><code>~\/Desktop\/RoofDetection\/tf-env\/bin\/python3 train_model.py<\/code><\/pre><p class=\"p1\"><b>6. Run the Training Script<\/b><\/p><pre><code>python3 train_model.py<\/code><\/pre><p class=\"p1\">If everything is working, the model should begin training. If you see an error related to shape mismatch like:<\/p><pre><code>ValueError: Exception encountered when calling Sequential.call().\nInput 0 of layer \"dense\" is incompatible...<\/code><\/pre><p class=\"p1\">This means there\u2019s a mismatch between the expected and actual input shape, and we may need to update the model architecture.<\/p><p class=\"p2\"><br><\/p><p class=\"p3\"><b>7. If Python Script Doesn\u2019t Recognize a Module<\/b><b><\/b><\/p><p class=\"p2\"><br><\/p><p class=\"p4\"><span class=\"s1\">If you ever get an error like <\/span>ModuleNotFoundError: No module named &#8216;some_package&#8217;<span class=\"s1\">, install it using:<\/span><\/p><pre><code>pip install some_package<\/code><\/pre><p class=\"p1\">For example:<\/p><pre><code>pip install pandas opencv-python pillow<\/code><\/pre><p class=\"p1\">Then, retry running the script.<\/p><p class=\"p1\"><b>If You Need to Restart Everything Tomorrow<\/b><b><\/b><\/p><p class=\"p2\"><span class=\"Apple-tab-span\">\t<\/span>1.<span class=\"Apple-tab-span\">\t<\/span>Open Terminal<\/p><p class=\"p2\"><span class=\"Apple-tab-span\">\t<\/span>2.<span class=\"Apple-tab-span\">\t<\/span>Run:<\/p><pre><code>cd ~\/Desktop\/RoofDetection\nsource tf-env\/bin\/activate\npython -c \"import tensorflow as tf; print(tf.__version__)\"<\/code><\/pre><p class=\"p1\"><br><\/p><p class=\"p2\"><span class=\"Apple-tab-span\">\t<\/span>3.<span class=\"Apple-tab-span\">\t<\/span>If TensorFlow is recognized, proceed with:<\/p><pre><code>python3 train_model.py<\/code><\/pre><p class=\"p1\"><br><\/p><p class=\"p2\"><span class=\"Apple-tab-span\">\t<\/span>4.<span class=\"Apple-tab-span\">\t<\/span>If there\u2019s an issue, check for missing dependencies:<\/p><pre><code>pip list | grep tensorflow<\/code><\/pre><p class=\"p1\"><br><\/p><p class=\"p2\"><span class=\"Apple-tab-span\">\t<\/span>5.<span class=\"Apple-tab-span\">\t<\/span>If needed, reinstall dependencies:<\/p><pre><code>pip install --upgrade --force-reinstall tensorflow-macos tensorflow-metal<\/code><\/pre><p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<\/p><p class=\"p1\">This guide should get you back exactly where we left off. When you get back tomorrow, follow it step by step and let me know if you hit any issues! \ud83d\ude80<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Python 1 Terminal Tab #3 import os import requests import pandas as pd import time # Google Maps API Key GOOGLE_MAPS_API_KEY = &#8220;AIzaSyCard2PScx5ziEsMJ8MwysTeEUHh8f19iY&#8221; # Create a directory to store images IMAGE_DIR = &#8220;roof_images&#8221; os.makedirs(IMAGE_DIR, exist_ok=True) print(&#8220;The script is starting&#8230;&#8221;)&nbsp; # Debugging print # Function to format the address using Google Maps API def format_address(address): &nbsp; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-96","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/database.victorzsantos.com\/index.php?rest_route=\/wp\/v2\/pages\/96","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/database.victorzsantos.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/database.victorzsantos.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/database.victorzsantos.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/database.victorzsantos.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=96"}],"version-history":[{"count":19,"href":"https:\/\/database.victorzsantos.com\/index.php?rest_route=\/wp\/v2\/pages\/96\/revisions"}],"predecessor-version":[{"id":115,"href":"https:\/\/database.victorzsantos.com\/index.php?rest_route=\/wp\/v2\/pages\/96\/revisions\/115"}],"wp:attachment":[{"href":"https:\/\/database.victorzsantos.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=96"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}