> 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/azure-blob-storage.md).

# Azure Blob Storage

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

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

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

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

## Azure कनेक्शन स्ट्रिंग

Storage Account बनाने के बाद, आप Azure पोर्टल में "Security + networking" के अंतर्गत "Access keys" अनुभाग में एक्सेस कीज़ या कनेक्शन स्ट्रिंग पा सकते हैं। इन क्रेडेंशियल्स का उपयोग आपके एप्लिकेशन को प्रमाणित करने के लिए किया जाता है।

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

आप Python में Azure SDK के माध्यम से Azure Blob Storage में अपनी छवियों के लिए साइन किए गए URL जनरेट कर सकते हैं।

```python
def get_blob_sas_url(blob_service_client, container_name: str, blob_name: str) -> str:
    """Azure Blob के लिए SAS URL जनरेट करें."""
    from azure.storage.blob import generate_blob_sas, BlobSasPermissions
    from datetime import datetime, timedelta

    sas_token = generate_blob_sas(
        blob_service_client.account_name,
        container_name,
        blob_name,
        account_key=blob_service_client.credential.account_key,
        permission=BlobSasPermissions(read=True),
        expiry=datetime.utcnow() + timedelta(hours=1)
    )
    
    blob_url = f"https://{blob_service_client.account_name}.blob.core.windows.net/{container_name}/{blob_name}?{sas_token}"
    return blob_url
```

ऊपर दिए गए कोड स्निपेट में, आपको blob service client, container name, और blob name की आवश्यकता होती है। छवि का साइन किया गया URL जनरेट होकर लौटाया जाता है।

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

```python
from azure.storage.blob import BlobServiceClient
import requests
import urllib.parse

# ************* इन वेरिएबल्स को सेट करें *************
AZURE_CONNECTION_STRING = "YOUR_AZURE_CONNECTION_STRING"
AZURE_CONTAINER_NAME = "YOUR_AZURE_CONTAINER_NAME"
ROBOFLOW_API_KEY = "YOUR_ROBOFLOW_API_KEY"
ROBOFLOW_PROJECT_NAME = "YOUR_ROBOFLOW_PROJECT_NAME"
# ***********************************************

def get_blob_sas_url(blob_service_client, container_name: str, blob_name: str) -> str:
    """Azure Blob के लिए SAS URL जनरेट करें."""
    from azure.storage.blob import generate_blob_sas, BlobSasPermissions
    from datetime import datetime, timedelta

    sas_token = generate_blob_sas(
        blob_service_client.account_name,
        container_name,
        blob_name,
        account_key=blob_service_client.credential.account_key,
        permission=BlobSasPermissions(read=True),
        expiry=datetime.utcnow() + timedelta(hours=1)
    )
    
    blob_url = f"https://{blob_service_client.account_name}.blob.core.windows.net/{container_name}/{blob_name}?{sas_token}"
    return blob_url

def get_azure_blob_objects(container_name: str) -> list:
    """दिए गए Azure Blob कंटेनर में blob नामों की सूची प्राप्त करें."""
    blob_service_client = BlobServiceClient.from_connection_string(AZURE_CONNECTION_STRING)
    container_client = blob_service_client.get_container_client(container_name)
    
    blobs = []
    blob_list = container_client.list_blobs()
    for blob in blob_list:
        blobs.append(blob.name)
    return blobs

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_azure_blob_objects(AZURE_CONTAINER_NAME)
    
    # वैकल्पिक: यहाँ blobs को फ़िल्टर करें
    # उदाहरण: available_blobs = [blob for blob in available_blobs if "some_condition"]
    
    # Azure Blob Service Client आरंभ करें
    blob_service_client = BlobServiceClient.from_connection_string(AZURE_CONNECTION_STRING)
    
    # blobs को Roboflow पर अपलोड करें
    for blob in available_blobs:
        blob_url = get_blob_sas_url(blob_service_client, AZURE_CONTAINER_NAME, blob)
        upload_to_roboflow(ROBOFLOW_API_KEY, ROBOFLOW_PROJECT_NAME, blob_url)

```

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

सबसे पहले, इंस्टॉल करें `azcopy` कमांड-लाइन यूटिलिटी। यह यूटिलिटी आपको Azure Storage से फ़ाइलें और फ़ोल्डर डाउनलोड करने की अनुमति देती है। फिर, एक के साथ Azure खाते से प्रमाणित करें [Shared Access Signature](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview) के बारे में अधिक जान सकते हैं [SAS token प्राप्त करने का तरीका](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview) azcopy दस्तावेज़ में।

एक बार जब आपके पास `azcopy` सेट अप हो जाए, तो फ़ाइल या फ़ोल्डर डाउनलोड करने के लिए निम्न कमांड चलाएँ:

```bash
azcopy copy "C:\local\path" <sas-token> --recursive=true
```

बदलें `C:\local\path` को उस फ़ोल्डर या फ़ाइल के पथ से बदलें जिसे आप डाउनलोड करना चाहते हैं। `<sas-token>` मान को प्रमाणीकरण के लिए SAS token से बदलें। यदि आप फ़ाइलें और फ़ोल्डर रिकर्सिव रूप से डाउनलोड करना चाहते हैं, तो ऊपर की तरह `--recursive=true` आर्ग्युमेंट निर्दिष्ट करें। अन्यथा, इस आर्ग्युमेंट को हटा दें।

## डेटा को 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) - बिना स्क्रिप्टिंग के Azure से निरंतर, स्वचालित सिंक
* [Roboflow प्रोजेक्ट ID प्राप्त करें](https://docs.roboflow.com/reference/authentication/authentication/workspace-and-project-ids)
