זיהוי טקסט בקבצים (PDF/TIFF)

‫Vision API יכול לזהות ולתמלל טקסט מקובצי PDF ו-TIFF שמאוחסנים ב-Cloud Storage.

כדי לזהות טקסט במסמכי PDF ו-TIFF, צריך לשלוח בקשה באמצעות הפונקציה files:asyncBatchAnnotate. הפונקציה הזו מבצעת בקשה אופליין (אסינכרונית) ומספקת את הסטטוס שלה באמצעות משאבי operations.

הפלט מבקשת PDF/TIFF נכתב לקובץ JSON שנוצר בקטגוריה של Cloud Storage שצוינה.

מגבלות

‫Vision API מקבל קובצי PDF או TIFF של עד 2,000 דפים. קבצים גדולים יותר יחזירו שגיאה.

אימות

אין תמיכה במפתחות API לבקשות files:asyncBatchAnnotate. הוראות לאימות באמצעות חשבון שירות מופיעות במאמר שימוש בחשבון שירות.

לחשבון שמשמש לאימות צריכה להיות גישה לקטגוריה של Cloud Storage שציינתם עבור הפלט (roles/editor או roles/storage.objectCreator ומעלה).

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

בקשות לזיהוי טקסט במסמך

כרגע, זיהוי מסמכי PDF/TIFF זמין רק לקבצים שמאוחסנים בדליים של Cloud Storage. קובצי JSON של תגובות נשמרים באופן דומה בקטגוריה של Cloud Storage.

דף PDF של מפקד האוכלוסין בארה"ב משנת 2010
gs://cloud-samples-data/vision/pdf_tiff/census2010.pdf, מקור: United States Census Bureau.

REST

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

  • CLOUD_STORAGE_BUCKET: קטגוריה או ספרייה ב-Cloud Storage לשמירת קובצי הפלט, בפורמט הבא:
    • gs://bucket/directory/
    למשתמש ששולח את הבקשה צריכה להיות הרשאת כתיבה לקטגוריה.
  • CLOUD_STORAGE_FILE_URI: הנתיב לקובץ תקין (PDF/TIFF) בקטגוריה של Cloud Storage. צריכות להיות לכם לפחות הרשאות קריאה לקובץ. דוגמה:
    • gs://cloud-samples-data/vision/pdf_tiff/census2010.pdf
  • FEATURE_TYPE: סוג תכונה תקין. בבקשות מסוג files:asyncBatchAnnotate אפשר להשתמש בסוגי התכונות הבאים:
    • DOCUMENT_TEXT_DETECTION
    • TEXT_DETECTION
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

שיקולים ספציפיים לשדה:

  • inputConfig – מחליף את השדה image שמשמש בבקשות אחרות של Vision API. הוא מכיל שני שדות צאצא:
    • gcsSource.uri – ה-URI של קובץ ה-PDF או ה-TIFF ב-Google Cloud Storage (נגיש למשתמש או לחשבון השירות ששולח את הבקשה).
    • mimeType – אחד מסוגי הקבצים המקובלים: application/pdf או image/tiff.
  • outputConfig – מציין את פרטי הפלט. הוא מכיל שני שדות צאצא:
    • gcsDestination.uri – URI תקין של Google Cloud Storage. המשתמש או חשבון השירות ששולחים את הבקשה צריכים להיות בעלי הרשאת כתיבה לקטגוריה. שם הקובץ יהיה output-x-to-y, כאשר x ו-y מייצגים את מספרי הדפים ב-PDF או ב-TIFF שכלולים בקובץ הפלט הזה. אם הקובץ קיים, התוכן שלו יוחלף.
    • batchSize – מציין כמה דפים של פלט צריך לכלול בכל קובץ JSON של פלט.

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

POST https://vision.googleapis.com/v1/files:asyncBatchAnnotate

גוף בקשת JSON:

{
  "requests":[
    {
      "inputConfig": {
        "gcsSource": {
          "uri": "CLOUD_STORAGE_FILE_URI"
        },
        "mimeType": "application/pdf"
      },
      "features": [
        {
          "type": "FEATURE_TYPE"
        }
      ],
      "outputConfig": {
        "gcsDestination": {
          "uri": "CLOUD_STORAGE_BUCKET"
        },
        "batchSize": 1
      }
    }
  ]
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://vision.googleapis.com/v1/files:asyncBatchAnnotate"

PowerShell

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

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/files:asyncBatchAnnotate" | Select-Object -Expand Content
תשובה:

בקשת asyncBatchAnnotate מוצלחת מחזירה תגובה עם שדה שם יחיד:

{
  "name": "projects/usable-auth-library/operations/1efec2285bd442df"
}

השם הזה מייצג פעולה ממושכת עם מזהה משויך (לדוגמה, 1efec2285bd442df), שאפשר לשלוח לגביו שאילתה באמצעות v1.operations API.

כדי לאחזר את תגובת ההערה של Vision, שולחים בקשת GET לנקודת הקצה v1.operations ומעבירים את מזהה הפעולה בכתובת ה-URL:

GET https://vision.googleapis.com/v1/operations/operation-id

לדוגמה:

curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/projects/project-id/locations/location-id/operations/1efec2285bd442df

אם הפעולה מתבצעת:

{
  "name": "operations/1efec2285bd442df",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.OperationMetadata",
    "state": "RUNNING",
    "createTime": "2019-05-15T21:10:08.401917049Z",
    "updateTime": "2019-05-15T21:10:33.700763554Z"
  }
}

אחרי שהפעולה מסתיימת, הסמל state משתנה ל-DONE והתוצאות נכתבות בקובץ Google Cloud Storage שציינתם:

{
  "name": "operations/1efec2285bd442df",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.OperationMetadata",
    "state": "DONE",
    "createTime": "2019-05-15T20:56:30.622473785Z",
    "updateTime": "2019-05-15T20:56:41.666379749Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.AsyncBatchAnnotateFilesResponse",
    "responses": [
      {
        "outputConfig": {
          "gcsDestination": {
            "uri": "gs://your-bucket-name/folder/"
          },
          "batchSize": 1
        }
      }
    ]
  }
}

ה-JSON בקובץ הפלט דומה ל-JSON של [בקשה לזיהוי טקסט במסמך](/vision/docs/ocr) של תמונה, עם התוספת של שדה context שמציג את המיקום של קובץ ה-PDF או ה-TIFF שצוין ואת מספר הדפים בקובץ:

output-1-to-1.json

Go

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

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


// detectAsyncDocumentURI performs Optical Character Recognition (OCR) on a
// PDF file stored in GCS.
func detectAsyncDocumentURI(w io.Writer, gcsSourceURI, gcsDestinationURI string) error {
	ctx := context.Background()

	client, err := vision.NewImageAnnotatorClient(ctx)
	if err != nil {
		return err
	}

	request := &visionpb.AsyncBatchAnnotateFilesRequest{
		Requests: []*visionpb.AsyncAnnotateFileRequest{
			{
				Features: []*visionpb.Feature{
					{
						Type: visionpb.Feature_DOCUMENT_TEXT_DETECTION,
					},
				},
				InputConfig: &visionpb.InputConfig{
					GcsSource