قم برحلة تفاعلية عبر الحدائق الوطنية الأمريكية باستخدام أدوات الذكاء الاصطناعي

مبادرة "يونايتد باركس أوف أمريكا" من غوغل، التي أُعلن عنها في 20 أغسطس 2026، تدعوك لاستكشاف المتنزهات الوطنية من خلال تجربة تفاعلية غامرة. باستخدام أدوات الذكاء الاصطناعي، تقرّب هذه الرحلة العجائب الطبيعية والقصص الثقافية من الجميع، في أي مكان.

القراءة الصوتية غير متاحة في هذا المتصفح
قم برحلة تفاعلية عبر الحدائق الوطنية الأمريكية باستخدام أدوات الذكاء الاصطناعي

الوسوم

ملخص سريع

مبادرة "يونايتد باركس أوف أمريكا" من غوغل، التي أُعلن عنها في 20 أغسطس 2026، تدعوك لاستكشاف المتنزهات الوطنية من خلال تجربة تفاعلية غامرة. باستخدام أدوات الذكاء الاصطناعي، تقرّب هذه الرحلة العجائب الطبيعية والقصص الثقافية من الجميع، في أي مكان.

خوض رحلة تفاعلية عبر المتنزهات الوطنية الأمريكية باستخدام أدوات الذكاء الاصطناعي

طالما ألهمت المتنزهات الوطنية الأمريكية شعورًا بالدهشة، لكن لا يمكن للجميع أن يحزموا موقد التخييم ويتوجهوا إلى يوسيميتي أو أكاديا في نزوة. في أغسطس 2026، أطلقت Google Arts & Culture مشروعًا رائعًا باسم United Parks of America، مصممًا ليتيح للناس استكشاف هذه المناظر الطبيعية المحمية من أي مكان في العالم. تُعد المبادرة مثالًا ممتازًا على كيفية تحويل الذكاء الاصطناعي للشاشة الثابتة إلى بيئة تفاعلية غنية — فهي تتيح للزوار "المشي" عبر الممرات، والتقريب إلى التفاصيل الجيولوجية، والاستماع إلى القصص الكامنة خلف المعالم.

لكن لا يتعين عليك الانتظار حتى تقوم شركة تقنية عملاقة ببناء تجربتك. باستخدام بعض الأدوات مفتوحة المصدر والبيانات العامة، يمكنك إنشاء رحلتك التفاعلية الخاصة عبر المتنزهات الوطنية الأمريكية. يستعرض هذا المقال مشروعًا عمليًا وتطبيقيًا: تطبيقًا يعمل عبر سطر الأوامر وواجهة ويب، يجلب بيانات المتنزهات، ويولّد نصوصًا وصفية، وينتج أيضًا تسميات توضيحية للصور مدعومة بالذكاء الاصطناعي. إنه مشروع مثالي لعطلة نهاية الأسبوع للمطورين الذين يرغبون في الجمع بين حبهم للطبيعة وقليل من تعلّم الآلة.

المتطلبات

قبل أن نبدأ، تأكد من أن لديك ما يلي على جهازك:

  • Python 3.9 أو أحدث – سنستخدم ميزات لغة حديثة وإصدارات مكتبات حديثة.
  • pip – مثبّت الحزم القياسي للغة بايثون، وعادةً ما يكون مرفقًا مع بايثون.
  • اتصال إنترنت مستقر – نحتاج إلى تنزيل مجموعات البيانات والنماذج المدربة مسبقًا.
  • مفتاح واجهة برمجة تطبيقات لإدارة المتنزهات الوطنية (NPS) – يمكن الحصول عليه مجانًا من developer.nps.gov. هذه خدمة ويب عامة توفر معلومات رسمية عن جميع المتنزهات الوطنية، بما في ذلك الأوصاف والأنشطة والإحداثيات.
  • وحدة معالجة رسومات (GPU) (اختيارية لكن موصى بها) – إذا كنت تخطط لتشغيل نموذج رؤية-لغة محليًا، فإن وحدة معالجة الرسومات ستسرّع الاستدلال. ومع ذلك، يعمل التنفيذ عبر المعالج المركزي (CPU) بشكل جيد للأمثلة الصغيرة.

لا تتطلب معرفة بتطوير الواجهات الأمامية؛ سنستخدم Gradio، وهي مكتبة بايثون تحوّل بضعة أسطر من الكود إلى واجهة ويب قابلة للمشاركة.

التثبيت خطوة بخطوة

أولاً، قم بإعداد بيئة بايثون نظيفة لتجنب تعارضات التبعيات مع المشاريع الأخرى. افتح الطرفية وأنشئ بيئة افتراضية.

python -m venv nps-env

قم بتفعيلها. على macOS وLinux:

source nps-env/bin/activate

على ويندوز، يختلف الأمر قليلاً:

nps-env\Scripts\activate

الآن قم بترقية pip إلى أحدث إصدار وتثبيت المكتبات التي نحتاجها.

pip install --upgrade pip
pip install requests pandas pillow torch transformers gradio

إليك ما تفعله كل مكتبة:

  • requests – يقوم باستدعاءات HTTP إلى واجهة NPS API.
  • pandas – ينظم بيانات JSON التي يتم إرجاعها في جداول.
  • pillow – يعالج الصور.
  • torch – PyTorch، المحرك الكامن خلف العديد من نماذج الذكاء الاصطناعي.
  • transformers – مكتبة Hugging Face لتحميل نماذج اللغة والرؤية المدربة مسبقًا.
  • gradio – يبني واجهة ويب لأداتنا.

بعد التثبيت، تحقق من أن كل شيء يعمل بطباعة الإصدارات.

python -c "import torch; print(torch.__version__); import gradio; print(gradio.__version__)"

الآن أنشئ مجلد مشروع وملف بايثون. سنسميه nps_journey.py.

mkdir nps-journey
cd nps-journey

جلب بيانات المتنزهات الوطنية

توفر إدارة المتنزهات الوطنية واجهة برمجة تطبيقات موثقة جيدًا. للوصول إليها، تحتاج إلى مفتاح API. بمجرد حصولك عليه، احفظه في متغير بيئة لأسباب أمنية.

export NPS_API_KEY="your-api-key-here"

الآن سنكتب برنامجًا نصيًا يطلب قائمة بالمتنزهات ويعرض أسماءها. افتح nps_journey.py في محرر نصوص وأضف:

import os
import requests
import pandas as pd

API_KEY = os.getenv("NPS_API_KEY")
BASE_URL = "https://developer.nps.gov/api/v1/parks"

def fetch_park_data(limit=50):
    headers = {"X-Api-Key": API_KEY}
    params = {"limit": limit, "fields": "images,activities"}
    response = requests.get(BASE_URL, headers=headers, params=params)
    response.raise_for_status()
    data = response.json()
    return pd.DataFrame(data["data"])

parks_df = fetch_park_data()
print(parks_df[["name", "states"]].head())

قم بتشغيل البرنامج النصي لرؤية قائمة بالمتنزهات الوطنية والولايات التي تقع فيها.

python nps_journey.py

ستحصل على جدول يتضمن أول 50 متنزهًا على الأقل. لدينا الآن المادة الخام لرحلتنا التفاعلية.

بناء الواجهة التفاعلية

تعد قائمة بسيطة عبر سطر الأوامر بداية جيدة. يمكننا أن نطلب من المستخدم اختيار متنزه ثم عرض وصفه وأنشطته وساعات عمله. دعنا نوسّع البرنامج النصي:

def get_park_details(park_code):
    headers = {"X-Api-Key": API_KEY}
    params = {"parkCode": park_code}
    response = requests.get(BASE_URL, headers=headers, params=params)
    response.raise_for_status()
    data = response.json()["data"]
    if not data:
        return None
    return data[0]

def interactive_cli():
    while True:
        print("\nAvailable parks (first 10):")
        sample = parks_df.head(10)[["parkCode", "name"]].to_string(index=False)
        print(sample)
        code = input("Enter a park code (or 'q' to quit): ").strip().lower()
        if code == "q":
            break
        park = get_park_details(code)
        if park is None:
            print("Park not found. Try again.")
            continue
        print(f"\n{park['name']}")
        print(park.get("description", "No description available."))
        print("\nActivities:", ", ".join(
            [a["name"] for a in park.get("activities", [])]
        ))
        print("\nWeather info:", park.get("weatherInfo", "Not available."))

if __name__ == "__main__":
    interactive_cli()

الآن يمكننا التنقل بين المتنزهات مباشرة من الطرفية. ولكن لجعل ذلك تفاعليًا ومرئيًا حقًا، دعنا نستفيد من واجهة ويب.

أمثلة الاستخدام

مثال 1: لوحة معلومات Gradio لاستكشاف المتنزهات

Gradio هي أسرع طريقة لتحويل برنامجك النصي إلى تطبيق ويب قابل للمشاركة. سننشئ دالة تأخذ رمز متنزه وتعيد عرضًا منظمًا لأساسيات المتنزه.

import gradio as gr

def display_park(park_code):
    park = get_park_details(park_code)
    if park is None:
        return "Park not found", None
    if park.get("images"):
        img_url = park["images"][0]["url"]
    else:
        img_url = None
    description = park.get("description", "")
    activities = ", ".join([a["name"] for a in park.get("activities", [])])
    info = f"**Park:** {park['name']}\n\n{description}\n\n**Activities:** {activities}"
    return info, img_url

ثم نقوم بتشغيل التطبيق:

demo = gr.Interface(
    fn=display_park,
    inputs="text",
    outputs=["markdown", gr.Image(type="filepath")],
    title="Interactive National Parks Explorer",
    description="Enter a park code (e.g., YOSE for Yosemite) to explore."
)
demo.launch()

قم بتشغيل البرنامج النصي وافتح الرابط المحلي في متصفحك. لقد قمت للتو ببناء مستكشف تفاعلي قائم على الويب يمنحك معلومات وصورًا رسمية من NPS. هذا أساس متين لـ"رحلة".

مثال 2: إنشاء تسميات توضيحية للصور بالذكاء الاصطناعي

الآن تأتي الميزة الذكية. مشروع Google Arts & Culture يوحي بقوة الذكاء الاصطناعي التوليدي: إذ يمكنه دعوتك إلى منظر طبيعي عبر حواس متعددة. يمكننا محاكاة ذلك الشعور باستخدام نموذج رؤية-لغة مدرب مسبقًا يصف أي صورة تقدمها له.

تتضمن مكتبة transformers من Hugging Face نماذج مثل BLIP (Bootstrapping Language-Image Pre-training). إليك كيفية تحميله والحصول على وصف لصورة متنزه.

from transformers import pipeline

def load_captioner():
    return pipeline("image-to-text", model="Salesforce/blip-image-captioning-large")

captioner = load_captioner()

def caption_image(image_path):
    result = captioner(image_path)[0]["generated_text"]
    return result

دعنا ندمج هذا مع مستكشف المتنزهات. عندما يحدد المستخدم متنزهًا، نأخذ الصورة الأولى من NPS API، ونحفظها في ملف مؤقت، وننشئ تسمية توضيحية شعرية باستخدام BLIP.

import tempfile
import requests
from PIL import Image

def download_image(url, save_path):
    response = requests.get(url, stream=True)
    response.raise_for_status()
    with open(save_path, "wb") as f:
        for chunk in response.iter_content(chunk_size=8192):
            f.write(chunk)

def display_park_with_caption(park_code):
    park = get_park_details(park_code)
    if park is None or not park.get("images"):
        return "Park or image not found", None
    img_url = park["images"][0]["url"]
    temp_path = tempfile.NamedTemporaryFile(suffix=".jpg", delete=False).name
    download_image(img_url, temp_path)
    caption = caption_image(temp_path)
    info = f"**{park['name']}**\n\n{caption}\n\nDescription: {park.get('description', '')}"
    return info, temp_path

الآن قم بتشغيل واجهة Gradio جديدة:

demo2 = gr.Interface(
    fn=display_park_with_caption,
    inputs="text",
    outputs=["markdown", gr.Image(type="filepath")],
    title="AI-Powered National Park Journey",
    description="Enter a park code and let AI interpret the view."
)
demo2.launch()

هذه لمحة صغيرة عن الرحلات التفاعلية المذكورة في مشروع Google Arts & Culture. بدلاً من قراءة الحقائق فقط، يحصل المستخدم على تفسير مولّد بالذكاء الاصطناعي لما يبدو عليه المكان. يمكنك حتى توسيع الفكرة أكثر — توليد قصيدة قصيرة، أو إنشاء مسار رحلة بناءً على أنشطة المتنزه، أو تلخيص مراجعات الزوار.

مثال 3: مخطط مسار باستخدام إحداثيات المتنزهات

تتضمن معظم سجلات NPS latitude وlongitude. يمكننا استخدام ذلك لبناء رحلة قائمة على الخرائط. للتبسيط، سنعرض الإحداثيات ونحسب المسافات بين متنزهين. هذه ميزة عملية للأشخاص الذين يرغبون في التخطيط لرحلة برية متعددة المتنزهات.

from math import radians, sin, cos, sqrt, atan2

def haversine(lat1, lon1, lat2, lon2):
    R = 6371
    dlat = radians(lat2 - lat1)
    dlon = radians(lon2 - lon1)
    a = sin(dlat / 2) ** 2 + cos(radians(lat1)) * cos(radians(lat2)) * sin(dlon / 2) ** 2
    return 2 * R * atan2(sqrt(a), sqrt(1 - a))

def distance_between_parks(code1, code2):
    park1 = get_park_details(code1)
    park2 = get_park_details(code2)
    if not park1 or not park2:
        return "Invalid park code."
    lat1, lon1 = park1["latitude"], park1["longitude"]
    lat2, lon2 = park2["latitude"], park2["longitude"]
    dist = haversine(float(lat1), float(lon1), float(lat2), float(lon2))
    return f"Distance from {park1['name']} to {park2['name']}: {dist:.0f} km"

أضف الدالة إلى تطبيق Gradio الحالي، ويمكن للزوار استكشاف الجغرافيا الكامنة وراء التجربة. إنها أداة فورية لمعرفة "إلى أين أذهب بعد ذلك".

مثال 4: توليد مسار رحلة مخصص

توفر NPS API أيضًا قائمة بالأنشطة، لكن يمكننا أن نأخذ الأمر خطوة أبعد ونستخدم نموذج لغة لإنشاء مسار ليوم واحد بناءً على تلك الأنشطة. على سبيل المثال، يمكننا استخدام نموذج خفيف لتوليد النصوص من Hugging Face، مثل distilgpt2، لكتابة فقرة تصف نزهة عبر المتنزه. هذا ليس مسارًا واقعيًا موثوقًا تمامًا، لكنه يمنح نكهة إبداعية غامرة.

from transformers import pipeline

def generate_itinerary(park_code):
    park = get_park_details(park_code)
    if not park:
        return "Park not found."
    activities = [a["name"] for a in park.get("activities", [])]
    prompt = (
        f"Imagine a day in {park['name']}. "
        f"It offers: {', '.join(activities[:5])}. "
        f"Write a short itinerary in two sentences."
    )
    text_gen = pipeline("text-generation", model="distilgpt2")
    result = text_gen(prompt, max_new_tokens=80, num_return_sequences=1)[0]["generated_text"]
    return result

ادمج هذا مع الدوال السابقة، وستحصل على رحلة تفاعلية بالكامل بثلاثة مستويات من المساعدة بالذكاء الاصطناعي: البيانات الواقعية، والوصف البصري، والسرد الإبداعي. وهذا يعكس روح مشروع United Parks of America: جعل المتنزهات تبدو حية، حتى من بعيد.

تجميع كل ذلك معًا

دعنا نجمع كل شيء في تطبيق Gradio واحد بتبويبات، بحيث يمكنك التنقل بين المستكشف الكلاسيكي، ومنشئ التسميات التوضيحية للصور، وحاسبة المسافات، وكاتب مسارات الرحلات بالذكاء الاصطناعي.

with gr.Blocks() as full_app:
    gr.Markdown("# 🏞 Take an AI Journey Through America’s National Parks")
    with gr.Tab("Explore"):
        code_input = gr.Textbox(label="Park code")
        out_text = gr.Markdown()
        out_img = gr.Image(type="filepath")
        explore_btn = gr.Button("Go")
        explore_btn.click(fn=display_park_with_caption, inputs=code_input, outputs=[out_text, out_img])
    with gr.Tab("Distance"):
        code1 = gr.Textbox(label="Park 1 code")
        code2 = gr.Textbox(label="Park 2 code")
        dist_out = gr.Markdown()
        dist_btn = gr.Button("Compute")
        dist_btn.click(fn=distance_between_parks, inputs=[code1, code2], outputs=dist_out)
    with gr.Tab("Itinerary"):
        code_it = gr.Textbox(label="Park code")
        it_out = gr.Markdown()
        it_btn = gr.Button("Generate")
        it_btn.click(fn=generate_itinerary, inputs=code_it, outputs=it_out)
full_app.launch()

قم بتشغيل البرنامج النصي مرة أخرى وسيكون لديك بوابة تفاعلية محلية. شارك الرابط المحلي مع أصدقائك، أو انشره على خدمة مجانية مثل Hugging Face Spaces (تذكر تعيين مفتاح NPS API الخاص بك كسرّ هناك).

ملاحظات وقيود

الأدوات التي بنيناها تعليمية وليست بجودة الإنتاج. هناك بعض الأشياء التي يجب وضعها في الاعتبار:

  • حد معدل NPS API هو 50 طلبًا في الثانية، وهو سخي، لكن لا تضغط عليه.
  • تم تدريب نموذج BLIP على صور عامة، لذا قد تكون تسمياته التوضيحية لمعالم متنزهات محددة عامة جدًا. يمكنك ضبطه بدقة، لكن ذلك يتطلب بيانات إضافية.
  • distilgpt2 هو نموذج لغة صغير؛ سيكون مسار رحلته إبداعيًا وليس واقعيًا. نموذج أكبر مثل Llama 3 سينتج نتائج أفضل، لكنك ستحتاج إلى ذاكرة أكبر وبيئة استضافة مناسبة.
  • تُظهر وثائق مشروع United Parks of America ما هو ممكن مع هندسة كبيرة خلف الكواليس — نسختك المصنوعة بنفسك هي نقطة بداية ممتعة، وليست بديلاً كاملاً.

الخلاصة

إن مبادرة United Parks of America من Google Arts & Culture، التي أُطلقت في أغسطس 2026، هي عرض جميل لكيفية قدرة الذكاء الاصطناعي على جلب الهواء الطلق إلى أي شاشة. لكن نفس المفاهيم الأساسية — معالجة اللغة الطبيعية، ونماذج الرؤية-اللغة، والبيانات المفتوحة — في متناول الهواة والمطورين. مع أقل من 150 سطرًا من بايثون، تكون قد بنيت الآن رحلة تفاعلية عبر المتنزهات الوطنية الأمريكية تتيح لك الاستكشاف والوصف والتخطيط والتخيل.

هذا المشروع مجرد بداية الطريق. أضف ميزات مثل توقعات الطقس، أو السرد الصوتي باستخدام نموذج تحويل النص إلى كلام، أو حتى روبوت محادثة مدرب على الأسئلة الشائعة حول المتنزهات. المفتاح هو مواصلة الاستكشاف — بنفس الطريقة التي تمشي بها في مسار جديد. الذكاء الاصطناعي سيأخذك في منتصف الطريق؛ الفضول يقوم بالباقي.

المصادر