गूगल क्लाउड स्टोरेज

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

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

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

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

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

Google Cloud JSON Key

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

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

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

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 पर अपलोड करता है। इस समाधान की रूपरेखा नीचे देखी जा सकती है:

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 उपयोगकर्ता खाते से प्रमाणित करें।

किसी छवि या छवियों के फ़ोल्डर को डाउनलोड करने के लिए, निम्नलिखित कमांड का उपयोग करें:

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

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

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

अब जब हमने डेटा डाउनलोड कर लिया है, तो हम इसे या तो Upload Web Interface या Roboflow CLI.

यह भी देखें

Last updated

Was this helpful?