שירות זיהוי התווים האופטי (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 |
סוג קובץ המקור. צריך להגדיר אותו לאחד מהערכים הבאים:
|
type |
סוג זיהוי הטקסט שאתם צריכים מהקובץ. מציינים את אחת משתי תכונות ההערות:
|
language_hints |
זה שינוי אופציונלי. רשימת השפות שבהן משתמשים לזיהוי הטקסט. אם השדה הזה ריק, המערכת מפרשת את זה כזיהוי שפה אוטומטי. אין צורך להגדיר את השדה language_hints לשפות שמבוססות על האלפבית הלטיני.אם אתם יודעים מהי שפת הטקסט בקובץ, הגדרת רמז משפרת את התוצאות. |
pages |
זה שינוי אופציונלי. מספר הדפים בקובץ שצריך לעבד כדי לזהות טקסט. אפשר לציין עד חמישה דפים. אם לא מציינים את מספר הדפים, השירות מעבד את חמשת הדפים הראשונים בקובץ. |
למידע על הייצוג המלא של JSON, ראו AnnotateFileRequest.
שליחת בקשת API מוטבעת
שולחים בקשה ל-API שעבר אימון מראש ל-OCR באמצעות ה-method של ה-API בארכיטקטורת REST. אחרת, אתם יכולים להשתמש ב-API שעבר אימון מראש ל-OCR מסקריפט Python כדי לזהות טקסט מקובצי PDF או TIFF.
הדוגמאות הבאות מראות איך לזהות טקסט בקובץ באמצעות OCR:
REST
כדי לזהות טקסט בקבצים באמצעות השיטה של API בארכיטקטורת REST:
שומרים את הקובץ
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. השדה הזה הוא אופציונלי, ואם הוא ריק המערכת מזהה את השפה באופן אוטומטי.
-
שולחים את הבקשה:
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מחליפים את מה שכתוב בשדות הבאים:
-
TOKEN: אסימון האימות שקיבלתם. PROJECT_ID: מזהה הפרויקט.-
ENDPOINT: נקודת הקצה של ה-OCR שמשמשת את הארגון. למידע נוסף על סטטוס השירות ונקודות הקצה
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מחליפים את מה שכתוב בשדות הבאים:
-
TOKEN: אסימון האימות שקיבלתם. -
ENDPOINT: נקודת הקצה של ה-OCR שמשמשת את הארגון. למידע נוסף על סטטוס השירות ונקודות הקצה
-
Python
כדי להשתמש בשירות ה-OCR מסקריפט של Python כדי לזהות טקסט בקובץ:
מוסיפים את הקוד הבא לסקריפט 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: מזהה הפרויקט.
-
שומרים את הסקריפט של Python.
מריצים את הסקריפט של 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 |
סוג קובץ המקור. צריך להגדיר אותו לאחד מהערכים הבאים:
|
type |
סוג זיהוי הטקסט שאתם צריכים מהקובץ. מציינים את אחת משתי תכונות ההערות:
|
gcs_destination.uri |
נתיב ה-URI לקטגוריית האחסון בפרויקט בענן של Distributed Cloud שבה רוצים לשמור את קובצי הפלט. זה המיקום שבו רוצים לאחסן את תוצאות הזיהוי. למשתמש או לחשבון השירות ששולחים את הבקשה צריכה להיות הרשאת כתיבה בקטגוריה. |
אחסון קובץ המקור בקטגוריית אחסון
לפני ששולחים בקשה, צריך לוודא שלחשבון השירות של ה-OCR יש הרשאות קריאה בקטגוריית הקלט והרשאות כתיבה בקטגוריית הפלט.
קטגוריות הקלט והפלט יכולות להיות שונות, ולהיות במרחבי שמות שונים של פרויקטים. כדי למנוע שגיאות, כמו אחסון התוצאות בקטגוריות שגויות, מומלץ להשתמש באותן קטגוריות לקלט ולפלט.
כדי לאחסן בקטגוריית אחסון את הקובץ שממנו רוצים לזהות טקסט:
- הגדרת ה-gdcloud CLI למאגר אובייקטים.
יוצרים קטגוריית אחסון במרחב השמות של הפרויקט.משתמשים בסוג האחסון
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נותנים לחשבון השירות (
g-vai-ocr-sie-sa) שמשמש את שירות ה-OCR את ההרשאותreadו-writeבקטגוריה.כדי ליצור את התפקיד ואת קישור התפקיד באמצעות משאבים בהתאמה אישית, מבצעים את השלבים הבאים:
יוצרים את התפקיד על ידי פריסת משאב
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יוצרים את קישור התפקיד על ידי פריסת משאב
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
מעלים את הקובץ לקטגוריית האחסון שיצרתם. מידע נוסף זמין במאמר העלאה והורדה של אובייקטים באחסון בפרויקטים.
שליחת בקשת API אופליין
שולחים בקשה ל-API שעבר אימון מראש ל-OCR באמצעות ה-method של ה-API בארכיטקטורת REST. אחרת, צריך ליצור אינטראקציה עם ה-API שעבר אימון מראש ל-OCR באמצעות סקריפט Python כדי לזהות טקסט מקובצי PDF או TIFF.
הדוגמאות הבאות מראות איך לזהות טקסט בקובץ באמצעות OCR:
REST
כדי לזהות טקסט בקבצים באמצעות השיטה של API בארכיטקטורת REST:
שומרים את הקובץ
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, שבה יישמרו קובצי הפלט.
שולחים את הבקשה:
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מחליפים את מה שכתוב בשדות הבאים:
-
TOKEN: אסימון האימות שקיבלתם. PROJECT_ID: מזהה הפרויקט.-
ENDPOINT: נקודת הקצה של ה-OCR שמשמשת את הארגון. למידע נוסף על סטטוס השירות ונקודות הקצה
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מחליפים את מה שכתוב בשדות הבאים:
-
TOKEN: אסימון האימות שקיבלתם. -
ENDPOINT: נקודת הקצה של ה-OCR שמשמשת את הארגון. למידע נוסף על סטטוס השירות ונקודות הקצה
-
Python
כדי להשתמש בשירות ה-OCR מסקריפט של Python כדי לזהות טקסט בקובץ:
מוסיפים את הקוד הבא לסקריפט 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: מזהה הפרויקט.
-
שומרים את הסקריפט של Python.
מריצים את הסקריפט של 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"