Gemini API की मदद से देखने से जुड़ी सुविधाओं के बारे में जानें

ai.google.dev पर देखें Colab notebook आज़माएं GitHub पर नोटबुक देखना

Gemini मॉडल, इमेज और वीडियो को प्रोसेस कर सकते हैं. इससे डेवलपर के लिए कई ऐसे नए इस्तेमाल के उदाहरण उपलब्ध हो पाते हैं जिनके लिए पहले डोमेन के हिसाब से मॉडल बनाने पड़ते थे. Gemini के विज़न की कुछ सुविधाओं में ये शामिल हैं:

  • इमेज के कैप्शन जोड़ना और उनसे जुड़े सवालों के जवाब देना
  • PDF फ़ाइलों को टेक्स्ट में बदलना और उनमें मौजूद 20 लाख तक टोकन की वजह बताना
  • 90 मिनट तक के वीडियो की जानकारी देना, उन्हें सेगमेंट में बांटना, और उनसे जानकारी निकालना
  • किसी इमेज में मौजूद ऑब्जेक्ट का पता लगाना और उनके लिए बाउंडिंग बॉक्स के निर्देशांक दिखाना

Gemini को शुरुआत से ही मल्टीमॉडल के तौर पर बनाया गया था. हम इसकी नई-नई संभावनाओं को लगातार आगे बढ़ा रहे हैं.

इमेज इनपुट

हमारा सुझाव है कि इमेज का कुल पेलोड साइज़ 20 एमबी से कम हो. इसके लिए, base64 कोड में बदली गई इमेज अपलोड करें या सीधे तौर पर, लोकल स्टोरेज में मौजूद इमेज फ़ाइलें अपलोड करें.

लोकल इमेज के साथ काम करना

अगर Python इमेजिंग लाइब्रेरी (Pillow ) का इस्तेमाल किया जा रहा है, तो PIL इमेज ऑब्जेक्ट का भी इस्तेमाल किया जा सकता है.

from google import genai
from google.genai import types

import PIL.Image

image = PIL.Image.open('/path/to/image.png')

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents=["What is this image?", image])

print(response.text)

Base64 कोड में बदली गई इमेज

सार्वजनिक इमेज के यूआरएल को Base64 पेलोड के तौर पर कोड में बदलकर अपलोड किया जा सकता है. नीचे दिए गए कोड के उदाहरण में, सिर्फ़ स्टैंडर्ड लाइब्रेरी टूल का इस्तेमाल करके ऐसा करने का तरीका बताया गया है:

from google import genai
from google.genai import types

import requests

image_path = "https://goo.gle/instrument-img"
image = requests.get(image_path)

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What is this image?",
              types.Part.from_bytes(image.content, "image/jpeg")])

print(response.text)

एक से ज़्यादा इमेज

एक से ज़्यादा इमेज के साथ प्रॉम्प्ट करने के लिए, generate_content के कॉल में कई इमेज दी जा सकती हैं. ये base64 या PIL जैसे किसी भी फ़ॉर्मैट में हो सकते हैं.

from google import genai
from google.genai import types

import pathlib
import PIL.Image

image_path_1 = "path/to/your/image1.jpeg"  # Replace with the actual path to your first image
image_path_2 = "path/to/your/image2.jpeg" # Replace with the actual path to your second image

image_url_1 = "https://goo.gle/instrument-img" # Replace with the actual URL to your third image

pil_image = PIL.Image.open(image_path_1)

b64_image = types.Part.from_bytes(
    pathlib.Path(image_path_2).read_bytes(), "image/jpeg")

downloaded_image = requests.get(image_url_1)

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What do these images have in common?",
              pil_image, b64_image, downloaded_image])

print(response.text)

ध्यान दें कि इनलाइन डेटा कॉल में, File API के ज़रिए उपलब्ध कई सुविधाएं शामिल नहीं होती हैं. जैसे, फ़ाइल का मेटाडेटा पाना, सूची बनाना या फ़ाइलें मिटाना.

बड़ी इमेज के पेलोड

अगर आपको भेजने के लिए, फ़ाइलों और सिस्टम निर्देशों का कॉम्बिनेशन 20 एमबी से ज़्यादा का है, तो उन फ़ाइलों को अपलोड करने के लिए File API का इस्तेमाल करें.

किसी भी साइज़ की इमेज अपलोड करने के लिए, File API के media.upload तरीके का इस्तेमाल करें.

फ़ाइल अपलोड करने के बाद, GenerateContent ऐसे अनुरोध किए जा सकते हैं जिनमें File API यूआरआई का रेफ़रंस दिया गया हो. जनरेटिव मॉडल चुनें और उसे टेक्स्ट प्रॉम्प्ट और अपलोड की गई इमेज दें.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

img_path = "/path/to/Cajun_instruments.jpg"
file_ref = client.files.upload(path=img_path)
print(f'{file_ref=}')

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What can you tell me about these instruments?",
              file_ref])

print(response.text)

OpenAI के साथ काम करना

OpenAI लाइब्रेरी का इस्तेमाल करके, Gemini की इमेज को समझने की सुविधाओं को ऐक्सेस किया जा सकता है. इसकी मदद से, तीन लाइनों के कोड को अपडेट करके और अपनी Gemini एपीआई पासकोड का इस्तेमाल करके, Gemini को मौजूदा OpenAI वर्कफ़्लो में इंटिग्रेट किया जा सकता है. Base64 पेलोड के तौर पर एन्कोड की गई इमेज भेजने का तरीका बताने वाले कोड के लिए, इमेज को समझने का उदाहरण देखें.

इमेज की मदद से प्रॉम्प्ट करना

इस ट्यूटोरियल में, आपको File API का इस्तेमाल करके या इनलाइन डेटा के तौर पर इमेज अपलोड करनी होंगी और उन इमेज के आधार पर कॉन्टेंट जनरेट करना होगा.

तकनीकी जानकारी (इमेज)

Gemini 1.5 Pro और 1.5 Flash, ज़्यादा से ज़्यादा 3,600 इमेज फ़ाइलों के साथ काम करते हैं.

इमेज, इमेज डेटा के इनमें से किसी MIME टाइप में होनी चाहिए:

  • PNG - image/png
  • JPEG - image/jpeg
  • WEBP - image/webp
  • HEIC - image/heic
  • HEIF - image/heif

टोकन

इमेज के लिए टोकन की गिनती इस तरह की जाती है:

  • Gemini 1.0 Pro Vision: हर इमेज के लिए 258 टोकन लगते हैं.
  • Gemini 1.5 Flash और Gemini 1.5 Pro: अगर किसी इमेज के दोनों डाइमेंशन 384 पिक्सल से कम या उसके बराबर हैं, तो 258 टोकन का इस्तेमाल किया जाता है. अगर किसी इमेज का एक डाइमेंशन 384 पिक्सल से ज़्यादा है, तो इमेज को टाइल में काट दिया जाता है. हर टाइल का साइज़, डिफ़ॉल्ट रूप से सबसे छोटे डाइमेंशन (चौड़ाई या ऊंचाई) को 1.5 से भाग देने पर मिलता है. ज़रूरत पड़ने पर, हर टाइल को अडजस्ट किया जाता है, ताकि वह 256 पिक्सल से छोटी और 768 पिक्सल से बड़ी न हो. इसके बाद, हर टाइल का साइज़ 768x768 पर सेट किया जाता है और इसमें 258 टोकन का इस्तेमाल किया जाता है.
  • Gemini 2.0 Flash: ऐसे इमेज इनपुट जिनके दोनों डाइमेंशन 384 पिक्सल से कम हों उन्हें 258 टोकन के तौर पर गिना जाता है. एक या दोनों डाइमेंशन में बड़ी इमेज को ज़रूरत के हिसाब से काटा जाता है और 768x768 पिक्सल की टाइल में स्केल किया जाता है. हर टाइल को 258 टोकन के तौर पर गिना जाता है.

बेहतर नतीजों के लिए

  • अपलोड करने से पहले, इमेज को सही ओरिएंटेशन में घुमाएं.
  • धुंधली इमेज अपलोड न करें.
  • अगर एक इमेज का इस्तेमाल किया जा रहा है, तो टेक्स्ट प्रॉम्प्ट को इमेज के बाद रखें.

मिलने वाली अनुमतियां

इस सेक्शन में, Gemini मॉडल की विज़न से जुड़ी खास सुविधाओं के बारे में बताया गया है. इनमें ऑब्जेक्ट की पहचान करने और बॉउंडिंग बॉक्स के निर्देशांक शामिल हैं.

किसी ऑब्जेक्ट का बाउंडिंग बॉक्स पाना

Gemini मॉडल को, बाउंडिंग बॉक्स के निर्देशांक को [0, 1] की रेंज में रिलेटिव चौड़ाई या ऊंचाई के तौर पर दिखाने के लिए ट्रेन किया जाता है. इसके बाद, इन वैल्यू को 1,000 से स्केल किया जाता है और इन्हें पूर्णांक में बदल दिया जाता है. असल में, निर्देशांक, इमेज के 1,000 x 1,000 पिक्सल वाले वर्शन पर बाउंडिंग बॉक्स दिखाते हैं. इसलिए, आपको इन निर्देशांकों को अपनी मूल इमेज के डाइमेंशन में बदलना होगा, ताकि बाउंडिंग बॉक्स को सटीक तरीके से मैप किया जा सके.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

prompt = (
  "Return a bounding box for each of the objects in this image "
  "in [ymin, xmin, ymax, xmax] format.")

response = client.models.generate_content(
  model="gemini-1.5-pro",
  contents=[sample_file_1, prompt])

print(response.text)

ऑब्जेक्ट का पता लगाने और इमेज और वीडियो में जगह की जानकारी पाने के लिए, बाउंडिंग बॉक्स का इस्तेमाल किया जा सकता है. बॉउंडिंग बॉक्स की मदद से, ऑब्जेक्ट की सटीक पहचान करके और उन्हें अलग-अलग दिखाकर, कई तरह के ऐप्लिकेशन इस्तेमाल किए जा सकते हैं. साथ ही, अपने प्रोजेक्ट की बेहतर जानकारी भी हासिल की जा सकती है.

खास फ़ायदे

  • आसान: अपने ऐप्लिकेशन में ऑब्जेक्ट की पहचान करने की सुविधाओं को आसानी से इंटिग्रेट करें. भले ही, आपके पास कंप्यूटर विज़न की विशेषज्ञता न हो.
  • पसंद के मुताबिक बनाया जा सकता है: कस्टम निर्देशों (उदाहरण के लिए, "मुझे इस इमेज में हरे रंग के सभी ऑब्जेक्ट के बॉउंडिंग बॉक्स देखने हैं") के आधार पर बॉउंडिंग बॉक्स बनाए जा सकते हैं. इसके लिए, आपको कस्टम मॉडल को ट्रेन करने की ज़रूरत नहीं है.

तकनीकी विवरण

  • इनपुट: आपका प्रॉम्प्ट और उससे जुड़ी इमेज या वीडियो फ़्रेम.
  • आउटपुट: [y_min, x_min, y_max, x_max] फ़ॉर्मैट में बॉउंडिंग बॉक्स. सबसे ऊपर बाईं ओर ऑरिजिन होता है. x और y ऐक्सिस, क्रमशः हॉरिज़ॉन्टल और वर्टिकल होते हैं. हर इमेज के लिए, कोऑर्डिनेट वैल्यू को 0 से 1,000 के बीच नॉर्मलाइज़ किया जाता है.
  • विज़ुअलाइज़ेशन: AI Studio के उपयोगकर्ताओं को यूज़र इंटरफ़ेस में प्लॉट किए गए बॉर्डर बॉक्स दिखेंगे.

Python डेवलपर के लिए, 2D स्पेसियल समझने वाली नोटबुक या एक्सपेरिमेंट के तौर पर उपलब्ध 3D पॉइंट करने वाली नोटबुक आज़माएं.

निर्देशांक को सामान्य करना

मॉडल, बॉउंडिंग बॉक्स के निर्देशांक को [y_min, x_min, y_max, x_max] फ़ॉर्मैट में दिखाता है. इन सामान्य किए गए निर्देशांकों को अपनी मूल इमेज के पिक्सल निर्देशांक में बदलने के लिए, यह तरीका अपनाएं:

  1. हर आउटपुट कोऑर्डिनेट को 1,000 से भाग दें.
  2. x-कोऑर्डिनेट को ओरिजनल इमेज की चौड़ाई से गुणा करें.
  3. y-कोऑर्डिनेट को ओरिजनल इमेज की ऊंचाई से गुणा करें.

बाउंडिंग बॉक्स के निर्देशांक जनरेट करने और इमेज पर उन्हें विज़ुअलाइज़ करने के बारे में ज़्यादा जानकारी वाले उदाहरणों को एक्सप्लोर करने के लिए, हमारा ऑब्जेक्ट डिटेक्शन कुकबुक का उदाहरण देखें.

वीडियो के साथ प्रॉम्प्ट करना

इस ट्यूटोरियल में, File API का इस्तेमाल करके वीडियो अपलोड करने और उन इमेज के आधार पर कॉन्टेंट जनरेट करने का तरीका बताया गया है.

तकनीकी जानकारी (वीडियो)

Gemini 1.5 Pro और Flash, करीब एक घंटे तक का वीडियो डेटा सेव कर सकते हैं.

वीडियो, इनमें से किसी एक वीडियो फ़ॉर्मैट MIME टाइप में होना चाहिए:

  • video/mp4
  • video/mpeg
  • video/mov
  • video/avi
  • video/x-flv
  • video/mpg
  • video/webm
  • video/wmv
  • video/3gpp

File API सेवा, वीडियो से हर सेकंड एक फ़्रेम (एफ़पीएस) और ऑडियो से 1 केबीपीएस, सिंगल चैनल पर इमेज फ़्रेम निकालती है. साथ ही, हर सेकंड टाइमस्टैंप जोड़ती है. आने वाले समय में, अनुमान लगाने की सुविधा को बेहतर बनाने के लिए, इन दरों में बदलाव हो सकता है.

हर फ़्रेम के लिए 258 टोकन और ऑडियो के लिए हर सेकंड 32 टोकन लगते हैं. मेटाडेटा की मदद से, वीडियो के हर सेकंड को ~300 टोकन में बदला जाता है. इसका मतलब है कि 10 लाख टोकन वाली कॉन्टेक्स्ट विंडो में, एक घंटे से थोड़ा कम वीडियो फ़िट हो सकता है.

टाइमस्टैंप वाली जगहों के बारे में सवाल पूछने के लिए, MM:SS फ़ॉर्मैट का इस्तेमाल करें. इसमें, पहले दो अंक मिनट और आखिरी दो अंक सेकंड दिखाते हैं.

सर्वोत्तम परिणामों के लिएः

  • हर प्रॉम्प्ट के लिए एक वीडियो का इस्तेमाल करें.
  • अगर एक वीडियो का इस्तेमाल किया जा रहा है, तो टेक्स्ट प्रॉम्प्ट को वीडियो के बाद रखें.

File API का इस्तेमाल करके वीडियो फ़ाइल अपलोड करना

File API, वीडियो फ़ाइल फ़ॉर्मैट को सीधे तौर पर स्वीकार करता है. इस उदाहरण में, नासा की कम अवधि की फ़िल्म "जुपिटर का ग्रेट रेड स्पॉट छोटा और बड़ा होता है" का इस्तेमाल किया गया है. क्रेडिट: गोडार्ड स्पेस फ़्लाइट सेंटर (जीएसएफ़सी)/डेविड लैड (2018).

"Jupiter's Great Red Spot Shrinks and Grows" सार्वजनिक डोमेन में है और इसमें ऐसे लोगों की जानकारी नहीं दी गई है जिनकी पहचान की जा सकती हो. (नासा की इमेज और मीडिया के इस्तेमाल से जुड़े दिशा-निर्देश.)

सबसे पहले, छोटा वीडियो वापस पाएं:

wget https://storage.googleapis.com/generativeai-downloads/images/GreatRedSpot.mp4

File API का इस्तेमाल करके वीडियो अपलोड करें और यूआरआई प्रिंट करें.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

print("Uploading file...")
video_file = client.files.upload(path="GreatRedSpot.mp4")
print(f"Completed upload: {video_file.uri}")

फ़ाइल अपलोड होने की पुष्टि करना और उसकी स्थिति देखना

files.get तरीके को कॉल करके पुष्टि करें कि एपीआई को फ़ाइलें मिल गई हैं.

import time

# Check whether the file is ready to be used.
while video_file.state.name == "PROCESSING":
    print('.', end='')
    time.sleep(1)
    video_file = client.files.get(name=video_file.name)

if video_file.state.name == "FAILED":
  raise ValueError(video_file.state.name)

print('Done')

वीडियो और टेक्स्ट के साथ प्रॉम्प्ट

अपलोड किया गया वीडियो ACTIVE स्टेटस में होने के बाद, उस वीडियो के लिए File API यूआरआई बताने वाले GenerateContent अनुरोध किए जा सकते हैं. जनरेटिव मॉडल चुनें और उसे अपलोड किया गया वीडियो और टेक्स्ट प्रॉम्प्ट दें.

from IPython.display import Markdown

# Pass the video file reference like any other media part.
response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[
        video_file,
        "Summarize this video. Then create a quiz with answer key "
        "based on the information in the video."])

# Print the response, rendering any Markdown
Markdown(response.text)

कॉन्टेंट में मौजूद टाइमस्टैंप देखें

वीडियो के किसी खास हिस्से का रेफ़रंस देने के लिए, HH:MM:SS फ़ॉर्मैट के टाइमस्टैंप का इस्तेमाल किया जा सकता है.

prompt = "What are the examples given at 01:05 and 01:19 supposed to show us?"

response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[video_file, prompt])

print(response.text)

वीडियो को ट्रांसक्राइब करना और विज़ुअल के ज़रिए जानकारी देना

Gemini मॉडल, ऑडियो ट्रैक और विज़ुअल फ़्रेम, दोनों को प्रोसेस करके वीडियो कॉन्टेंट को लिखित में बदल सकते हैं और उसके बारे में विज़ुअल जानकारी दे सकते हैं. विज़ुअल जानकारी के लिए, मॉडल वीडियो को एक फ़्रेम प्रति सेकंड की दर से सैंपल करता है. सैंपलिंग रेट से, ब्यौरे में दी गई जानकारी के लेवल पर असर पड़ सकता है. ऐसा खास तौर पर, तेज़ी से बदलने वाले विज़ुअल वाले वीडियो के लिए होता है.

prompt = (
    "Transcribe the audio from this video, giving timestamps for "
    "salient events in the video. Also provide visual descriptions.")

response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[video_file, prompt])

print(response.text)

फ़ाइलों की सूची

files.list का इस्तेमाल करके, File API और उनके यूआरआई का इस्तेमाल करके अपलोड की गई सभी फ़ाइलों की सूची बनाई जा सकती है.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

print('My files:')
for f in client.files.list():
  print(" ", f'{f.name}: {f.uri}')

फ़ाइलें मिटाना

File API का इस्तेमाल करके अपलोड की गई फ़ाइलें, दो दिन बाद अपने-आप मिट जाती हैं. files.delete का इस्तेमाल करके, उन्हें मैन्युअल तरीके से भी मिटाया जा सकता है.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

# Upload a file
poem_file = client.files.upload(path="poem.txt")

# Files will auto-delete after a period.
print(poem_file.expiration_time)

# Or they can be deleted explicitly.
dr = client.files.delete(name=poem_file.name)

try:
  client.models.generate_content(
      model="gemini-2.0-flash-exp",
      contents=['Finish this poem:', poem_file])
except genai.errors.ClientError as e:
  print(e.code)  # 403
  print(e.status)  # PERMISSION_DENIED
  print(e.message)  # You do not have permission to access the File .. or it may not exist.

आगे क्या करना है

इस गाइड में, File API का इस्तेमाल करके इमेज और वीडियो फ़ाइलें अपलोड करने का तरीका बताया गया है. साथ ही, इमेज और वीडियो इनपुट से टेक्स्ट आउटपुट जनरेट करने का तरीका भी बताया गया है. ज़्यादा जानने के लिए, ये संसाधन देखें:

  • फ़ाइल के लिए प्रॉम्प्ट करने की रणनीतियां: Gemini API, टेक्स्ट, इमेज, ऑडियो, और वीडियो डेटा के साथ प्रॉम्प्ट करने की सुविधा देता है. इसे मल्टीमॉडल प्रॉम्प्ट भी कहा जाता है.
  • सिस्टम के निर्देश: सिस्टम के निर्देशों की मदद से, अपनी ज़रूरतों और इस्तेमाल के उदाहरणों के आधार पर, मॉडल के व्यवहार को कंट्रोल किया जा सकता है.
  • सुरक्षा से जुड़े दिशा-निर्देश: कभी-कभी जनरेटिव एआई मॉडल, अनचाहे आउटपुट देते हैं. जैसे, गलत, पक्षपातपूर्ण या आपत्तिजनक आउटपुट. ऐसे आउटपुट से होने वाले नुकसान को कम करने के लिए, पोस्ट-प्रोसेसिंग और मानवीय आकलन ज़रूरी है.