Deploy an ML vision analytics solution with Dataflow and Cloud Vision API

Last reviewed 2024-05-16 UTC

במסמך הפריסה הזה מוסבר איך לפרוס צינור Dataflow כדי לעבד קבצי תמונות בהיקף גדול באמצעות Cloud Vision API. הצינור הזה שומר את התוצאות של הקבצים שעובדו ב-BigQuery. אפשר להשתמש בקבצים למטרות ניתוח או כדי לאמן מודלים של BigQuery ML.

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

ההוראות האלה מיועדות למהנדסי מערכות מידע ולמדעני נתונים. הנחת המוצא במסמך הזה היא שיש לכם ידע בסיסי בבניית צינורות Dataflow באמצעות Java SDK של Apache Beam,‏ GoogleSQL ל-BigQuery וסקריפטים בסיסיים של Shell. בנוסף, אנחנו יוצאים מנקודת הנחה שאתם מכירים את Vision API.

ארכיטקטורה

בתרשים הבא מודגם תהליך המערכת ליצירת פתרון לניתוח נתונים של ראייה ממוחשבת (ML).

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

בתרשים שלמעלה, המידע זורם בארכיטקטורה באופן הבא:

  1. לקוח מעלה קובצי תמונות לקטגוריה של Cloud Storage.
  2. ‫Cloud Storage שולח הודעה על העלאת הנתונים ל-Pub/Sub.
  3. ‫Pub/Sub שולח ל-Dataflow התראה על ההעלאה.
  4. צינור הנתונים של Dataflow שולח את התמונות ל-Vision API.
  5. ‫Vision API מעבד את התמונות ומחזיר את ההערות.
  6. הפייפליין שולח את קובצי הרישומים ל-BigQuery כדי שתוכלו לנתח אותם.

מטרות

  • תיצור צינור של Apache Beam לניתוח תמונות שנטענו ב-Cloud Storage.
  • משתמשים ב-Dataflow Portable Runner כדי להריץ את צינור עיבוד הנתונים של Apache Beam במצב סטרימינג, כדי לנתח את התמונות מיד אחרי שהן מועלות.
  • משתמשים ב-Vision API כדי לנתח תמונות לפי קבוצה של סוגי תכונות.
  • ניתוח הערות באמצעות BigQuery.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

לפני שמתחילים

  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. 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

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

  6. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  7. משכפלים את המאגר ב-GitHub שמכיל את קוד המקור של צינור Dataflow:
        git clone
        https://github.com/GoogleCloudPlatform/dataflow-vision-analytics.git
        
  8. עוברים לתיקיית הבסיס של המאגר:
        cd dataflow-vision-analytics
        
  9. פועלים לפי ההוראות שבקטע Getting started במאגר dataflow-vision-analytics ב-GitHub כדי לבצע את המשימות הבאות:
    • מפעילים כמה ממשקי API.
    • יצירת קטגוריה של Cloud Storage.
    • יוצרים נושא ומינוי ב-Pub/Sub.
    • יוצרים מערך נתונים ב-BigQuery.
    • מגדירים כמה משתני סביבה לפריסה הזו.

הרצת צינור עיבוד הנתונים של Dataflow לכל התכונות שהוטמעו ב-Vision API

צינור עיבוד הנתונים של Dataflow מבקש ומעבד קבוצה ספציפית של תכונות ומאפיינים של Vision API בתוך קובצי הרישומים.

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

שם הפרמטר תיאור

batchSize

מספר התמונות שייכללו בבקשה ל-Vision API. ערך ברירת המחדל הוא 1. אפשר להגדיל את הערך הזה עד 16.

datasetName

השם של מערך הנתונים של הפלט ב-BigQuery.

features

רשימה של תכונות לעיבוד תמונה. הצינור תומך בתכונות הבאות: תווית, ציון דרך, לוגו, פנים, הצעת חיתוך ומאפייני תמונה.

keyRange

הפרמטר שמגדיר את המספר המקסימלי של קריאות מקבילות ל-Vision API. ערך ברירת המחדל הוא 1.

labelAnnottationTable,
landmarkAnnotationTable,
logoAnnotationTable,
faceAnnotationTable,
imagePropertiesTable,
cropHintAnnotationTable,
errorLogTable

פרמטרים של מחרוזות עם שמות של טבלאות להערות שונות. ערכי ברירת המחדל מופיעים בכל טבלה, לדוגמה: label_annotation.

maxBatchCompletionDurationInSecs

משך הזמן להמתנה לפני עיבוד תמונות כשיש קבוצה לא שלמה של תמונות. ברירת המחדל היא 30 שניות.

subscriberId

המזהה של מינוי Pub/Sub שמקבל התראות קלט מ-Cloud Storage.

visionApiProjectId

מזהה הפרויקט שבו רוצים להשתמש ב-Vision API.
  1. ב-Cloud Shell, מריצים את הפקודה הבאה כדי לעבד תמונות לכל סוגי התכונות שנתמכים בפייפליין של Dataflow:

    ./gradlew run --args=" \
    --jobName=test-vision-analytics \
      --streaming \
      --runner=DataflowRunner \
      --enableStreamingEngine \
      --diskSizeGb=30 \
      --project=${PROJECT} \
      --datasetName=${BIGQUERY_DATASET} \
      --subscriberId=projects/${PROJECT}/subscriptions/${GCS_NOTIFICATION_SUBSCRIPTION} \
      --visionApiProjectId=${PROJECT} \
      --features=IMAGE_PROPERTIES,LABEL_DETECTION,LANDMARK_DETECTION,LOGO_DETECTION,CROP_HINTS,FACE_DETECTION"
    

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

    מידע נוסף על שימוש בחשבון שירות ייעודי זמין במאמר אבטחה והרשאות ב-Dataflow.

  2. פותחים את כתובת ה-URL שמוצגת בכרטיסייה חדשה בדפדפן, או עוברים לדף Dataflow Jobs ובוחרים את צינור הנתונים test-vision-analytics.

    אחרי כמה שניות, התרשים של משימת Dataflow מופיע:

    דיאגרמת זרימה של משימת Dataflow.

    צינור עיבוד הנתונים של Dataflow פועל עכשיו וממתין לקבלת התראות קלט מהמינוי ל-Pub/Sub.

  3. כדי להפעיל את עיבוד התמונות ב-Dataflow, מעלים את ששת קובצי הדוגמה לקטגוריית הקלט:

    gcloud storage cp data-sample/* gs://${IMAGE_BUCKET}
    
  4. במסוף Google Cloud , מאתרים את החלונית Custom Counters ומשתמשים בה כדי לבדוק את המונים בהתאמה אישית ב-Dataflow ולוודא ש-Dataflow עיבד את כל שש התמונות. אתם יכולים להשתמש בפונקציונליות הסינון של החלונית כדי לנווט למדדים הנכונים. כדי להציג רק את המונים שמתחילים בקידומת numberOf, מקלידים numberOf במסנן.

    רשימת מוניטורים מסוננת כך שיוצגו רק מוניטורים שמתחילים ב-numberof.

  5. ב-Cloud Shell, מוודאים שהטבלאות נוצרו באופן אוטומטי:

    bq query --nouse_legacy_sql "SELECT table_name FROM ${BIGQUERY_DATASET}.INFORMATION_SCHEMA.TABLES ORDER BY table_name"
    

    הפלט אמור להיראות כך:

    +----------------------+
    |      table_name      |
    +----------------------+
    | crop_hint_annotation |
    | face_annotation      |
    | image_properties     |
    | label_annotation     |
    | landmark_annotation  |
    | logo_annotation      |
    +----------------------+
    
  6. צופים בסכימה של הטבלה landmark_annotation. התכונה LANDMARK_DETECTION מתעדת את המאפיינים שמוחזרים מקריאה ל-API.

    bq show --schema --format=prettyjson ${BIGQUERY_DATASET}.landmark_annotation
    

    הפלט אמור להיראות כך:

    [
       {
          "name":"gcs_uri",
          "type":"STRING"
       },
       {
          "name":"feature_type",
          "type":"STRING"
       },
       {
          "name":"transaction_timestamp",
          "type":"STRING"
       },
       {
          "name":"mid",
          "type":"STRING"
       },
       {
          "name":"description",
          "type":"STRING"
       },
       {
          "name":"score",
          "type":"FLOAT"
       },
       {
          "fields":[
             {
                "fields":[
                   {
                      "name":"x",
                      "type":"INTEGER"
                   },
                   {
                  "name":"y",
                  "type":"INTEGER"
               }
            ],
            "mode":"REPEATED",
            "name":"vertices",
            "type":"RECORD"
         }
      ],
      "name":"boundingPoly",
      "type":"RECORD"
    },
    {
      "fields":[
         {
            "fields":[
               {
                  "name":"latitude",
                  "type":"FLOAT"
               },
               {
                  "name":"longitude",
                  "type":"FLOAT"
               }
            ],
                "name":"latLon",
                "type":"RECORD"
              }
            ],
          "mode":"REPEATED",
          "name":"locations",
          "type":"RECORD"
       }
    ]
    
  7. כדי לראות את נתוני ההערות שה-API הפיק, מריצים את הפקודות הבאות של bq query. כך אפשר לראות את כל ציוני הדרך שנמצאו בשש התמונות האלה, מסודרים לפי הציון הסביר ביותר:

    bq query --nouse_legacy_sql "SELECT SPLIT(gcs_uri, '/')[OFFSET(3)] file_name, description, score, locations FROM ${BIGQUERY_DATASET}.landmark_annotation ORDER BY score DESC"
    

    הפלט אמור להיראות כך:

    +------------------+-------------------+------------+---------------------------------+
    |    file_name     |    description    |   score    |            locations            |
    +------------------+-------------------+------------+---------------------------------+
    | eiffel_tower.jpg | Eiffel Tower      |  0.7251996 | ["POINT(2.2944813 48.8583701)"] |
    | eiffel_tower.jpg | Trocadéro Gardens | 0.69601923 | ["POINT(2.2892823 48.8615963)"] |
    | eiffel_tower.jpg | Champ De Mars     |  0.6800974 | ["POINT(2.2986304 48.8556475)"] |
    +------------------+-------------------+------------+---------------------------------+
    

    תיאורים מפורטים של כל העמודות שספציפיות להערות מופיעים במאמר בנושא AnnotateImageResponse.

  8. כדי להפסיק את פייפליין זורם, מריצים את הפקודה הבאה. הצינור ממשיך לפעול גם אם אין יותר התראות Pub/Sub לעיבוד.

      gcloud dataflow jobs cancel
        --region ${REGION} $(gcloud dataflow jobs list
        --region ${REGION} --filter="NAME:test-vision-analytics AND STATE:Running"
        --format="get(JOB_ID)")
    

    בקטע הבא יש עוד שאילתות לדוגמה שמנתחות תכונות שונות של התמונות.

ניתוח מערך נתונים של Flickr30K

בקטע הזה תזהו תוויות וציוני דרך במערך הנתונים הציבורי של תמונות Flickr30k שמתארח ב-Kaggle.

  1. ב-Cloud Shell, משנים את הפרמטרים של צינור עיבוד הנתונים ב-Dataflow כדי לבצע אופטימיזציה למערך נתונים גדול. כדי לאפשר תפוקה גבוהה יותר, צריך גם להגדיל את הערכים של batchSize ושל keyRange. ‫Dataflow משנה את מספר העובדים לפי הצורך:

    ./gradlew run --args=" \
      --runner=DataflowRunner \
      --jobName=vision-analytics-flickr \
      --streaming \
      --enableStreamingEngine \
      --diskSizeGb=30 \
      --autoscalingAlgorithm=THROUGHPUT_BASED \
      --maxNumWorkers=5 \
      --project=${PROJECT} \
      --region=${REGION} \
      --subscriberId=projects/${PROJECT}/subscriptions/${GCS_NOTIFICATION_SUBSCRIPTION} \
      --visionApiProjectId=${PROJECT} \
      --features=LABEL_DETECTION,LANDMARK_DETECTION \
      --datasetName=${BIGQUERY_DATASET} \
      --batchSize=16 \
      --keyRange=5"
    

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

  2. כדי לאחזר תמונות מ-Kaggle ולשלוח אותן לקטגוריה של Cloud Storage, פועלים לפי ההוראות שבקטע Simulate the images being uploaded to the storage bucket במאגר GitHub.

  3. כדי לעקוב אחר התקדמות תהליך ההעתקה באמצעות מדדים מותאמים אישית שזמינים בממשק המשתמש של Dataflow, עוברים לדף Dataflow Jobs ובוחרים את צינור העיבוד vision-analytics-flickr. הערכים של מדדי הלקוחות אמורים להשתנות מעת לעת עד שצינור הנתונים של Dataflow יעבד את כל הקבצים.

    הפלט דומה לצילום המסך הבא של החלונית Custom Counters. אחד מהקבצים במערך הנתונים הוא מסוג שגוי, והדבר משתקף במונה rejectedFiles. ערכי המונה האלה הם משוערים. יכול להיות שתראו מספרים גבוהים יותר. בנוסף, סביר להניח שמספר ההערות ישתנה בגלל הדיוק המוגבר של העיבוד באמצעות Vision API.

    רשימת מוני העיבוד שמשויכים לתמונות שמבוססות על Kaggle.

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

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

  4. מכבים את הפייפליין:

    gcloud dataflow jobs list --region $REGION --filter="NAME:vision-analytics-flickr AND STATE:Running" --format="get(JOB_ID)"
    

ניתוח הערות ב-BigQuery

בפריסה הזו, עיבדתם יותר מ-30,000 תמונות להוספת הערות של תוויות וציוני דרך. בקטע הזה, אתם אוספים נתונים סטטיסטיים על הקבצים האלה. אפשר להריץ את השאילתות האלה בסביבת העבודה של GoogleSQL for BigQuery או להשתמש בכלי שורת הפקודה bq.

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

  1. במסוף Google Cloud , עוברים לדף Query editor של BigQuery ומריצים את הפקודה הבאה כדי לראות את 20 התוויות המובילות במערך הנתונים:

    מעבר אל Query editor

    SELECT  description, count(*)ascount \
      FROM vision_analytics.label_annotation
      GROUP BY description ORDER BY count DESC LIMIT 20
    

    הפלט אמור להיראות כך:

    +------------------+-------+
    |   description    | count |
    +------------------+-------+
    | Leisure          |  7663 |
    | Plant            |  6858 |
    | Event            |  6044 |
    | Sky              |  6016 |
    | Tree             |  5610 |
    | Fun              |  5008 |
    | Grass            |  4279 |
    | Recreation       |  4176 |
    | Shorts           |  3765 |
    | Happy            |  3494 |
    | Wheel            |  3372 |
    | Tire             |  3371 |
    | Water            |  3344 |
    | Vehicle          |  3068 |
    | People in nature |  2962 |
    | Gesture          |  2909 |
    | Sports equipment |  2861 |
    | Building         |  2824 |
    | T-shirt          |  2728 |
    | Wood             |  2606 |
    +------------------+-------+
    
  2. לזהות אילו תוויות אחרות קיימות בתמונה עם תווית מסוימת, לפי דירוג התדירות:

    DECLARE label STRING DEFAULT 'Plucked string instruments';
    
    WITH other_labels AS (
       SELECT description, COUNT(*) count
    FROM vision_analytics.label_annotation
    WHERE gcs_uri IN (
        SELECT gcs_uri FROM vision_analytics.label_annotation WHERE description = label )
      AND description != label
    GROUP BY description)
    SELECT description, count, RANK() OVER (ORDER BY count DESC) rank
    FROM other_labels ORDER BY rank LIMIT 20;
    

    הפלט שיתקבל זהה לפלט הבא: עבור התווית Plucked string instruments שמשמשת בפקודה הקודמת, אמורות להופיע התוצאות הבאות:

    +------------------------------+-------+------+
    |         description          | count | rank |
    +------------------------------+-------+------+
    | String instrument            |   397 |    1 |
    | Musical instrument           |   236 |    2 |
    | Musician                     |   207 |    3 |
    | Guitar                       |   168 |    4 |
    | Guitar accessory             |   135 |    5 |
    | String instrument accessory  |    99 |    6 |
    | Music                        |    88 |    7 |
    | Musical instrument accessory |    72 |    8 |
    | Guitarist                    |    72 |    8 |
    | Microphone                   |    52 |   10 |
    | Folk instrument              |    44 |   11 |
    | Violin family                |    28 |   12 |
    | Hat                          |    23 |   13 |
    | Entertainment                |    22 |   14 |
    | Band plays                   |    21 |   15 |
    | Jeans                        |    17 |   16 |
    | Plant                        |    16 |   17 |
    | Public address system        |    16 |   17 |
    | Artist                       |    16 |   17 |
    | Leisure                      |    14 |   20 |
    +------------------------------+-------+------+
    
  3. למטה מופיעים 10 האתרים המפורסמים שזוהו:

      SELECT description, COUNT(description) AS count
      FROM vision_analytics.landmark_annotation
      GROUP BY description ORDER BY count DESC LIMIT 10
    

    הפלט אמור להיראות כך:

      +--------------------+-------+
      |    description     | count |
      +--------------------+-------+
      | Times Square       |    55 |
      | Rockefeller Center |    21 |
      | St. Mark's Square  |    16 |
      | Bryant Park        |    13 |
      | Millennium Park    |    13 |
      | Ponte Vecchio      |    13 |
      | Tuileries Garden   |    13 |
      | Central Park       |    12 |
      | Starbucks          |    12 |
      | National Mall      |    11 |
      +--------------------+-------+
      

  4. קובעים אילו תמונות הכי סביר שיכילו מפלים:

    SELECT SPLIT(gcs_uri, '/')[OFFSET(3)] file_name, description, score
    FROM vision_analytics.landmark_annotation
    WHERE LOWER(description) LIKE '%fall%'
    ORDER BY score DESC LIMIT 10
    

    הפלט אמור להיראות כך:

    +----------------+----------------------------+-----------+
    |   file_name    |        description         |   score    |
    +----------------+----------------------------+-----------+
    | 895502702.jpg  | Waterfall Carispaccha      |  0.6181358 |
    | 3639105305.jpg | Sahalie Falls Viewpoint    | 0.44379658 |
    | 3672309620.jpg | Gullfoss Falls             | 0.41680416 |
    | 2452686995.jpg | Wahclella Falls            | 0.39005348 |
    | 2452686995.jpg | Wahclella Falls            |  0.3792498 |
    | 3484649669.jpg | Kodiveri Waterfalls        | 0.35024035 |
    | 539801139.jpg  | Mallela Thirtham Waterfall | 0.29260656 |
    | 3639105305.jpg | Sahalie Falls              |  0.2807213 |
    | 3050114829.jpg | Kawasan Falls              | 0.27511594 |
    | 4707103760.jpg | Niagara Falls              | 0.18691841 |
    +----------------+----------------------------+-----------+
    
  5. ‫Find images of landmarks within 3 kilometers of the Colosseum in Rome (the ST_GEOPOINT function uses the Colosseum's longitude and latitude):

    WITH
      landmarksWithDistances AS (
      SELECT
        gcs_uri,
        description,
        location,
        ST_DISTANCE(location,
          ST_GEOGPOINT(12.492231,
            41.890222)) distance_in_meters,
      FROM
        `vision_analytics.landmark_annotation` landmarks
      CROSS JOIN
        UNNEST(landmarks.locations) AS location )
    SELECT
      SPLIT(gcs_uri,"/")[OFFSET(3)] file,
      description,
        ROUND(distance_in_meters) distance_in_meters,
      location,
      CONCAT("https://storage.cloud.google.com/", SUBSTR(gcs_uri, 6)) AS image_url
    FROM
      landmarksWithDistances
    WHERE
      distance_in_meters < 3000
    ORDER BY
      distance_in_meters
    LIMIT
      100
    

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

    אפשר להדביק את השאילתה הקודמת ב-BigQuery Geo Viz כדי להציג את הנתונים באופן חזותי. בוחרים נקודה במפה כדי לראות את הפרטים שלה. המאפיין Image_url מכיל קישור לקובץ התמונה.

    מפה של המיקומים והמרחק שלהם מהקולוסיאום.

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

מכיוון שמיקום אחד יכול לציין את מיקום הסצנה בתמונה, יכולים להיות כמה רכיבי LocationInfo. מיקום אחר יכול לציין איפה התמונה צולמה.

הסרת המשאבים

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

מחיקת הפרויקט Google Cloud

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט ב- Google Cloud שיצרתם בשביל המדריך.

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

אם מחליטים למחוק משאבים בנפרד, פועלים לפי השלבים שבקטע ניקוי במאגר GitHub.

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

  • לדוגמאות נוספות של ארכיטקטורות, תרשימים ושיטות מומלצות, עיינו במאמר Cloud Architecture Center.

שותפים ביצירת התוכן

מחברים:

תורמי תוכן אחרים: