זיהוי טקסט בקבצים

שירות זיהוי התווים האופטי (OCR) של Vertex AI ב-Google Distributed Cloud (GDC)‎ עם air gap מזהה ומחלץ טקסט מקובצי PDF ו-TIFF. אתם יכולים לשלוח קבצים מקומיים בבקשות בתוך השורה (inline) ל-method‏ BatchAnnotateFiles של ה-API, או לעבד קבצים שמאוחסנים בקטגוריות באופן אסינכרוני באמצעות ה-method‏ AsyncBatchAnnotateFiles של ה-API. ה-method‏ BatchAnnotateFiles של ה-API תומכת בבקשה אחת לכל קריאה באצווה.

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

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

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

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

זיהוי טקסט באמצעות בקשות מוטבעות

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

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

שדות בגוף הבקשה תיאור השדה
content הקבצים עם הטקסט שרוצים לזהות. אתם מספקים את הייצוג ב-Base64 (מחרוזת ASCII) של תוכן הקובץ הבינארי.
mime_type סוג קובץ המקור. צריך להגדיר אותו לאחד מהערכים הבאים:
  • ‫application/pdf לקובצי PDF
  • ‫image/tiff לקובצי TIFF
type סוג זיהוי הטקסט שאתם צריכים מהקובץ.

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

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

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

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

אפשר לציין עד חמישה דפים. אם לא מציינים את מספר הדפים, השירות מעבד את חמשת הדפים הראשונים בקובץ.

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

שליחת בקשת API מוטבעת

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

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

REST

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

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

    cat <<- EOF > request.json
    {
      "requests": [
        {
          "input_config": {
            "content": BASE64_ENCODED_FILE,
            "mime_type": "application/pdf"
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "image_context": {
            "language_hints": [
              "LANGUAGE_HINT_1",
              "LANGUAGE_HINT_2",
              ...
            ]
          },
          "pages": []
        }
      ]
    }
    EOF
    

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

    • ‫BASE64_ENCODED_FILE: ייצוג 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/files: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/files: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)
      input_config = {"content": "BASE64_ENCODED_FILE"}
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      # Each requests element corresponds to a single file. To annotate more
      # files, create a request element for each file and add it to
      # the array of requests
      req = {"input_config": input_config, "features": features}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      resp = vc.annotate_file(req,metadata=metadata)
    
      print(resp)
    
    if __name__=="__main__":
      creds = main()
      vision_func(creds)
    

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

    • ‫ENDPOINT: נקודת הקצה של ה-OCR שמשמשת את הארגון. למידע נוסף על סטטוס השירות ונקודות הקצה
    • ‫BASE64_ENCODED_FILE: ייצוג 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.

זיהוי טקסט באמצעות בקשות אופליין

השיטה AsyncBatchAnnotateFiles מזהה טקסט מקבוצה של קובצי PDF או TIFF על ידי ביצוע בקשה אופליין (אסינכרונית). הקבצים יכולים להכיל כמה דפים וכמה תמונות בכל דף. קובצי המקור צריכים להיות בקטגוריית אחסון בפרויקט בענן שלכם ב-Distributed Cloud. המערכת שומרת את הטקסט שזוהה בפורמט JSON בקטגוריית אחסון.

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

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

שדות בגוף הבקשה תיאור השדה
gcs_source.uri נתיב ה-URI לקובץ מקור תקין (PDF או TIFF) בקטגוריית אחסון בפרויקט בענן שלכם ב-Distributed Cloud.

הקובץ הזה מכיל את הטקסט שרוצים לזהות.

למשתמש או לחשבון השירות ששולחים את הבקשה צריכות להיות לפחות הרשאות קריאה בקובץ.
mime_type סוג קובץ המקור. צריך להגדיר אותו לאחד מהערכים הבאים:
  • ‫application/pdf לקובצי PDF
  • ‫image/tiff לקובצי TIFF
type סוג זיהוי הטקסט שאתם צריכים מהקובץ.

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

זה המיקום שבו רוצים לאחסן את תוצאות הזיהוי.

למשתמש או לחשבון השירות ששולחים את הבקשה צריכה להיות הרשאת כתיבה בקטגוריה.

אחסון קובץ המקור בקטגוריית אחסון

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

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

כדי לאחסן בקטגוריית אחסון את הקובץ שממנו רוצים לזהות טקסט:

  1. הגדרת ה-gdcloud CLI למאגר אובייקטים.
  2. יוצרים קטגוריית אחסון במרחב השמות של הפרויקט.משתמשים בסוג האחסון Standard.

    כדי ליצור את קטגוריית האחסון, אפשר לפרוס משאב Bucket במרחב השמות של הפרויקט:

    apiVersion: object.gdc.goog/v1
    kind: Bucket
    metadata:
      name: ocr-async-bucket
      namespace: PROJECT_NAMESPACE
    spec:
      description: bucket for async ocr
      storageClass: Standard
      bucketPolicy:
        lockingPolicy:
          defaultObjectRetentionDays: 90
    
  3. נותנים לחשבון השירות (g-vai-ocr-sie-sa) שמשמש את שירות ה-OCR את ההרשאות read ו-write בקטגוריה.

    כדי ליצור את התפקיד ואת קישור התפקיד באמצעות משאבים בהתאמה אישית, מבצעים את השלבים הבאים:

    1. יוצרים את התפקיד על ידי פריסת משאב Role במרחב השמות של הפרויקט:

        apiVersion: rbac.authorization.k8s.io/v1
        kind: Role
        metadata:
          name: ocr-async-reader-writer
          namespace: PROJECT_NAMESPACE
        rules:
          -
            apiGroups:
              - object.gdc.goog
            resources:
              - buckets
            verbs:
              - read-object
              - write-object
      
    2. יוצרים את קישור התפקיד על ידי פריסת משאב RoleBinding במרחב השמות של הפרויקט:

        apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
      
        metadata:
          name: ocr-async-reader-writer-rolebinding
          namespace: PROJECT_NAMESPACE
        roleRef:
          apiGroup: rbac.authorization.k8s.io
          kind: Role
          name: ocr-async-reader-writer
        subjects:
          -
            kind: ServiceAccount
            name: g-vai-ocr-sie-sa
            namespace: g-vai-ocr-sie
      
  4. מעלים את הקובץ לקטגוריית האחסון שיצרתם. מידע נוסף זמין במאמר העלאה והורדה של אובייקטים באחסון בפרויקטים.

שליחת בקשת API אופליין

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

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

REST

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

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

    cat <<- EOF > request.json
    {
      "parent": PROJECT_ID,
      "requests":[
        {
          "input_config": {
            "gcs_source": {
              "uri": "SOURCE_FILE"
            },
            "mime_type": "application/pdf"
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "output_config": {
            "gcs_destination": {
              "uri": "DESTINATION_BUCKET"
            }
          }
        }
      ]
    }
    EOF
    

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

    • PROJECT_ID: מזהה הפרויקט.
    • ‫SOURCE_FILE: נתיב ה-URI לקובץ מקור תקין (PDF או TIFF) בקטגוריית אחסון בפרויקט בענן שלכם ב-Distributed Cloud.
    • ‫FEATURE_TYPE: סוג זיהוי הטקסט שאתם צריכים מהקובץ. הערכים המותרים הם TEXT_DETECTION או DOCUMENT_TEXT_DETECTION.
    • ‫DESTINATION_BUCKET: נתיב ה-URI לקטגוריית אחסון בפרויקט בענן שלכם ב-Distributed Cloud, שבה יישמרו קובצי הפלט.
  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/files:asyncBatchAnnotate
    

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

    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/files:asyncBatchAnnotate" | 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 vision_func_async(creds):
      vc = vision_client(creds)
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      input_config = {"gcs_source":{"uri":"SOURCE_FILE"},"mime_type": "application/pdf"}
      output_config = {"gcs_destination": {"uri": "DESTINATION_BUCKET"}}
      req = {"input_config": input_config, "output_config": output_config, "features":features}
      reqs = {"requests":[req],"parent":"PROJECT_ID"}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      operation = vc.async_batch_annotate_files(request=reqs, metadata=metadata)
      lro = operation.operation
      resp = operation.result()
    
    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
    
    if __name__=="__main__":
      creds = main()
      vision_func_async(creds)
    

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

    • ‫ENDPOINT: נקודת הקצה של ה-OCR שמשמשת את הארגון. למידע נוסף על סטטוס השירות ונקודות הקצה
    • ‫FEATURE_TYPE: סוג זיהוי הטקסט שאתם צריכים מהקובץ. הערכים המותרים הם TEXT_DETECTION או DOCUMENT_TEXT_DETECTION.
    • ‫SOURCE_FILE: נתיב ה-URI לקובץ מקור תקין (PDF או TIFF) בקטגוריית אחסון בפרויקט בענן שלכם ב-Distributed Cloud.
    • ‫DESTINATION_BUCKET: נתיב ה-URI לקטגוריית אחסון בפרויקט בענן שלכם ב-Distributed Cloud, שבה יישמרו קובצי הפלט.
    • PROJECT_ID: מזהה הפרויקט.
  5. שומרים את הסקריפט של Python.

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

    python SCRIPT_NAME
    

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

כדי לבדוק את סטטוס הפעולה, אתם יכולים להשתמש בשם הפעולה שהוחזר על ידי השיטה AsyncBatchAnnotateFiles.

קבלת הסטטוס של הפעולה

השיטה get מחזירה את המצב האחרון של פעולה ממושכת, כמו בקשה אופליין לזיהוי טקסט. כדי לבדוק את סטטוס הפעולה, אפשר להשתמש בשיטה הזו כמו בדוגמה הבאה:

curl -X GET "http://ENDPOINT/v1/OPERATION_NAME"

מחליפים את OPERATION_NAME בשם הפעולה שהשיטה AsyncBatchAnnotateFiles החזירה כששלחתם את הבקשה אופליין.

הצגת רשימה של פעולות

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

curl -X GET "http://ENDPOINT/v1/PROJECT_ID?page_size=10"