שימוש ב-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

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

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

הפעלת Cloud Shell

  1. ב-Cloud Console, לוחצים על 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, משתמשים בפקודה הבאה:

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

סיכום

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

7. ביצוע זיהוי ציוני דרך

התכונה Landmark Detection (זיהוי ציוני דרך) ב-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);
                }
            }
        }
    }
}

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

חוזרים ל-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}");
            }
        }
    }
}

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

מפעילים את האפליקציה.

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.
  • בוחרים את הפרויקט שרוצים לסגור ולוחצים על 'מחיקה' בחלק העליון. הפעולה הזו מתזמנת את הפרויקט למחיקה.

מידע נוסף

רישיון

עבודה זו מורשית תחת רישיון Creative Commons שמותנה בייחוס 2.0 כללי.