> 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="info" %}
यह पृष्ठ साइन किए गए URL और स्थानीय डाउनलोड वर्कफ़्लो को कवर करता है। यदि आपका स्रोत डेटा GCS में है, तो उपयोग करें [Datasources](/datasets/hi/create-and-upload/adding-data/datasources.md) और इस पैटर्न को अपनाने के बजाय Bucket Mirror का उपयोग करें।
{% endhint %}

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

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

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

## Google Cloud JSON कुंजी

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

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

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

```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)
