将 Vision API 与 C# 搭配使用

将 Vision API 与 C# 搭配使用

关于此 Codelab

subject上次更新时间:6月 26, 2023
account_circleMete Atamel 编写

1. 概览

借助 Google Cloud Vision API,开发者可以轻松地在应用中集成视觉检测功能,这些功能包括图片标记、人脸和地标检测、光学字符识别 (OCR) 以及露骨内容的标记。

在此 Codelab 中,您将重点学习如何在 C# 中使用 Vision API。您将学习如何执行文本检测、地标检测和人脸检测!

学习内容

  • 如何使用 Cloud Shell
  • 如何启用 Google Cloud Vision API
  • 如何对 API 请求进行身份验证
  • 如何安装适用于 C# 的 Vision API 客户端库
  • 如何执行标签检测
  • 如何执行文本检测
  • 如何执行地标检测
  • 如何执行人脸检测

所需条件

  • 一个 Google Cloud Platform 项目
  • 一个浏览器,例如 ChromeFirefox
  • 熟悉 C# 的使用方法

调查问卷

<ph type="x-smartling-placeholder">

您将如何使用本教程?

您如何评价自己使用 C# 的体验?

您如何评价自己在使用 Google Cloud Platform 服务方面的经验水平?

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

295004821bab6a87

37d264871000675d

96d86d3d5655cdbe.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

激活 Cloud Shell

  1. 在 Cloud Console 中,点击激活 Cloud Shelld1264ca30785e435.png

cb81e7c8e34bc8d.png

如果这是您第一次启动 Cloud Shell,系统会显示一个中间屏幕,说明它是什么。如果您看到中间屏幕,请点击继续

d95252b003979716.png

预配和连接到 Cloud Shell 只需花几分钟时间。

7833d5e1c5d18f54

这个虚拟机装有所需的所有开发工具。它提供了一个持久的 5 GB 主目录,并在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的大部分(即使不是全部)工作都可以通过浏览器完成。

在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设为您的项目 ID。

  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. 安装适用于 C# 的 Google Cloud Vision API 客户端库

首先,创建一个简单的 C# 控制台应用,用于运行 Vision API 示例:

dotnet new console -n VisionApiDemo

您应该会看到该应用已创建且依赖项已解析:

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

接下来,前往 VisionApiDemo 文件夹:

cd VisionApiDemo/

并将 Google.Cloud.Vision.V1 NuGet 软件包添加到项目中:

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

找到 VisionApiDemo 文件夹内的 Program.cs 文件,并将代码替换为以下代码:

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)}%)");
           
}
       
}
   
}
}

花一两分钟时间研究一下代码,并了解如何使用 Vision API C# 库执行标签检测。

返回 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 的文本检测可执行光学字符识别。该功能可检测并提取图片内的文本,且支持多种语言。它还具有自动语言识别功能。

在此示例中,您将对系统软件更新屏幕的图片执行文本检测。

找到 VisionApiDemo 文件夹内的 Program.cs 文件,并将代码替换为以下代码:

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);
               
}
           
}
       
}
   
}
}

花一两分钟时间研究一下代码,并了解如何使用 Vision API C# 库执行文本检测。

返回 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. 执行地标检测

Vision API 的地标检测功能可检测图片内热门的自然景观和人造建筑。

在此示例中,您将对埃菲尔铁塔的图片执行地标检测。

找到 VisionApiDemo 文件夹内的 Program.cs 文件,并将代码替换为以下代码:

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. 执行情绪面部检测

人脸检测功能可以检测图片中的多张人脸,以及相关的关键面部特征,例如情绪状态或有无佩戴头饰。

在此示例中,您将从四种不同的情绪可能性中检测情绪状态的可能性:快乐、愤怒、悲伤和惊讶。

找到 VisionApiDemo 文件夹内的 Program.cs 文件,并将代码替换为以下代码:

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. 恭喜!

您已了解如何使用 C# 和 Vision API 对图片执行不同的检测!

清理

为避免系统因本快速入门中使用的资源向您的 Google Cloud Platform 账号收取费用,请执行以下操作:

  • 前往 Cloud Platform Console
  • 选择要关停的项目,然后点击“删除”顶部:这会安排删除项目。

了解详情

许可

此作品已获得 Creative Commons Attribution 2.0 通用许可授权。