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

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

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

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

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

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

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

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

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

מציינים אחת משתי תכונות ההערה:
  • TEXT_DETECTION מזהה ומחלץ טקסט מכל תמונה. תגובת ה-JSON כוללת את המחרוזת שחולצה, מילים נפרדות ותיבות התוחמות שלהן.
  • DOCUMENT_TEXT_DETECTION גם מחלץ טקסט מתמונה, אבל השירות מבצע אופטימיזציה של התגובה לטקסט ולמסמכים צפופים. קובץ ה-JSON כולל מידע על דף, בלוק, פסקה, מילה ומעבר שורה.
מידע נוסף על תכונות ההערות האלה זמין במאמר תכונות של זיהוי תווים אופטי (OCR).
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)
        print("Got token: ")
        print(creds.token)
      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 שבה אתם משתמשים בארגון. למידע נוסף, אפשר לראות את סטטוס השירות ונקודות הקצה.
    • 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.