Google Cloudמידע נוסף על זיהוי תווים אופטי (OCR) במדריך הזה מוסבר איך להעלות קובצי תמונות ל-Cloud Storage, לחלץ טקסט מהתמונות באמצעות Cloud Vision API, לתרגם את הטקסט באמצעות Google Cloud Translation API ולשמור את התרגומים בחזרה ב-Cloud Storage. Pub/Sub משמש להוספת משימות שונות לתור ולהפעלת פונקציות Cloud Run המתאימות לביצוע שלהן.
מידע נוסף על שליחת בקשה לזיהוי טקסט (OCR) זמין במאמרים זיהוי טקסט בתמונות, זיהוי כתב יד בתמונות או זיהוי טקסט בקבצים (PDF/TIFF).
מטרות
- כתיבה ופריסה של כמה פונקציות Cloud Run ברקע.
- העלאת תמונות ל-Cloud Storage.
- חילוץ, תרגום ושמירה של טקסט שמופיע בתמונות שהועלו.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- Cloud Run functions
- Pub/Sub
- Cloud Storage
- Cloud Translation API
- Cloud Vision
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Functions, Cloud Build, Cloud Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Functions, Cloud Build, Cloud Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
מכינים את סביבת הפיתוח.
Node.js
Python
המשך
Java
אם כבר התקנתם את ה-CLI של gcloud, מריצים את הפקודה הבאה כדי לעדכן אותו:
gcloud components update
המחשת זרימת הנתונים
תהליך העברת הנתונים באפליקציית ההדרכה ל-OCR כולל כמה שלבים:
- תמונה שמכילה טקסט בכל שפה מועלית ל-Cloud Storage.
- מופעלת פונקציה של Cloud Run שמשתמשת ב-Vision API כדי לחלץ את הטקסט ולזהות את שפת המקור.
- הטקסט מתווסף לתור לתרגום על ידי פרסום הודעה בנושא Pub/Sub. תרגום נכנס לתור לכל שפת יעד ששונה משפת המקור.
- אם שפת היעד זהה לשפת המקור, התור של התרגום מדלג על הטקסט והוא נשלח לתור התוצאות, שהוא נושא Pub/Sub אחר.
- פונקציית Cloud Run משתמשת ב-Translation API כדי לתרגם את הטקסט בתור התרגום. התוצאה המתורגמת נשלחת לתור התוצאות.
- פונקציית Cloud Run נוספת שומרת את הטקסט המתורגם מתור התוצאות ב-Cloud Storage.
- התוצאות מאוחסנות ב-Cloud Storage כקובצי טקסט לכל תרגום.
כדאי להסתכל על השלבים הבאים:
הכנת הבקשה
יוצרים קטגוריה ב-Cloud Storage להעלאת תמונות, כאשר
YOUR_IMAGE_BUCKET_NAMEהוא שם קטגוריה ייחודי גלובלית:gcloud storage buckets create gs://
YOUR_IMAGE_BUCKET_NAMEיוצרים קטגוריה של Cloud Storage כדי לשמור בה תרגומים של טקסט, כאשר
YOUR_RESULT_BUCKET_NAMEהוא שם ייחודי גלובלי של קטגוריה:gcloud storage buckets create gs://
YOUR_RESULT_BUCKET_NAMEיוצרים נושא Pub/Sub לפרסום בקשות תרגום, כאשר
YOUR_TRANSLATE_TOPIC_NAMEהוא שם הנושא של בקשת התרגום:gcloud pubsub topics create
YOUR_TRANSLATE_TOPIC_NAMEיוצרים נושא Pub/Sub לפרסום תוצאות התרגום המוגמרות, כאשר
YOUR_RESULT_TOPIC_NAMEהוא שם הנושא של תוצאות התרגום:gcloud pubsub topics create
YOUR_RESULT_TOPIC_NAMEמשכפלים את מאגר האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
המשך
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
אפשרות נוספת היא להוריד את הדוגמה כקובץ ZIP ולחלץ אותה.
עוברים לספרייה שמכילה את הקוד לדוגמה של פונקציות Cloud Run:
Node.js
cd nodejs-docs-samples/functions/ocr/app/
Python
cd python-docs-samples/functions/ocr/app/
Go
cd golang-samples/functions/ocr/app/
Java
cd java-docs-samples/functions/ocr/ocr-process-image/
הסבר על הקוד
ייבוא יחסי תלות
האפליקציה צריכה לייבא כמה תלויות כדי לתקשר עם שירותי Google Cloud Platform:
Node.js
Python
המשך
Java
עיבוד תמונות
הפונקציה הבאה קוראת קובץ תמונה שהועלה מ-Cloud Storage וקוראת לפונקציה כדי לזהות אם התמונה מכילה טקסט:
Node.js
Python
המשך
Java
הפונקציה הבאה מחלצת טקסט מהתמונה באמצעות Vision API ומכניסה את הטקסט לתור לתרגום:
Node.js
Python
המשך
Java
תרגום טקסט
הפונקציה הבאה מתרגמת את הטקסט שחולץ ומכניסה את הטקסט המתורגם לתור כדי לשמור אותו בחזרה ב-Cloud Storage:
Node.js
Python
המשך
Java
שמירת התרגומים
לבסוף, הפונקציה הבאה מקבלת את הטקסט המתורגם ושומרת אותו בחזרה ב-Cloud Storage:
Node.js
Python
המשך
Java
פריסת הפונקציות
כדי לפרוס את הפונקציה לעיבוד תמונות עם טריגר של Cloud Storage, מריצים את הפקודה הבאה בספרייה שמכילה את קוד הדוגמה (או במקרה של Java, את הקובץ
pom.xml):Node.js
gcloud functions deploy ocr-extract \ --runtime nodejs22 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point processImage \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"משתמשים בדגל
--runtimeכדי לציין את מזהה סביבת זמן הריצה של גרסת Node.js נתמכת להרצת הפונקציה.Python
gcloud functions deploy ocr-extract \ --runtime python312 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point process_image \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"משתמשים בדגל
--runtimeכדי לציין את מזהה זמן הריצה של גרסת Python נתמכת להרצת הפונקציה.המשך
gcloud functions deploy ocr-extract \ --runtime go121 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point ProcessImage \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"כדי לציין את מזהה זמן הריצה של גרסת Go נתמכת להרצת הפונקציה, משתמשים בדגל
--runtime.Java
gcloud functions deploy ocr-extract \ --entry-point functions.OcrProcessImage \ --runtime java17 \ --memory 512MB \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"משתמשים בדגל
--runtimeכדי לציין את מזהה זמן הריצה של גרסת Java נתמכת להרצת הפונקציה.כאשר
YOUR_IMAGE_BUCKET_NAMEהוא השם של קטגוריית Cloud Storage שאליה תעלו את התמונות.כדי לפרוס את פונקציית תרגום הטקסט עם טריגר Pub/Sub, מריצים את הפקודה הבאה בספרייה שמכילה את קוד הדוגמה (או במקרה של Java, את הקובץ
pom.xml):Node.js
gcloud functions deploy ocr-translate \ --runtime nodejs22 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point translateText \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"משתמשים בדגל
--runtimeכדי לציין את מזהה סביבת זמן הריצה של גרסת Node.js נתמכת להרצת הפונקציה.Python
gcloud functions deploy ocr-translate \ --runtime python312 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point translate_text \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"משתמשים בדגל
--runtimeכדי לציין את מזהה זמן הריצה של גרסת Python נתמכת להרצת הפונקציה.המשך
gcloud functions deploy ocr-translate \ --runtime go121 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point TranslateText \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"כדי לציין את מזהה זמן הריצה של גרסת Go נתמכת להרצת הפונקציה, משתמשים בדגל
--runtime.Java
gcloud functions deploy ocr-translate \ --entry-point functions.OcrTranslateText \ --runtime java17 \ --memory 512MB \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"משתמשים בדגל
--runtimeכדי לציין את מזהה זמן הריצה של גרסת Java נתמכת להרצת הפונקציה.כדי לפרוס את הפונקציה ששומרת את התוצאות ב-Cloud Storage באמצעות טריגר של Cloud Pub/Sub, מריצים את הפקודה הבאה בספרייה שמכילה את קוד הדוגמה (או במקרה של Java, את הקובץ
pom.xml):Node.js
gcloud functions deploy ocr-save \ --runtime nodejs22 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point saveResult \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"משתמשים בדגל
--runtimeכדי לציין את מזהה סביבת זמן הריצה של גרסת Node.js נתמכת להרצת הפונקציה.Python
gcloud functions deploy ocr-save \ --runtime python312 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point save_result \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"משתמשים בדגל
--runtimeכדי לציין את מזהה זמן הריצה של גרסת Python נתמכת להרצת הפונקציה.המשך
gcloud functions deploy ocr-save \ --runtime go121 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point SaveResult \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"כדי לציין את מזהה זמן הריצה של גרסת Go נתמכת להרצת הפונקציה, משתמשים בדגל
--runtime.Java
gcloud functions deploy ocr-save \ --entry-point functions.OcrSaveResult \ --runtime java17 \ --memory 512MB \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"משתמשים בדגל
--runtimeכדי לציין את מזהה זמן הריצה של גרסת Java נתמכת להרצת הפונקציה.
העלאת תמונה
מעלים תמונה לקטגוריה של Cloud Storage שבה מאוחסנות התמונות:
gcloud storage cp
PATH_TO_IMAGEgs://YOUR_IMAGE_BUCKET_NAMEאיפה
-
PATH_TO_IMAGEהוא נתיב לקובץ תמונה (שכולל טקסט) במערכת המקומית. -
YOUR_IMAGE_BUCKET_NAMEהוא שם הקטגוריה שאליה מעלים את התמונות.
אפשר להוריד אחת מהתמונות מפרויקט לדוגמה.
-
כדי לוודא שההפעלות הסתיימו, בודקים את היומנים:
gcloud functions logs read --limit 100
אפשר לראות את התרגומים השמורים בקטגוריה של Cloud Storage שבה השתמשתם עבור
YOUR_RESULT_BUCKET_NAME.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת הפונקציה
מחיקה של פונקציות Cloud Run לא מסירה משאבים שמאוחסנים ב-Cloud Storage.
כדי למחוק את פונקציות Cloud Run שיצרתם במדריך הזה, מריצים את הפקודות הבאות:
gcloud functions delete ocr-extract gcloud functions delete ocr-translate gcloud functions delete ocr-save
אפשר גם למחוק פונקציות Cloud Run ממסוףGoogle Cloud .