ملی ای‌پی‌آی

خواندن عکس فرم و اسکرین‌شات با Gemini 2.5 Pro

تصویر را در همان پیام کاربر کنار متن بفرستید و جواب JSON بخواهید. این راهنما با کد Python نشان می‌دهد، و می‌گوید چرا خروجی مدل را باید با قاعده‌های خودتان بررسی کنید.

برای خواندن عکس فرم یا اسکرین‌شات با API، تصویر را در همان پیام کاربر، کنار متن می‌فرستید و از مدل جواب JSON می‌خواهید. این راهنما با Gemini 2.5 Pro همین کار را قدم‌به‌قدم انجام می‌دهد و می‌گوید چرا جواب مدل را نباید بی‌بررسی بپذیرید.

چهار قدم خواندن عکس فرم: متن و تصویر کوچک‌شده در یک پیام، خروجی JSON با null برای بخش نخوانا، بررسی شماره موبایل و رقم کنترلی کد ملی، و تأیید انسان برای داده‌ی حساس
خواندن تصویر فرم با بررسی در برنامهٔ خودتان

پیام چندبخشی: متن و تصویر با هم

فیلد content هر پیام عیناً به مدل می‌رسد، پس ساختار چندبخشی استاندارد کار می‌کند. تصویر را می‌توان به‌صورت نشانی https یا data URL فرستاد.

{
  "model": "google-gemini-2.5-pro",
  "max_tokens": 800,
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "این فرم را بخوان و فقط JSON بده: name، phone، city. اگر فیلدی خوانا نیست، null بگذار و حدس نزن."},
        {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,/9j/4AAQ…"}}
      ]
    }
  ]
}

عبارت «حدس نزن» مهم است. مدل بینایی وقتی خط‌خوردگی یا لکه می‌بیند، ممکن است چیزی بسازد که معقول به نظر برسد و غلط باشد.

تصویر را کوچک کنید

تصویر هم توکن مصرف می‌کند و کم هم نیست. عکس موبایل را پیش از ارسال تا عرضی کوچک کنید که نوشته هنوز خوانا بماند؛ در بیشتر کاربردها کیفیت پایین‌تر هیچ تفاوتی در پاسخ نمی‌سازد، ولی هزینه و زمان را کم می‌کند. چند نمونه را در دو اندازه امتحان کنید و کوچک‌ترین اندازه‌ای را بردارید که جواب را تغییر نمی‌دهد.

کد (Python)

import base64, json, os, requests

URL = "https://melliapi.net/api/v1/ai/chat/completions/"

def read_form(path):
    with open(path, "rb") as f:
        b64 = base64.b64encode(f.read()).decode()
    r = requests.post(
        URL,
        headers={"Authorization": "Bearer " + os.environ["MELLIAPI_API_KEY"]},
        json={
            "model": "google-gemini-2.5-pro",
            "max_tokens": 800,
            "messages": [{
                "role": "user",
                "content": [
                    {"type": "text", "text": "فقط JSON بده: name, phone, city. نخوانا بود: null."},
                    {"type": "image_url",
                     "image_url": {"url": "data:image/jpeg;base64," + b64}},
                ],
            }],
        },
        timeout=120,
    )
    data = r.json()
    if not data.get("ok"):
        raise RuntimeError(data["error"]["code"])
    return json.loads(data["content"])

خروجی را بررسی کنید، به مدل اعتماد نکنید

مدل نوشته می‌خواند، تأیید نمی‌کند. شماره موبایلی که از عکس بیرون آمد را با قاعدهٔ شماره موبایل بسنجید و کد ملی را با رقم کنترلی. اگر بررسی رد شد، فرم را به یک انسان بدهید. عدد خوانده‌شده‌ای که در هیچ بررسی‌ای رد نمی‌شود، هنوز ممکن است یک رقم اشتباه داشته باشد؛ برای داده‌ای که پول یا هویت به آن گره خورده، یک بار دیگر از کاربر تأیید بگیرید.

حریم خصوصی تصویر

عکس مدارک هویتی را فقط وقتی بفرستید که واقعاً لازم است، و فقط بخش لازم را. ما متن پیام‌ها را نگه نمی‌داریم، ولی تصویر در مسیر به ارائه‌دهندهٔ مدل می‌رسد. اگر فقط شماره روی کارت لازم است، بخش‌های دیگر را برش بزنید.

آنچه این روش انجام نمی‌دهد

  • خط‌خوردگی و دست‌خط بد را جادویی نمی‌خواند. برای تصویر نامرغوب، از کاربر عکس بهتر بخواهید.
  • اصالت فرم را نمی‌سنجد. مدل می‌خواند که چه نوشته شده، نه اینکه فرم جعلی است یا نه.
  • جای بررسی خروجی را نمی‌گیرد. قاعدهٔ شماره موبایل و رقم کنترلی در برنامهٔ خودتان بماند.
آخرین بازبینی: تیم تحریریه ملی ای‌پی‌آی

پرسش و تجربه کاربران

اگر این راهنما جوابتان را نداد، همین‌جا بپرسید. پرسش‌ها را تیمملی ای‌پی‌آی پاسخ می‌دهد و هر نظر پیش از انتشار بررسی می‌شود.

هنوز پرسشی ثبت نشده، اولین نفر باشید.