> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/datasets/hi/create-and-upload/adding-data/upload-data-from-aws-gcp-and-azure/google-cloud-storage.md).

# Google Cloud Storage

{% hint style="warning" %}
Google Cloud Storage के लिए, उपयोग करें [डेटास्रोत](/datasets/hi/create-and-upload/adding-data/datasources.md) और Bucket Mirror, जब तक कि आपको विशेष रूप से एक-बार या तदर्थ इंपोर्ट की आवश्यकता न हो। Datasources इमेज और मेटाडेटा को बिना स्क्रिप्ट, साइन किए गए URL, या स्थानीय डाउनलोड के सिंक में रखते हैं। देखें [Google Cloud Storage क्रेडेंशियल्स](/datasets/hi/create-and-upload/adding-data/datasource-credentials/gcs.md) पहुंच सेट अप करने के लिए।
{% endhint %}

Google Cloud Storage में इमेज डेटा स्टोरेज और Roboflow पर अपलोड करने के मामले में, आपके पास आम तौर पर दो विकल्प होते हैं: साइन किए गए URL का उपयोग करना या इमेज को स्थानीय रूप से मैन्युअल रूप से डाउनलोड करना (gsutil CLI के माध्यम से) ताकि उन्हें स्थानीय रूप से अपलोड किया जा सके। इन तरीकों के बीच चुनाव आपके डेटा प्रोसेसिंग और प्रबंधन की विशिष्ट आवश्यकताओं पर निर्भर करता है।

* **साइन किए गए URL**: यदि आप अपनी स्थानीय मशीन पर इमेज डाउनलोड करने से जुड़े अतिरिक्त चरण और समय-खपत से बचना चाहते हैं, तो यह तरीका विशेष रूप से लाभदायक है। साइन किए गए URL के साथ, आप इमेज डेटा को सीधे Google Cloud Storage से Roboflow API पर अपलोड कर सकते हैं, बिना उसे कभी स्थानीय रूप से संग्रहीत किए। इससे प्रोसेसिंग तेज होती है और आपकी स्थानीय प्रणाली पर भार कम पड़ता है।
* **स्थानीय CLI**: ऐसे परिदृश्य हो सकते हैं जहाँ आप पहले इमेज को अपने स्थानीय वातावरण में डाउनलोड करना पसंद करेंगे। उदाहरण के लिए, यदि आपको Roboflow पर अपलोड करने से पहले इमेज को प्रीप्रोसेस करना है या मैन्युअल रूप से जाँचना है, तो स्थानीय प्रतियाँ उपयोगी होंगी।

सही तरीका चुनना आपकी विशिष्ट उपयोग-मामले की आवश्यकताओं पर निर्भर करेगा, जैसे डेटा ट्रांसफर की गति, प्रीप्रोसेसिंग की आवश्यकता, या इमेज की मैन्युअल जाँच।

## Google Cloud JSON कुंजी

बकेट के लिए उपयुक्त अनुमतियों के साथ एक सर्विस अकाउंट बनाएं और JSON कुंजी फ़ाइल डाउनलोड करें। इस फ़ाइल में आपके एप्लिकेशन को प्रमाणित करने के लिए उपयोग किए जाने वाले क्रेडेंशियल्स होंगे।

## विकल्प 1: साइन किए गए URL के माध्यम से अपलोड करें

आप Python में Google Cloud SDK का उपयोग करके अपने Google Cloud Storage बकेट में अपनी इमेज के लिए साइन किए गए URL जनरेट कर सकते हैं।

```python
def get_gcs_signed_url(bucket_name: str, blob_name: str) -> str:
    """GCS ऑब्जेक्ट के लिए साइन किया गया URL जनरेट करें।"""
    storage_client = storage.Client.from_service_account_json(GOOGLE_APPLICATION_CREDENTIALS)
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.get_blob(blob_name)
    
    url = blob.generate_signed_url(
        version="v4",
        expiration=3600,  # 1 घंटे सेकंड में
        method="GET"
    )
    return url
```

ऊपर दिए गए कोड स्निपेट में, आपको अपने Google Cloud Storage बकेट का नाम और blob का नाम चाहिए। इमेज का साइन किया गया URL जनरेट करके वापस किया जाता है।

इसके आधार पर, हम एक पूर्ण समाधान बना सकते हैं जो बकेट में उपलब्ध सभी ऑब्जेक्ट्स को प्राप्त करता है, और फिर उन्हें API के माध्यम से Roboflow पर अपलोड करता है। इस समाधान का एक रूपरेखा नीचे देखी जा सकती है:

```python
from google.cloud import storage
import requests
import urllib.parse

# ************* इन वेरिएबल्स को सेट करें *************
GCS_BUCKET_NAME = "YOUR_GCS_BUCKET_NAME"
ROBOFLOW_API_KEY = "YOUR_ROBOFLOW_API_KEY"
ROBOFLOW_PROJECT_NAME = "YOUR_ROBOFLOW_PROJECT_NAME"
GOOGLE_APPLICATION_CREDENTIALS = "path/to/your-service-account-file.json"
# ***********************************************

def get_gcs_signed_url(bucket_name: str, blob_name: str) -> str:
    """GCS ऑब्जेक्ट के लिए साइन किया गया URL जनरेट करें।"""
    storage_client = storage.Client.from_service_account_json(GOOGLE_APPLICATION_CREDENTIALS)
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.get_blob(blob_name)
    
    url = blob.generate_signed_url(
        version="v4",
        expiration=3600,  # 1 घंटे सेकंड में
        method="GET"
    )
    return url

def get_gcs_objects(bucket_name: str) -> list:
    """दिए गए GCS बकेट में ऑब्जेक्ट कुंजियों की सूची प्राप्त करें।"""
    storage_client = storage.Client.from_service_account_json(GOOGLE_APPLICATION_CREDENTIALS)
    bucket = storage_client.get_bucket(bucket_name)
    blobs = bucket.list_blobs()

    object_names = []
    for blob in blobs:
        object_names.append(blob.name)
    return object_names

def upload_to_roboflow(api_key: str, project_name: str, presigned_url: str, img_name='', split="train"):
    """Roboflow पर एक इमेज अपलोड करें।"""
    API_URL = "https://api.roboflow.com"
    if img_name == '':
        img_name = presigned_url.split("/")[-1]

    upload_url = "".join([
        API_URL + "/dataset/" + project_name + "/upload",
        "?api_key=" + api_key,
        "&name=" + img_name,
        "&split=" + split,
        "&image=" + urllib.parse.quote_plus(presigned_url),
    ])
    response = requests.post(upload_url)

    # प्रतिक्रिया कोड जाँचें
    if response.status_code == 200:
        print(f"{img_name} को सफलतापूर्वक {project_name} में अपलोड किया गया")
        return True
    else:
        print(f"{img_name} को अपलोड करने में विफल। त्रुटि: {response.content.decode('utf-8')}")
        return False

if __name__ == "__main__":
    # उपलब्ध blobs की सूची प्राप्त करें
    available_blobs = get_gcs_objects(GCS_BUCKET_NAME)
    
    # वैकल्पिक: यहाँ blobs को फ़िल्टर करें
    # उदाहरण: available_blobs = [blob for blob in available_blobs if "some_condition"]
    
    # blobs को Roboflow पर अपलोड करें
    for blob in available_blobs:
        blob_url = get_gcs_signed_url(GCS_BUCKET_NAME, blob)
        upload_to_roboflow(ROBOFLOW_API_KEY, ROBOFLOW_PROJECT_NAME, blob_url)

```

## विकल्प 2: GCP से डेटा स्थानीय रूप से डाउनलोड करें

GCP से डेटा डाउनलोड करने के लिए, पहले GCP CLI इंस्टॉल करें। फिर, अपने GCP उपयोगकर्ता खाते से प्रमाणित करें।

इमेज या इमेजों के फ़ोल्डर को डाउनलोड करने के लिए, निम्न कमांड का उपयोग करें:

```bash
gsutil cp -r gs://mybucket/folder .
```

बदलें `mybucket` अपने GCP स्टोरेज बकेट के नाम से और `folder` उस फ़ाइल या फ़ोल्डर के गंतव्य से जिसे आप कॉपी करना चाहते हैं। यह कमांड लक्षित फ़ाइल या फ़ोल्डर को आपकी वर्तमान कार्यशील निर्देशिका में सहेज देगा (`.`).

## डेटा को Roboflow पर अपलोड करें

अब जब हमने डेटा डाउनलोड कर लिया है, हम इसे Roboflow पर या तो [अपलोड वेब इंटरफ़ेस](/datasets/hi/create-and-upload/adding-data.md#upload-data-with-the-web-application) या [Roboflow CLI](/datasets/hi/create-and-upload/adding-data.md#upload-datasets-with-the-command-line).

## यह भी देखें

* [Datasources (Bucket Mirror)](/datasets/hi/create-and-upload/adding-data/datasources.md) - बिना स्क्रिप्टिंग के GCS से निरंतर, स्वचालित सिंक
* [Roboflow प्रोजेक्ट ID प्राप्त करें](https://docs.roboflow.com/reference/authentication/authentication/workspace-and-project-ids)
