गूगल क्लाउड स्टोरेज
गूगल क्लाउड स्टोरेज से रोबोफ्लो में छवियाँ अपलोड करें
जब आप 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 बना सकते हैं।
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 बकेट का नाम और ब्लॉब का नाम चाहिए। छवि का साइन किया गया 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__":
# उपलब्ध ब्लॉब्स की सूची प्राप्त करें
available_blobs = get_gcs_objects(GCS_BUCKET_NAME)
# वैकल्पिक: यहाँ ब्लॉब्स को फ़िल्टर करें
# उदाहरण: available_blobs = [blob for blob in available_blobs if "some_condition"]
# ब्लॉब्स को 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 पर अपलोड करें
अब जब हमने डेटा डाउनलोड कर लिया है, तो हम इसे Roboflow पर अपलोड कर सकते हैं या तो अपलोड वेब इंटरफ़ेस या Roboflow CLI.
यह भी देखें
Last updated
Was this helpful?