Azure ब्लॉब स्टोरेज

Azure ब्लॉब स्टोरेज से रोबोफ्लो में छवियाँ अपलोड करें

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

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

  • CLI स्थानीय रूप से: ऐसे परिदृश्य हो सकते हैं जहाँ आप पहले छवियों को अपने स्थानीय वातावरण में डाउनलोड करना पसंद करेंगे। उदाहरण के लिए, यदि आपको छवियों को प्रीप्रोसेस करना है या Roboflow पर अपलोड करने से पहले उन्हें मैन्युअली जांचना है, तो स्थानीय प्रतियां होना लाभकारी होगा।

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

एज्योर कनेक्शन स्ट्रिंग

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

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

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

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

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

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

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_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__":
    # उपलब्ध ब्लॉब्स की सूची प्राप्त करें
    available_blobs = get_azure_blob_objects(AZURE_CONTAINER_NAME)
    
    # वैकल्पिक: यहाँ ब्लॉब्स को फ़िल्टर करें
    # उदाहरण: 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)
    
    # ब्लॉब्स को 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 खाते के साथ प्रमाणित करें शेयर्ड एक्सेस सिग्नेचर टोकन का उपयोग करके। आप और अधिक जान सकते हैं SAS टोकन कैसे प्राप्त करें azcopy दस्तावेज़ीकरण में।

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

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

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

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

अब जब हमने डेटा डाउनलोड कर लिया है, तो हम इसे Roboflow पर अपलोड कर सकते हैं या तो अपलोड वेब इंटरफ़ेस या Roboflow CLI.

यह भी देखें

Last updated

Was this helpful?