Enterprise Document OCR

אתם יכולים להשתמש ב-Enterprise Document OCR כחלק מ-Document AI כדי לזהות ולחלץ טקסט ומידע על פריסה ממסמכים שונים. בעזרת תכונות שניתנות להגדרה, אפשר להתאים את המערכת לדרישות ספציפיות של עיבוד מסמכים.

סקירה כללית

אתם יכולים להשתמש ב-Enterprise Document OCR למשימות כמו הזנת נתונים שמבוססת על אלגוריתמים או על למידת מכונה, ולשיפור ולאימות של דיוק הנתונים. אתם יכולים להשתמש ב-Enterprise Document OCR גם כדי לבצע משימות כמו:

  • דיגיטציה של טקסט: חילוץ טקסט ונתוני פריסה ממסמכים לחיפוש, לצינורות לעיבוד מסמכים שמבוססים על כללים או ליצירת מודלים בהתאמה אישית.
  • שימוש באפליקציות של מודלי שפה גדולים (LLM): אפשר להשתמש בהבנה ההקשרית של מודלי שפה גדולים (LLM) וביכולות החילוץ של טקסט ופריסה של OCR כדי להפוך שאלות ותשובות לאוטומטיות. לקבל תובנות מהנתונים ולייעל את תהליכי העבודה.
  • ארכיון: המרת מסמכים מנייר לטקסט שניתן לקריאה על ידי מכונה כדי לשפר את הנגישות למסמכים.

בחירת ה-OCR המתאים ביותר לתרחיש השימוש

הפתרון Product תיאור תרחיש לדוגמה
Document AI Enterprise Document OCR מודל ייעודי לתרחישי שימוש במסמכים. התכונות המתקדמות כוללות ציון איכות התמונה, רמזים לגבי השפה ותיקון סיבוב. מומלץ כשמחפשים טקסט במסמכים. תרחישי שימוש לדוגמה כוללים קובצי PDF, מסמכים סרוקים כתמונות או קובצי Microsoft DocX.
Document AI תוספים ל-OCR תכונות פרימיום לצרכים ספציפיים. התכונה הזו תואמת רק לגרסה 2.0 ואילך של Enterprise Document OCR. צריך לזהות נוסחאות מתמטיות, לקבל מידע על סגנון הגופן או להפעיל חילוץ של תיבות סימון.
Cloud Vision API זיהוי טקסט ‫API בארכיטקטורת REST שזמין בכל העולם ומבוסס על Google Cloud מודל OCR רגיל. מכסת ברירת המחדל היא 1,800 בקשות לדקה. תרחישים כלליים של חילוץ טקסט שדורשים חביון נמוך וקיבולת גבוהה.
Cloud Vision OCR Google Distributed Cloud (הוצא משימוש) אפליקציה של Google Cloud Marketplace שאפשר לפרוס כקונטיינר לכל אשכול GKE באמצעות GKE Enterprise. כדי לעמוד בדרישות של מיקום הנתונים או בדרישות התאימות.

זיהוי וחילוץ

‫Enterprise Document OCR יכול לזהות בלוקים, פסקאות, שורות, מילים וסמלים בקובצי PDF ובתמונות, וגם ליישר מסמכים כדי לשפר את הדיוק.

מאפיינים נתמכים לזיהוי פריסה ולחילוץ נתונים:

טקסט מודפס כתב יד פסקה חסימה Line Word ברמת הסמל מספר הדף
ברירת מחדל ברירת מחדל ברירת מחדל ברירת מחדל ברירת מחדל ברירת מחדל ניתן להגדרה ברירת מחדל

התכונות של Enterprise Document OCR שאפשר להגדיר כוללות:

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

  • תיקון סיבוב: אפשר להשתמש ב-Enterprise Document OCR כדי לבצע עיבוד מקדים של תמונות מסמכים ולתקן בעיות סיבוב שעלולות להשפיע על איכות החילוץ או העיבוד.

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

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

  • זיהוי שפה: זיהוי השפות שבהן כתוב הטקסט שחולץ.

  • רמזים לגבי שפה וכתב יד: כדי לשפר את הדיוק, אפשר לספק למודל ה-OCR רמז לגבי שפה או כתב יד על סמך המאפיינים הידועים של מערך הנתונים.

כדי ללמוד איך להפעיל הגדרות OCR, אפשר לעיין במאמר הפעלת הגדרות OCR.

תוספים ל-OCR

‫Enterprise Document OCR מציע יכולות ניתוח אופציונליות שאפשר להפעיל לפי הצורך בבקשות עיבוד ספציפיות.

היכולות הבאות של התוסף זמינות בגרסאות היציבות pretrained-ocr-v2.0-2023-06-02 ו-pretrained-ocr-v2.1-2024-08-07, ובגרסת Release Candidate pretrained-ocr-v2.1.1-2025-01-31.

  • OCR מתמטי: זיהוי וחילוץ של נוסחאות ממסמכים בפורמט LaTeX.
  • חילוץ תיבות סימון: זיהוי תיבות סימון וחילוץ הסטטוס שלהן (מסומנות או לא מסומנות) בתגובה של Enterprise Document OCR.
  • זיהוי סגנון גופן: זיהוי מאפייני גופן ברמת המילה, כולל סוג הגופן, סגנון הגופן, כתב יד, עובי וצבע.

במאמר הפעלה של תוספי OCR מוסבר איך להפעיל את התוספים שמופיעים ברשימה.

פורמטים נתמכים של קבצים

‫Enterprise Document OCR תומך בפורמטים של קבצים: PDF,‏ GIF,‏ TIFF,‏ JPEG,‏ PNG,‏ BMP ו-WebP. מידע נוסף זמין במאמר בנושא קבצים נתמכים.

‫Enterprise Document OCR תומך גם בקובצי DocX של עד 15 עמודים בסנכרון ו-30 עמודים באסינכרון. כדי לבקש הגדלה של המכסה (QIR), פועלים לפי השלבים לבקשת התאמה של מכסה. התמיכה ב-DocX נמצאת בתצוגה מקדימה פרטית. כדי לבקש גישה, צריך לפנות לצוות התמיכה בחשבונות Google.

ניהול גרסאות מתקדם

התכונה 'ניהול גרסאות מתקדם' נמצאת בתצוגה מקדימה. שדרוגים של מודלים בסיסיים של AI/ML OCR עשויים להוביל לשינויים בהתנהגות של OCR. אם נדרשת עקביות מלאה, אפשר להשתמש בגרסה קפואה של המודל כדי להצמיד את ההתנהגות למודל OCR מדור קודם למשך עד 18 חודשים. כך תוכלו לוודא שתוצאת הפונקציה OCR תתבסס על אותה תמונה. ראו את הטבלה בנושא גרסאות המעבד.

גרסאות המעבד

התכונה הזו תואמת לגרסאות המעבד הבאות. מידע נוסף מופיע במאמר בנושא ניהול גרסאות של מעבדים.

מזהה גרסה ערוץ הפצה תיאור
pretrained-ocr-v1.2-2022-11-10 יציב גרסה קפואה של מודל v1.0: קבצים, הגדרות וקובצי הפעלה של מודל, שנלקחו מתמונת מצב של גרסה והוקפאו בקובץ אימג' של קונטיינר למשך עד 18 חודשים.
pretrained-ocr-v2.0-2023-06-02 יציב מודל מוכן לייצור שמתמחה בתרחישי שימוש במסמכים. כולל גישה לכל תוספי ה-OCR.
pretrained-ocr-v2.1-2024-08-07 יציב השיפורים העיקריים בגרסה 2.1 הם: זיהוי טוב יותר של טקסט מודפס, זיהוי מדויק יותר של תיבות סימון וסדר קריאה מדויק יותר.
pretrained-ocr-v2.1.1-2025-01-31 גרסה מועמדת להפצה גרסה v2.1.1 דומה לגרסה V2.1, והיא זמינה בכל האזורים חוץ מאלה: US, EU ו-asia-southeast1.

שימוש ב-Enterprise Document OCR לעיבוד מסמכים

במדריך למתחילים הזה נסביר על Enterprise Document OCR. במאמר הזה מוסבר איך לשפר את תוצאות ה-OCR של המסמכים בתהליך העבודה שלכם, על ידי הפעלה או השבתה של אחת מהגדרות ה-OCR הזמינות.

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Document AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Document AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

יצירת מעבד Enterprise Document OCR

קודם יוצרים מעבד Enterprise Document OCR. מידע נוסף זמין במאמר בנושא יצירה וניהול של מעבדים.

הגדרות OCR

כדי להפעיל את כל הגדרות ה-OCR, צריך להגדיר את השדות המתאימים ב-ProcessOptions.ocrConfig ב-ProcessDocumentRequest או ב-BatchProcessDocumentsRequest.

מידע נוסף זמין במאמר בנושא שליחת בקשת עיבוד.

ניתוח איכות התמונה

ניתוח חכם של איכות המסמך מתבצע באמצעות למידת מכונה כדי להעריך את איכות המסמך על סמך קלות הקריאה של התוכן שלו. הערכת האיכות הזו מוחזרת כציון איכות [0, 1], כאשר 1 מייצג איכות מושלמת. אם ציון האיכות שזוהה נמוך מ-0.5, מוחזרת גם רשימה של סיבות שליליות לאיכות (ממוינות לפי הסבירות). סבירות גבוהה מ-0.5 נחשבת לזיהוי חיובי.

אם המסמך נחשב לפגום, ה-API מחזיר את שמונת סוגי הפגמים הבאים במסמך:

  • quality/defect_blurry
  • quality/defect_noisy
  • quality/defect_dark
  • quality/defect_faint
  • quality/defect_text_too_small
  • quality/defect_document_cutoff
  • quality/defect_text_cutoff
  • quality/defect_glare

יש כמה מגבלות בניתוח הנוכחי של איכות המסמך:

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

קלט

כדי להפעיל את ההרשאות, צריך להגדיר את ProcessOptions.ocrConfig.enableImageQualityScores ל-true בבקשת העיבוד. התכונה הנוספת הזו מוסיפה לשיחה זמן אחזור שדומה לזמן האחזור של עיבוד OCR.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
        "enableImageQualityScores": true
      }
    }
  }

תשובה

תוצאות זיהוי הפגמים מופיעות בDocument.pages[].imageQualityScores[].

  {
    "pages": [
      {
        "imageQualityScores": {
          "qualityScore": 0.7811847,
          "detectedDefects": [
            {
              "type": "quality/defect_document_cutoff",
              "confidence": 1.0
            },
            {
              "type": "quality/defect_glare",
              "confidence": 0.97849524
            },
            {
              "type": "quality/defect_text_cutoff",
              "confidence": 0.5
            }
          ]
        }
      }
    ]
  }

דוגמאות מלאות של פלט זמינות במאמר פלט לדוגמה של מעבד.

רמזים לגבי שפה

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

קלט

כדי להפעיל את ההגדרה, צריך להגדיר את ProcessOptions.ocrConfig.hints[].languageHints[] עם רשימה של קודי שפה בפורמט BCP-47.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
        "hints": {
          "languageHints": ["en", "es"]
        }
      }
    }
  }

דוגמאות מלאות של פלט זמינות במאמר פלט לדוגמה של מעבד.

זיהוי סמלים

מילוי נתונים ברמת הסמל (או האות הבודדת) בתגובה למסמך.

קלט

כדי להפעיל את ההרשאות, צריך להגדיר את ProcessOptions.ocrConfig.enableSymbol ל-true בבקשת העיבוד.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
        "enableSymbol": true
      }
    }
  }

תשובה

אם התכונה הזו מופעלת, השדה Document.pages[].symbols[] יאוכלס.

דוגמאות מלאות של פלט זמינות במאמר פלט לדוגמה של מעבד.

ניתוח מובנה של קובצי PDF

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

קלט

כדי להפעיל את ההרשאות, צריך להגדיר את ProcessOptions.ocrConfig.enableNativePdfParsing ל-true בבקשת העיבוד.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
        "enableNativePdfParsing": true
      }
    }
  }

זיהוי דמויות בתוך תיבה

כברירת מחדל, ב-Enterprise Document OCR מופעל גלאי שמטרתו לשפר את איכות חילוץ הטקסט של תווים שנמצאים בתוך תיבה. לדוגמה:

enterprise-document-ocr-1

אם נתקלתם בבעיות באיכות ה-OCR של תווים בתוך תיבות, אתם יכולים להשבית את התכונה.

קלט

כדי להשבית את ההגדרה, מגדירים את ProcessOptions.ocrConfig.disableCharacterBoxesDetection לערך true בבקשת העיבוד.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
        "disableCharacterBoxesDetection": true
      }
    }
  }

פריסה מדור קודם

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

קלט

כדי להפעיל את ההרשאות, צריך להגדיר את ProcessOptions.ocrConfig.advancedOcrOptions ל-["legacy_layout"] בבקשת העיבוד.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
          "advancedOcrOptions": ["legacy_layout"]
      }
    }
  }

ציון טווח דפים

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

יש שלוש דרכים להגדיר את זה ב-ProcessOptions:

  • כדי לעבד רק את הדף השני והחמישי:
  {
    "individualPageSelector": {"pages": [2, 5]}
  }
  • כדי לעבד רק את שלושת הדפים הראשונים:
  {
    "fromStart": 3
  }
  • כדי לעבד רק את ארבעת הדפים האחרונים:
  {
    "fromEnd": 4
  }

בתגובה, כל Document.pages[].pageNumber תואם לאותם דפים שצוינו בבקשה.

שימושים בתוספים ל-OCR

אפשר להפעיל את יכולות הניתוח האופציונליות האלה של Enterprise Document OCR לפי הצורך, בבקשות עיבוד ספציפיות.

‫OCR למתמטיקה

זיהוי תווים אופטי (OCR) של מתמטיקה מזהה, מפענח ומחלץ נוסחאות, כמו משוואות מתמטיות שמיוצגות כ-LaTeX, יחד עם קואורדינטות של תיבות תוחמות.

דוגמה לייצוג ב-LaTeX:

  • זוהתה תמונה

    enterprise-document-ocr-2

  • המרת LaTeX

    enterprise-document-ocr-3

קלט

כדי להפעיל את ההרשאות, צריך להגדיר את ProcessOptions.ocrConfig.premiumFeatures.enableMathOcr ל-true בבקשת העיבוד.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
          "premiumFeatures": {
            "enableMathOcr": true
          }
      }
    }
  }

תשובה

הפלט של זיהוי התווים האופטי (OCR) של המתמטיקה מופיע ב-Document.pages[].visualElements[] עם "type": "math_formula".

"visualElements": [
  {
    "layout": {
      "textAnchor": {
        "textSegments": [
          {
            "endIndex": "46"
          }
        ]
      },
      "confidence": 1,
      "boundingPoly": {
        "normalizedVertices": [
          {
            "x": 0.14662756,
            "y": 0.27891156
          },
          {
            "x": 0.9032258,
            "y": 0.27891156
          },
          {
            "x": 0.9032258,
            "y": 0.8027211
          },
          {
            "x": 0.14662756,
            "y": 0.8027211
          }
        ]
      },
      "orientation": "PAGE_UP"
    },
    "type": "math_formula"
  }
]

Document פלט ה-JSON המלא זמין בקישור הזה .

חילוץ סימני בחירה

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

קלט

כדי להפעיל את ההרשאות, צריך להגדיר את ProcessOptions.ocrConfig.premiumFeatures.enableSelectionMarkDetection ל-true בבקשת העיבוד.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
          "premiumFeatures": {
            "enableSelectionMarkDetection": true
          }
      }
    }
  }

תשובה

הפלט של תיבת הסימון מופיע ב-Document.pages[].visualElements[] עם "type": "unfilled_checkbox" או "type": "filled_checkbox".

"visualElements": [
  {
    "layout": {
      "confidence": 0.89363575,
      "boundingPoly": {
        "vertices": [
          {
            "x": 11,
            "y": 24
          },
          {
            "x": 37,
            "y": 24
          },
          {
            "x": 37,
            "y": 56
          },
          {
            "x": 11,
            "y": 56
          }
        ],
        "normalizedVertices": [
          {
            "x": 0.017488075,
            "y": 0.38709676
          },
          {
            "x": 0.05882353,
            "y": 0.38709676
          },
          {
            "x": 0.05882353,
            "y": 0.9032258
          },
          {
            "x": 0.017488075,
            "y": 0.9032258
          }
        ]
      }
    },
    "type": "unfilled_checkbox"
  },
  {
    "layout": {
      "confidence": 0.9148201,
      "boundingPoly": ...
    },
    "type": "filled_checkbox"
  }
],

Document פלט ה-JSON המלא זמין בקישור הזה .

זיהוי סגנון גופן

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

ברמת הטוקן (המילה), המאפיינים הבאים מזוהים:

  • זיהוי כתב יד
  • סגנון הגופן
  • גודל גופן
  • סוג הגופן
  • צבע גופן
  • משקל הגופן
  • הריווח בין האותיות
  • הטקסט המודגש
  • נטוי
  • קו תחתון
  • צבע הטקסט (RGBa)
  • צבע הרקע (RGBa)

קלט

כדי להפעיל את ההרשאות, צריך להגדיר את ProcessOptions.ocrConfig.premiumFeatures.computeStyleInfo ל-true בבקשת העיבוד.

  {
    "rawDocument": {
      "mimeType": "MIME_TYPE",
      "content": "IMAGE_CONTENT"
    },
    "processOptions": {
      "ocrConfig": {
          "premiumFeatures": {
            "computeStyleInfo": true
          }
      }
    }
  }

תשובה

הפלט של font-style מופיע ב-Document.pages[].tokens[].styleInfo עם הסוג StyleInfo.

"tokens": [
  {
    "styleInfo": {
      "fontSize": 3,
      "pixelFontSize": 13,
      "fontType": "SANS_SERIF",
      "bold": true,
      "fontWeight": 564,
      "textColor": {
        "red": 0.16862746,
        "green": 0.16862746,
        "blue": 0.16862746
      },
      "backgroundColor": {
        "red": 0.98039216,
        "green": 0.9882353,
        "blue": 0.99215686
      }
    }
  },
  ...
]

Document פלט ה-JSON המלא זמין בקישור הזה .

המרת אובייקטים של מסמכים לפורמט Vision AI API

Document AI Toolbox כולל כלי שממיר את הפורמט של Document AI API‏ Document לפורמט של Vision AI‏ AnnotateFileResponse, וכך מאפשר למשתמשים להשוות בין התשובות של מעבד ה-OCR של המסמך לבין Vision AI API. הנה קוד לדוגמה.

סתירות ידועות בין התגובה של Vision AI API לבין התגובה של Document AI API והכלי להמרה:

  • התשובה של Vision AI API מאכלסת רק את vertices לבקשות תמונה, ומאכלסת רק את normalized_vertices לבקשות PDF. התשובה של Document AI והממיר מאכלסים את vertices וגם את normalized_vertices.
  • התגובה של Vision AI API מאכלסת את detected_break בסמל האחרון של המילה. התגובה של Document AI API והממיר מאכלסים את detected_break במילה ובסמל האחרון של המילה.
  • התשובה של Vision AI API תמיד מאכלסת את שדות הסמלים. כברירת מחדל, התגובה של Document AI לא מאכלסת שדות של סמלים. כדי לוודא שהתשובה של Document AI והממיר ימלאו את השדות של הסמלים, צריך להגדיר את התכונה enable_symbol כ'מפורטת'.

דוגמאות קוד

בדוגמאות הקוד הבאות אפשר לראות איך לשלוח בקשת עיבוד שמאפשרת הגדרות של OCR ותוספים, ואז לקרוא את השדות ולהדפיס אותם במסוף:

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • LOCATION: המיקום של המעבד, לדוגמה:
    • us – ארצות הברית
    • eu - האיחוד האירופי
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • PROCESSOR_ID: המזהה של המעבד בהתאמה אישית.
  • PROCESSOR_VERSION: מזהה גרסת המעבד. מידע נוסף זמין במאמר בנושא בחירת גרסת מעבד. לדוגמה:
    • pretrained-TYPE-vX.X-YYYY-MM-DD
    • stable
    • rc
  • skipHumanReview: ערך בוליאני להשבתת הבדיקה האנושית (נתמך רק על ידי מעבדי 'האדם שבתהליך').
    • true – דילוג על בדיקה אנושית
    • false – הפעלת בדיקה אנושית (ברירת מחדל)
  • MIME_TYPE: אחת מהאפשרויות התקפות של סוג MIME.
  • IMAGE_CONTENT: אחד מהערכים התקינים של תוכן מסמך מוטבע, שמיוצג כזרם של בייטים. בייצוגי JSON, קידוד base64 (מחרוזת ASCII) של נתוני התמונה הבינאריים. המחרוזת הזו צריכה להיראות כמו המחרוזת הבאה:
    • /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
    מידע נוסף זמין בנושא קידוד Base64.
  • FIELD_MASK: מציין אילו שדות לכלול בפלט Document. זוהי רשימה מופרדת בפסיקים של שמות מלאים של שדות בפורמט FieldMask.
    • לדוגמה: text,entities,pages.pageNumber
  • הגדרות OCR
    • ENABLE_NATIVE_PDF_PARSING: (בוליאני) חילוץ טקסט מוטמע מקובצי PDF, אם יש כזה.
    • ENABLE_IMAGE_QUALITY_SCORES: (בוליאני) מפעיל ציוני איכות חכמים של מסמכים.
    • ENABLE_SYMBOL: (בוליאני) כולל מידע על זיהוי תווים אופטי (OCR) של סמל (אות).
    • DISABLE_CHARACTER_BOXES_DETECTION: (בוליאני) השבתת זיהוי תיבות תווים במנוע ה-OCR.
    • LANGUAGE_HINTS: רשימה של קודי שפה בפורמט BCP-47 לשימוש ב-OCR.
    • ADVANCED_OCR_OPTIONS: רשימה של אפשרויות מתקדמות ל-OCR כדי לכוונן עוד יותר את התנהגות ה-OCR. הערכים התקפים הנוכחיים הם:
      • legacy_layout: אלגוריתם היוריסטי לזיהוי פריסות, שמשמש כחלופה לאלגוריתם הנוכחי לזיהוי פריסות שמבוסס על למידת מכונה.
  • תוספי פרימיום ל-OCR
    • ENABLE_SELECTION_MARK_DETECTION: (בוליאני) הפעלת זיהוי סימני בחירה במנוע ה-OCR.
    • COMPUTE_STYLE_INFO (בוליאני) הפעלת מודל לזיהוי גופנים והחזרת מידע על סגנון הגופן.
    • ENABLE_MATH_OCR: (בוליאני) הפעלת המודל שיכול לחלץ נוסחאות מתמטיות ב-LaTeX.
  • INDIVIDUAL_PAGES: רשימה של דפים בודדים לעיבוד.
    • אפשר גם לציין את השדה fromStart או fromEnd כדי לעבד כמות מסוימת של דפים מההתחלה או מהסוף של המסמך.

‫† אפשר גם לציין את התוכן הזה באמצעות תוכן בקידוד base64 באובייקט inlineDocument.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION-documentai.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/processorVersions/PROCESSOR_VERSION:process

גוף בקשת JSON:

{
  "skipHumanReview": skipHumanReview,
  "rawDocument": {
    "mimeType": "MIME_TYPE",
    "content": "IMAGE_CONTENT"
  },
  "fieldMask": "FIELD_MASK",
  "processOptions": {
    "ocrConfig": {
      "enableNativePdfParsing": ENABLE_NATIVE_PDF_PARSING,
      "enableImageQualityScores": ENABLE_IMAGE_QUALITY_SCORES,
      "enableSymbol": ENABLE_SYMBOL,
      "disableCharacterBoxesDetection": DISABLE_CHARACTER_BOXES_DETECTION,
      "hints": {
        "languageHints": [
          "LANGUAGE_HINTS"
        ]
      },
      "advancedOcrOptions": ["ADVANCED_OCR_OPTIONS"],
      "premiumFeatures": {
        "enableSelectionMarkDetection": ENABLE_SELECTION_MARK_DETECTION,
        "computeStyleInfo": COMPUTE_STYLE_INFO,
        "enableMathOcr": ENABLE_MATH_OCR,
      }
    },
    "individualPageSelector" {
      "pages": [INDIVIDUAL_PAGES]
    }
  }
}

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

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-documentai.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/processorVersions/PROCESSOR_VERSION:process"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-documentai.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/processorVersions/PROCESSOR_VERSION:process" | Select-Object -Expand Content

אם הבקשה תתבצע בהצלחה, השרת יחזיר קוד סטטוס 200 OK של HTTP ואת התשובה בפורמט JSON. גוף התשובה מכיל מופע של Document.

Python

למידע נוסף, קראו את מאמרי העזרה של Document AI Python API.

כדי לבצע אימות ב-Document AI, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


from typing import Optional, Sequence

from google.api_core.client_options import ClientOptions
from google.cloud import documentai

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_PROCESSOR_LOCATION" # Format is "us" or "eu"
# processor_id = "YOUR_PROCESSOR_ID" # Create processor before running sample
# processor_version = "rc" # Refer to https://cloud.google.com/document-ai/docs/manage-processor-versions for more information
# file_path = "/path/to/local/pdf"
# mime_type = "application/pdf" # Refer to https://cloud.google.com/document-ai/docs/file-types for supported file types


def process_document_ocr_sample(
    project_id: str,
    location: str,
    processor_id: str,
    processor_version: str,
    file_path: str,
    mime_type: str,
) -> None:
    # Optional: Additional configurations for Document OCR Processor.
    # For more information: https://cloud.google.com/document-ai/docs/enterprise-document-ocr
    process_options = documentai.ProcessOptions(
        ocr_config=documentai.OcrConfig(
            enable_native_pdf_parsing=True,
            enable_image_quality_scores=True,
            enable_symbol=True,
            # OCR Add Ons https://cloud.google.com/document-ai/docs/ocr-add-ons
            premium_features=documentai.OcrConfig.PremiumFeatures(
                compute_style_info=True,
                enable_math_ocr=False,  # Enable to use Math OCR Model
                enable_selection_mark_detection=True,
            ),
        )
    )
    # Online processing request to Document AI
    document = process_document(
        project_id,
        location,
        processor_id,
        processor_version,
        file_path,
        mime_type,
        process_options=process_options,
    )

    text = document.text
    print(f"Full document text: {text}\n")
    print(f"There are {len(document.pages)} page(s) in this document.\n")

    for page in document.pages:
        print(f"Page {page.page_number}:")
        print_page_dimensions(page.dimension)
        print_detected_languages(page.detected_languages)

        print_blocks(page.blocks, text)
        print_paragraphs(page.paragraphs, text)
        print_lines(page.lines, text)
        print_tokens(page.tokens, text)

        if page.symbols:
            print_symbols(page.symbols, text)

        if page.image_quality_scores:
            print_image_quality_scores(page.image_quality_scores)

        if page.visual_elements:
            print_visual_elements(page.visual_elements, text)


def print_page_dimensions(dimension: documentai.Document.Page.Dimension) -> None:
    print(f"    Width: {str(dimension.width)}")
    print(f"    Height: {str(dimension.height)}")


def print_detected_languages(
    detected_languages: Sequence[documentai.Document.Page.DetectedLanguage],
) -> None:
    print("    Detected languages:")
    for lang in detected_languages:
        print(f"        {lang.language_code} ({lang.confidence:.1%} confidence)")


def print_blocks(blocks: Sequence[documentai.Document.Page.Block], text: str) -> None:
    print(f"    {len(blocks)} blocks detected:")
    first_block_text = layout_to_text(blocks[0].layout, text)
    print(f"        First text block: {repr(first_block_text)}")
    last_block_text = layout_to_text(blocks[-1].layout, text)
    print(f"        Last text block: {repr(last_block_text)}")


def print_paragraphs(
    paragraphs: Sequence[documentai.Document.Page.Paragraph], text: str
) -> None:
    print(f"    {len(paragraphs)} paragraphs detected:")
    first_paragraph_text = layout_to_text(paragraphs[0].layout, text)
    print(f"        First paragraph text: {repr(first_paragraph_text)}")
    last_paragraph_text = layout_to_text(paragraphs[-1].layout, text)
    print(f"        Last paragraph text: {repr(last_paragraph_text)}")


def print_lines(lines: Sequence[documentai.Document.Page.Line], text: str) -> None:
    print(f"    {len(lines)} lines detected:")
    first_line_text = layout_to_text(lines[0].layout, text)
    print(f"        First line text: {repr(first_line_text)}")
    last_line_text = layout_to_text(lines[-1].layout, text)
    print(f"        Last line text: {repr(last_line_text)}")


def print_tokens(tokens: Sequence[documentai.Document.Page.Token], text: str) -> None:
    print(f"    {len(tokens)} tokens detected:")
    first_token_text = layout_to_text(tokens[0].layout, text)
    first_token_break_type = tokens[0].detected_break.type_.name
    print(f"        First token text: {repr(first_token_text)}")
    print(f"        First token break type: {repr(first_token_break_type)}")
    if tokens[0].style_info:
        print_style_info(tokens[0].style_info)

    last_token_text = layout_to_text(tokens[-1].layout, text)
    last_token_break_type = tokens[-1].detected_break.type_.name
    print(f"        Last token text: {repr(last_token_text)}")
    print(f"        Last token break type: {repr(last_token_break_type)}")
    if tokens[-1].style_info:
        print_style_info(tokens[-1].style_info)


def print_symbols(
    symbols: Sequence[documentai.Document.Page.Symbol], text: str
) -> None:
    print(f"    {len(symbols)} symbols detected:")
    first_symbol_text = layout_to_text(symbols[0].layout, text)
    print(f"        First symbol text: {repr(first_symbol_text)}")
    last_symbol_text = layout_to_text(symbols[-1].layout, text)
    print(f"        Last symbol text: {repr(last_symbol_text)}")


def print_image_quality_scores(
    image_quality_scores: documentai.Document.Page.ImageQualityScores,
) -> None:
    print(f"    Quality score: {image_quality_scores.quality_score:.1%}")
    print("    Detected defects:")

    for detected_defect in image_quality_scores.detected_defects:
        print(f"        {detected_defect.type_}: {detected_defect.confidence:.1%}")


def print_style_info(style_info: documentai.Document.Page.Token.StyleInfo) -> None:
    """
    Only supported in version `pretrained-ocr-v2.0-2023-06-02`
    """
    print(f"           Font Size: {style_info.font_size}pt")
    print(f"           Font Type: {style_info.font_type}")
    print(f"           Bold: {style_info.bold}")
    print(f"           Italic: {style_info.italic}")
    print(f"           Underlined: {style_info.underlined}")
    print(f"           Handwritten: {style_info.handwritten}")
    print(
        f"           Text Color (RGBa): {style_info.text_color.red}, {style_info.text_color.green}, {style_info.text_color.blue}, {style_info.text_color.alpha}"
    )


def print_visual_elements(
    visual_elements: Sequence[documentai.Document.Page.VisualElement], text: str
) -> None:
    """
    Only supported in version `pretrained-ocr-v2.0-2023-06-02`
    """
    checkboxes = [x for x in visual_elements if "checkbox" in x.type]
    math_symbols = [x for x in visual_elements if x.type == "math_formula"]

    if checkboxes:
        print(f"    {len(checkboxes)} checkboxes detected:")
        print(f"        First checkbox: {repr(checkboxes[0].type)}")
        print(f"        Last checkbox: {repr(checkboxes[-1].type)}")

    if math_symbols:
        print(f"    {len(math_symbols)} math symbols detected:")
        first_math_symbol_text = layout_to_text(math_symbols[0].layout, text)
        print(f"        First math symbol: {repr(first_math_symbol_text)}")




def process_document(
    project_id: str,
    location: str,
    processor_id: str,
    processor_version: str,
    file_path: str,
    mime_type: str,
    process_options: Optional[documentai.ProcessOptions] = None,
) -> documentai.Document:
    # You must set the `api_endpoint` if you use a location other than "us".
    client = documentai.DocumentProcessorServiceClient(
        client_options=ClientOptions(
            api_endpoint=f"{location}-documentai.googleapis.com"
        )
    )

    # The full resource name of the processor version, e.g.:
    # `projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}`
    # You must create a processor before running this sample.
    name = client.processor_version_path(
        project_id, location, processor_id, processor_version
    )

    # Read the file into memory
    with open(file_path, "rb") as image:
        image_content = image.read()

    # Configure the process request
    request = documentai.ProcessRequest(
        name=name,
        raw_document=documentai.RawDocument(content=image_content, mime_type=mime_type),
        # Only supported for Document OCR processor
        process_options=process_options,
    )

    result = client.process_document(request=request)

    # For a full list of `Document` object attributes, reference this page:
    # https://cloud.google.com/document-ai/docs/reference/rest/v1/Document
    return result.document




def layout_to_text(layout: documentai.Document.Page.Layout, text: str) -> str:
    """
    Document AI identifies text in different parts of the document by their
    offsets in the entirety of the document"s text. This function converts
    offsets to a string.
    """
    # If a text segment spans several lines, it will
    # be stored in different text segments.
    return "".join(
        text[int(segment.start_index) : int(segment.end_index)]
        for segment in layout.text_anchor.text_segments
    )

המאמרים הבאים