יצירה של קבוצת מוצרים וחיפוש מוצרים
במדריך הזה מוסבר איך ליצור ולהשתמש בשלושת סוגי המשאבים של Vision API Product Search: קבוצת מוצרים שמכילה קבוצה של מוצרים ותמונות ייחוס שמשויכות למוצרים האלה.
במדריך הזה ליצירת מוצרים נלמד איך ליצור קבוצת מוצרים, מוצרים ותמונות ייחוס שלהם בשלב אחד באמצעות ייבוא באצווה.
אחרי שקבוצת המוצרים עוברת אינדוקס, אפשר לשלוח שאילתה לקבוצת המוצרים באמצעות Vision API Product Search.
במדריך למתחילים הזה מוסבר איך:
- שימוש ב-CSV ובייבוא בכמות גדולה כדי ליצור קבוצת מוצרים, מוצרים ותמונות להשוואה.
- שליחת בקשה ל-Google Product Search ב-Vision API עם תמונה שמאוחסנת בקטגוריה של Cloud Storage.
לפני שמתחילים
אם עדיין לא עשיתם את זה, צריך להגדיר את הפרויקט כמו שמוסבר בהמשך.
הגדרת הפרויקט
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Vision API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable vision.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/storage.objectViewergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Vision API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable vision.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/storage.objectViewergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
שימוש במערך נתונים
במדריך הזה לשימוש מהיר, תשתמשו במערך נתונים של כ-100 apparel-v2 רשומות של קטגוריות מוצרים. מערך הנתונים הזה שזמין לכולם נמצא בקטגוריה של Cloud Storage בכתובת:
הפורמט של קובץ ה-CSV הוא:
gs://cloud-ai-vision-data/product-search-tutorial/images/filename1.jpg,image0,product_set0,product_id0,apparel-v2,,"style=women,category=shoe", gs://cloud-ai-vision-data/product-search-tutorial/images/filename2.jpg,image1,product_set0,product_id1,apparel-v2,,"style=men,category=shoe", gs://cloud-ai-vision-data/product-search-tutorial/images/filename3.jpg,image2,product_set0,product_id2,apparel-v2,,"style=women,category=dress",
שימוש בייבוא בכמות גדולה כדי ליצור קבוצת מוצרים, מוצרים ותמונות לדוגמה
משתמשים בפקודה curl הבאה כדי ליצור קבוצת מוצרים חדשה עם מוצרים ותמונות להשוואה. הקבוצה הזו נקראת product_set0, ערך שמוצהר בקובץ ה-CSV לייבוא.
קודם יוצרים קובץ JSON של בקשה בשם import_request.json ושומרים אותו בספריית העבודה הנוכחית:
import_request.json
{
"inputConfig": {
"gcsSource": {
"csvFileUri": "gs://cloud-samples-data/vision/product_search/product_catalog.csv"
}
}
}אחרי שיוצרים את קובץ ה-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 @import_request.json \
https://vision.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/productSets:importמחליפים את מה שכתוב בשדות הבאים:
- LOCATION_ID: המיקום שבו יופעל המדריך, לדוגמה,
us-east1. מזהי מיקום תקינים:us-west1,us-east1,europe-west1ו-asia-east1.
תגובה מוצלחת מכילה אובייקט של פעולה ארוכת טווח:
{
"name": "locations/LOCATION_ID/operations/0a0aec86192599fa"
}התגובה מכילה גם מזהה פעולה יחסי (לדוגמה, 0a0aec86192599fa) שאפשר להשתמש בו כדי לקבל את סטטוס הפעולה.
קבלת סטטוס של פעולת ייבוא
אפשר להשתמש ב-OPERATION_ID שמוחזר מפעולת הייבוא כדי לבדוק את הסטטוס של פעולת הייבוא בכמות גדולה:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/locations/LOCATION_ID/operations/OPERATION_IDתגובה מוצלחת נראית כך:
{ "name": "locations/LOCATION_ID/operations/0a0aec86192599fb", "metadata": { "@type": "type.googleapis.com/google.cloud.vision.v1.BatchOperationMetadata", "state": "SUCCESSFUL", "submitTime": "2018-11-30T03:11:04.808114024Z", "endTime": "2018-11-30T03:11:38.624444324Z" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.vision.v1.ImportProductSetsResponse", "referenceImages": [ { "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id0/referenceImages/image0", "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/46a0cbcf70ba11e89399d20059124800.jpg" }, { "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id1/referenceImages/image1", "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/46a1aea370ba11e888d4d20059124800.jpg" }, ... { "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id93/referenceImages/image93", "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/4697319970ba11e8a7bfd20059124800.jpg" }, { "name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id94/referenceImages/image94", "uri": "gs://cloud-ai-vision-data/product-search-tutorial/images/4698596370ba11e8bf6ad20059124800.jpg" } ], "statuses": [ {}, {}, [...] {}, {} ] } }
יצירת אינדקס
אינדקס החיפוש של Google Product Search מתעדכן בערך כל יום. כשמוסיפים או מוחקים תמונות, השינוי לא יופיע בתשובות של Google Product Search עד לעדכון הבא של האינדקס.
כדי לוודא שהוספת האינדקס הסתיימה בהצלחה, בודקים את השדה indexTime של קבוצת מוצרים.
רשימת קבוצות מוצרים ובדיקת האינדקס
אתם יכולים לראות רשימה של כל קבוצות המוצרים שלכם ולהשתמש בשדה indexTime כדי לוודא שהוספת המוצרים לאינדקס הסתיימה בהצלחה:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/productSetsתגובה מוצלחת מפרטת את כל קבוצות המוצרים, כולל מזהה קבוצת המוצרים (לדוגמה, product_set0) וגם השדה indexTime שמציין מתי הסתיים תהליך יצירת האינדקס:
{
"productSets": [
{
"name": "projects/PROJECT_ID/locations/LOCATION_ID/productSets/product_set0",
"displayName": " ",
"indexTime": "2019-11-30T18:33:40.093508652Z",
"indexError": {}
}
]
}תעשה לי רשימת מוצרים
אפשר להשתמש ב-PRODUCT_SET_ID שמוחזר מרשימת קבוצות המוצרים כדי להציג את כל המוצרים בקבוצת המוצרים:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/productSets/PRODUCT_SET_ID/products?pageSize=15בתגובה מוצגים פרטי המוצר.
בבקשה הזו משתמשים בפרמטר האופציונלי של השאילתה pageSize כדי להגדיר את רשימת התוצאות ל-15 מוצרים. הערך nextPageToken בתשובה מציין שיש עוד מוצרים להצגה. אפשר להשתמש באסימון שמופיע כדי לאחזר תוצאות נוספות. מידע נוסף על שימוש ב-pageToken זמין במאמר קבלת רשימה של משאבים.
{
"products": [
{
"name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id0",
"displayName": " ",
"productCategory": "apparel",
"productLabels": [
{
"key": "style",
"value": "women"
},
{
"key": "category",
"value": "shoe"
}
]
},
{
"name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id1",
"displayName": " ",
"productCategory": "apparel",
"productLabels": [
{
"key": "style",
"value": "men"
},
{
"key": "category",
"value": "shoe"
}
]
},
...
{
"name": "projects/PROJECT_ID/locations/LOCATION_ID/products/product_id21",
"displayName": " ",
"productCategory": "apparel",
"productLabels": [
{
"key": "style",
"value": "women"
},
{
"key": "category",
"value": "dress"
}
]
}
],
"nextPageToken": "1LqhSgZfM_uWKOxvog"
}חיפוש מוצרים תואמים באמצעות Google Product Search של Vision API
אחרי שהאינדוקס יסתיים, תוכלו לחפש מוצרים שתואמים לתמונה לדוגמה. במדריך למתחילים הזה משתמשים בתמונה שמאוחסנת בקטגוריה של Cloud Storage, כמו התמונה הבאה.
gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpgחיפוש באמצעות תמונה מרחוק
משתמשים בבקשה הבאה כדי לבצע חיפוש באמצעות התמונה שמאוחסנת בקטגוריה ציבורית של Cloud Storage.
קודם יוצרים קובץ JSON של בקשה בשם search_request.json ושומרים אותו בספריית העבודה הנוכחית. משנים את הערכים הבאים ב-JSON של הבקשה כך שיתאימו לפרטי הפרויקט:
- PROJECT_ID
- LOCATION_ID
- PRODUCT_SET_ID
search_request.json
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg"
}
},
"features": [
{
"type": "PRODUCT_SEARCH"
}
],
"imageContext": {
"productSearchParams": {
"productSet": "projects/PROJECT_ID/locations/LOCATION_ID/productSets/PRODUCT_SET_ID",
"productCategories": [
"apparel-v2"
],
"filter": "style=womens OR style=women"
}
}
}
]
}אחרי שיוצרים את קובץ ה-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 @search_request.json \
https://vision.googleapis.com/v1/images:annotateבקשה מוצלחת מחזירה רשימה של מוצרים תואמים, שמצוינים באמצעות מזהה המוצר שלהם. התוצאות האלה מחולקות עוד יותר לפי מוצרים בודדים, שמזוהים באמצעות תיבות תוחמות אם יש כמה מוצרים בתמונה אחת.
דוגמה לזיהוי מוצר יחיד ולזיהוי של כמה מוצרים בתמונה מופיעה במאמר הסבר על תשובות לחיפושים וזיהוי של כמה מוצרים.
מוחזר גם שדה score. השדה הזה מציין את רמת הסמך שבה השירות מרגיש שהמוצר תואם לתמונה שסופקה, בסולם של 0 (ללא סמך) עד 1 (סמך מלא).
בשדה indexTime מוצגת הגרסה של האינדקס שמתבצע בה החיפוש. שינויים בתמונות שבוצעו אחרי השעה הזו לא יופיעו בתוצאות.
כל הכבוד! ביצעת את הבקשה הראשונה שלך אל שירות Google Product Search של Vision API.images.annotate
הסרת המשאבים
-
אם רוצים, מבטלים את פרטי הכניסה של ה-CLI של gcloud.
gcloud auth revoke
-
כדי למחוק פרויקט Google Cloud :
gcloud projects delete PROJECT_ID
המאמרים הבאים
- כדי להתחיל להשתמש ב-Vision API Google Product Search בשפה הרצויה, אפשר להשתמש בספריית לקוח של Vision API Product Search.
- קוראים את המדריכים.
- כדאי לעיין במדריך.