שימוש ב-Vision API עם C#

1. סקירה כללית

Google Cloud Vision API מאפשר למפתחים לשלב בקלות תכונות של זיהוי ראייה באפליקציות, כולל הוספת תוויות לתמונות, זיהוי פנים וציוני דרך, זיהוי תווים אופטי (OCR) ותיוג של תוכן בוטה.

בשיעור ה-Codelab הזה נתמקד בשימוש ב-Vision API עם C#. תוכל ללמוד איך לבצע זיהוי טקסט, זיהוי ציוני דרך וזיהוי פנים!

מה תלמדו

  • איך משתמשים ב-Cloud Shell
  • איך מפעילים את Google Cloud Vision API
  • איך לאמת בקשות API
  • איך להתקין את ספריית הלקוח של Vision API עבור #C
  • איך מבצעים זיהוי תוויות
  • איך לבצע זיהוי טקסט
  • איך לבצע זיהוי של ציוני דרך
  • איך לבצע זיהוי פנים

מה צריך להכין

  • פרויקט ב-Google Cloud Platform
  • דפדפן, למשל Chrome או Firefox
  • היכרות עם C#

סקר

איך תשתמשו במדריך הזה?

לקריאה בלבד לקרוא אותו ולבצע את התרגילים

איזה דירוג מגיע לחוויה שלך עם C#?

מתחילים בינונית בקיאים

איזה דירוג מגיע לדעתך לחוויית השימוש בשירותי Google Cloud Platform?

מתחילים בינונית בקיאים

2. הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא יעלה הרבה כסף, אם בכלל. כדי להשבית משאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים שמתוארת בו. אם הוצג לכם מסך ביניים, לוחצים על המשך.

d95252b003979716.png

ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.

7833d5e1c5d18f54.png

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

אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שהפרויקט מאומת ושהפרויקט מוגדר לפי מזהה הפרויקט שלכם.

  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהאימות בוצע:
gcloud auth list

פלט הפקודה

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהפקודה ב-gcloud יודעת על הפרויקט שלכם:
gcloud config list project

פלט הפקודה

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

פלט הפקודה

Updated property [core/project].

3. הפעלה של Vision API

כדי להתחיל להשתמש ב-Vision API, צריך להפעיל את ה-API. ב-Cloud Shell, אתם יכולים להפעיל את ה-API באמצעות הפקודה הבאה:

gcloud services enable vision.googleapis.com

4. התקנה של ספריית הלקוח של Google Cloud Vision API עבור #C

קודם כול, יוצרים אפליקציה פשוטה במסוף C# ומשתמשים בה כדי להריץ דוגמאות של Vision API:

dotnet new console -n VisionApiDemo

אתם אמורים לראות את האפליקציה שנוצרה ואת יחסי התלות:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

בשלב הבא, עוברים לתיקייה VisionApiDemo:

cd VisionApiDemo/

ומוסיפים את חבילת NuGet Google.Cloud.Vision.V1 לפרויקט:

dotnet add package Google.Cloud.Vision.V1
info : Adding PackageReference for package 'Google.Cloud.Vision.V1' into project '/home/atameldev/VisionApiDemo/VisionApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/VisionApiDemo/VisionApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Vision.V1' version '1.2.0' added to file '/home/atameldev/VisionApiDemo/VisionApiDemo.csproj'.

עכשיו הכול מוכן לשימוש ב-Vision API!

5. ביצוע זיהוי תווית

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

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

92ea233083f961c5.png

עוברים לקובץ Program.cs שבתוך התיקייה VisionApiDemo ומחליפים את הקוד כך:

using Google.Cloud.Vision.V1;
using System;

namespace VisionApiDemo
{
    class Program
    {   
        static void Main(string[] args)
        {
            var client = ImageAnnotatorClient.Create();
            var image = Image.FromUri("gs://cloud-samples-data/vision/using_curl/shanghai.jpeg");
            var labels = client.DetectLabels(image);

            Console.WriteLine("Labels (and confidence score):");
            Console.WriteLine(new String('=', 30));

            foreach (var label in labels)
            {
                Console.WriteLine($"{label.Description} ({(int)(label.Score * 100)}%)");
            }
        }
    }
}

הקדישו דקה או שתיים כדי ללמוד את הקוד ולראות איך ספריית ה-C# של Vision API משמשת לזיהוי התוויות.

בחזרה ב-Cloud Shell, מריצים את האפליקציה:

dotnet run 

הפלט הבא אמור להתקבל:

Labels (and confidence score):
==============================
Wheel (97%)
Tire (97%)
Photograph (94%)
Bicycle (94%)
Motor vehicle (89%)
Infrastructure (89%)
Vehicle (86%)
Mode of transport (84%)
Bicycle wheel (83%)
Asphalt (81%)

סיכום

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

6. ביצוע זיהוי טקסט

התכונה 'זיהוי טקסט' של Vision API מבצעת זיהוי תווים אופטי (OCR). הוא מזהה ומחלץ טקסט בתוך תמונה, תוך תמיכה במגוון שפות. הוא כולל גם זיהוי שפה אוטומטי.

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

עוברים לקובץ Program.cs שבתוך התיקייה VisionApiDemo ומחליפים את הקוד כך:

using Google.Cloud.Vision.V1;
using System;

namespace VisionApiDemo
{
    class Program
    {   
        static void Main(string[] args)
        {
            var client = ImageAnnotatorClient.Create();
            var image = Image.FromUri("gs://cloud-samples-data/vision/text/screen.jpg");
            var response = client.DetectText(image);
            foreach (var annotation in response)
            {
                if (annotation.Description != null)
                {
                    Console.WriteLine(annotation.Description);
                }
            }
        }
    }
}

הקדישו דקה או שתיים כדי ללמוד את הקוד ולראות איך ספריית ה-C# של Vision API משמשת לזיהוי טקסט.

בחזרה ב-Cloud Shell, מריצים את האפליקציה:

dotnet run 

הפלט הבא אמור להתקבל:

System Software Update
Back
Preparing to install...
After preparation is complete, the PS4 will automatically restart and the update file will be
installed.
37%
gus class
System
Software
Update
Back
Preparing
to
install
...
After
preparation
is
complete
,
the
PS4
will
automatically
restart
and
the
update
file
will
be
installed
.
37
%
gus
class

סיכום

בשלב הזה, הצלחתם לבצע זיהוי טקסט בתמונה של Otter Crossing ולהדפיס טקסט מזוהה מהתמונה. למידע נוסף על זיהוי טקסט.

7. ביצוע זיהוי של ציון דרך

התכונה 'זיהוי של ציון דרך' של Vision API מזהה בתוך תמונה מבנים פופולריים ומבנים מעשה ידי אדם.

בדוגמה הזו, תבצעו זיהוי של ציוני דרך בתמונה של מגדל אייפל.

עוברים לקובץ Program.cs שבתוך התיקייה VisionApiDemo ומחליפים את הקוד כך:

using Google.Cloud.Vision.V1;
using System;

namespace VisionApiDemo
{
    class Program
    {   
        static void Main(string[] args)
        {
            var client = ImageAnnotatorClient.Create();
            var image = Image.FromUri("gs://cloud-samples-data/vision/eiffel_tower.jpg");
            var response = client.DetectLandmarks(image);
            foreach (var annotation in response)
            {
                if (annotation.Description != null)
                {
                    Console.WriteLine(annotation.Description);
                }
            }
        }
    }
}

הקדישו דקה או שתיים כדי ללמוד את הקוד ולראות איך ספריית Vision API C# משמשת לזיהוי של ציוני דרך.

בחזרה ב-Cloud Shell, מריצים את האפליקציה:

dotnet run

הפלט הבא אמור להתקבל:

Eiffel Tower

סיכום

בשלב הזה הצלחת לבצע זיהוי של ציוני דרך בתמונה של מגדל אייפל. מידע נוסף על זיהוי סימני דרך.

8. זיהוי פנים רגשיות

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

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

עוברים לקובץ Program.cs שבתוך התיקייה VisionApiDemo ומחליפים את הקוד כך:

using Google.Cloud.Vision.V1;
using System;

namespace VisionApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = ImageAnnotatorClient.Create();

            var image = Image.FromUri("gs://cloud-samples-data/vision/face/face_no_surprise.jpg");
            var response = client.DetectFaces(image);
            foreach (var annotation in response)
            {
                Console.WriteLine($"Picture: {image}");
                Console.WriteLine($" Surprise: {annotation.SurpriseLikelihood}");
            }
        }
    }
}

הקדישו דקה או שתיים כדי ללמוד את הקוד ולראות איך ספריית Vision API C# משמשת לזיהוי פנים רגשיות.

להפעיל את האפליקציה;

dotnet run

הפלט הבא אמור להופיע בדוגמה עם face_no_surprise:

Picture: { "source": { "imageUri": "gs://cloud-samples-data/vision/face/face_no_surprise.jpg" } }
 Surprise: Likely

סיכום

בשלב הזה הצלחת לבצע זיהוי פנים רגשי. למידע נוסף על זיהוי פנים.

9. מעולה!

למדת איך להשתמש ב-Vision API באמצעות C# כדי לבצע זיהוי שונה של תמונות!

הסרת המשאבים

כדי להימנע מצבירת חיובים בחשבון Google Cloud Platform על המשאבים שבהם השתמשתם במדריך למתחילים הזה:

  • עוברים אל Cloud Platform Console.
  • בוחרים את הפרויקט שרוצים להשבית ולוחצים על Delete (מחיקה). למעלה: מתזמנת את מחיקת הפרויקט.

מידע נוסף

רישיון

היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.