זיהוי טקסט בתמונות

שירות זיהוי התווים האופטי (OCR) של Vertex AI ב-Google Distributed Cloud (GDC)‎ עם air gap מזהה טקסט בתמונות באמצעות ה-method‏ BatchAnnotateImages של ה-API. השירות תומך בקובצי JPEG ו-PNG לתמונות.

בדף הזה מוסבר איך לזהות טקסט בתמונה באמצעות OCR API ב-Distributed Cloud.

לפני שמתחילים

כדי לזהות טקסט בתמונות, צריך לבקש מאדמין ה-IAM של הפרויקט את התפקיד מפתח AI OCR (ai-ocr-developer) במרחב השמות של הפרויקט.

למידע נוסף על התפקיד הזה, קראו את המאמר הכנת הרשאות IAM.

כדי להתחיל להשתמש ב-OCR API, צריך פרויקט שבו ה-OCR API מופעל ופרטי כניסה מתאימים. אפשר גם להתקין ספריות לקוח שיעזרו לכם לבצע קריאות ל-API. למידע נוסף, קראו את המאמר הגדרת פרויקט לזיהוי תווים.

זיהוי טקסט מקובצי JPEG ו-PNG

השיטה BatchAnnotateImages מזהה טקסט מקבוצה של קובצי JPEG או PNG. אתם שולחים את הקובץ שבו אתם רוצים לזהות טקסט ישירות כתוכן בבקשת ה-API. המערכת מחזירה את הטקסט שזוהה בפורמט JSON בתגובה מה-API.

צריך לציין ערכים לשדות בגוף ה-JSON של בקשת ה-API. בטבלה הבאה מתוארים השדות של גוף הבקשה שצריך לספק כשמשתמשים ב-method‏ BatchAnnotateImages של ה-API לבקשות של זיהוי טקסט:

שדות בגוף הבקשה תיאור השדה
content התמונות עם הטקסט שרוצים לזהות. אתם מספקים את הייצוג ב-Base64 (מחרוזת ASCII) של נתוני התמונה הבינאריים.
type סוג זיהוי הטקסט שאתם צריכים מהתמונה.

מציינים את אחת משתי תכונות ההערות:
  • ‫TEXT_DETECTION מזהה ומחלץ טקסט מכל תמונה. תגובת ה-JSON כוללת את המחרוזת שחולצה, מילים בודדות והתיבות התוחמות שלהן.
  • ‫DOCUMENT_TEXT_DETECTION גם מחלץ טקסט מתמונה, אבל השירות מבצע אופטימיזציה של התשובה לטקסטים ולמסמכים צפופים. ה-JSON כולל מידע על הדף, הבלוק, הפסקה, המילה והמעבר.
מידע נוסף על תכונות ההערות האלה זמין במאמר תכונות של זיהוי תווים אופטי.
language_hints זה שינוי אופציונלי. רשימת השפות שבהן משתמשים לזיהוי הטקסט.

אם השדה הזה ריק, המערכת מפרשת את זה כזיהוי שפה אוטומטי.

לא צריך להגדיר את השדה language_hints לשפות שמבוססות על האלפבית הלטיני.

אם אתם יודעים מהי השפה של הטקסט בתמונה, הגדרת רמז משפרת את התוצאות.

למידע על הייצוג המלא של JSON, ראו AnnotateImageRequest.

שליחת בקשת API

שולחים בקשה ל-API שעבר אימון מראש ל-OCR באמצעות ה-method של ה-API בארכיטקטורת REST. אחרת, אתם יכולים להשתמש ב-API שעבר אימון מראש לזיהוי תווים אופטי (OCR) מסקריפט Python כדי לזהות טקסט מקובצי JPEG או PNG.

בדוגמאות הבאות מוסבר איך לזהות טקסט בתמונה באמצעות OCR:

REST

כדי לזהות טקסט בתמונות באמצעות ה-method של API בארכיטקטורת REST:

  1. שומרים את הקובץ request.json הבא לגוף הבקשה:

    cat <<- EOF > request.json
    {
      "requests": [
        {
          "image": {
            "content": BASE64_ENCODED_IMAGE
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "image_context": {
            "language_hints": [
              "LANGUAGE_HINT_1",
              "LANGUAGE_HINT_2",
              ...
            ]
          }
        }
      ]
    }
    EOF
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫BASE64_ENCODED_IMAGE: ייצוג Base64 (מחרוזת ASCII) של נתוני התמונה הבינאריים. המחרוזת הזו מתחילה בתווים שנראים כמו /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==.
    • ‫FEATURE_TYPE: סוג זיהוי הטקסט שאתם צריכים מהתמונה. הערכים המותרים הם TEXT_DETECTION או DOCUMENT_TEXT_DETECTION.
    • ‫LANGUAGE_HINT: תגי השפה של BCP 47 שישמשו כרמזים לשפה בזיהוי הטקסט, למשל en-t-i0-handwrit. השדה הזה הוא אופציונלי, ואם הוא ריק המערכת מזהה את השפה באופן אוטומטי.
  2. קבל אסימון אימות.

  3. שולחים את הבקשה:

    curl

    curl -X POST \
      -H "Authorization: Bearer TOKEN" \
      -H "x-goog-user-project: projects/PROJECT_ID" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      https://ENDPOINT/v1/images:annotate
    

    מחליפים את מה שכתוב בשדות הבאים:

    PowerShell

    $headers = @{
      "Authorization" = "Bearer TOKEN"
      "x-goog-user-project" = "projects/PROJECT_ID"
    }
    
    Invoke-WebRequest
      -Method POST
      -Headers $headers
      -ContentType: "application/json; charset=utf-8"
      -InFile request.json
      -Uri "ENDPOINT/v1/images:annotate" | Select-Object -Expand Content
    

    מחליפים את מה שכתוב בשדות הבאים:

Python

כדי להשתמש בשירות ה-OCR מסקריפט Python לזיהוי טקסט בתמונה:

  1. מתקינים את הגרסה העדכנית של ספריית הלקוח של OCR.

  2. הגדרת משתני הסביבה הנדרשים בסקריפט של Python.

  3. מאמתים את בקשת ה-API.

  4. מוסיפים את הקוד הבא לסקריפט Python שיצרתם:

    from google.cloud import vision
    import google.auth
    from google.auth.transport import requests
    from google.api_core.client_options import ClientOptions
    
    audience = "https://ENDPOINT:443"
    api_endpoint="ENDPOINT:443"
    
    def vision_client(creds):
      opts = ClientOptions(api_endpoint=api_endpoint)
      return vision.ImageAnnotatorClient(credentials=creds, client_options=opts)
    
    def main():
      creds = None
      try:
        creds, project_id = google.auth.default()
        creds = creds.with_gdch_audience(audience)
        req = requests.Request()
        creds.refresh(req)
      except Exception as e:
        print("Caught exception" + str(e))
        raise e
      return creds
    
    def vision_func(creds):
      vc = vision_client(creds)
      image = {"content": "BASE64_ENCODED_IMAGE"}
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      # Each requests element corresponds to a single image. To annotate more
      # images, create a request element for each image and add it to
      # the array of requests
      req = {"image": image, "features": features}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      resp = vc.annotate_image(req,metadata=metadata)
    
      print(resp)
    
    if __name__=="__main__":
      creds = main()
      vision_func(creds)
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫ENDPOINT: נקודת הקצה של ה-OCR שמשמשת את הארגון. למידע נוסף על סטטוס השירות ונקודות הקצה (endpoint)
    • ‫BASE64_ENCODED_IMAGE: ייצוג Base64 (מחרוזת ASCII) של נתוני התמונה הבינאריים. המחרוזת הזו מתחילה בתווים שנראים כמו /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==.
    • ‫FEATURE_TYPE: סוג זיהוי הטקסט שאתם צריכים מהתמונה. הערכים המותרים הם TEXT_DETECTION או DOCUMENT_TEXT_DETECTION.
    • PROJECT_ID: מזהה הפרויקט.
  5. שומרים את הסקריפט של Python.

  6. מריצים את הסקריפט של Python כדי לזהות טקסט בתמונה:

    python SCRIPT_NAME
    

    מחליפים את SCRIPT_NAME בשם שנתתם לסקריפט Python, למשל vision.py.