GSP075

概览
在本实验中,您将结合使用多个机器学习 API,探索机器学习的强大力量。首先使用 Cloud Vision API 的文本检测方法,利用光学字符识别 (OCR) 技术从图片中提取文本。然后,学习如何使用 Translation API 翻译文本,并使用 Natural Language API 分析文本。
目标
在本实验中,您将执行以下操作:
- 创建 Vision API 请求,并使用 curl 调用该 API。
- 使用 Vision API 的文本检测 (OCR) 方法
- 使用 Translation API 翻译图片中的文本
- 使用 Natural Language API 分析文本
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 Cloud Shell 信息窗口中的设置。
- 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
任务 1. 创建 API 密钥
由于您将使用 curl 向 Vision API 发送请求,因此需要生成 API 密钥,以传递到请求网址中。
-
要创建 API 密钥,请前往导航菜单 > API 和服务 > 凭证。
-
点击 + 创建凭证。
-
在下拉菜单中选择 API 密钥。
-
接下来,复制您刚刚生成的密钥,然后点击关闭。
-
现在,将 API 密钥保存到环境变量中,这样就不必在每个请求中都插入 API 密钥的值。
-
在 Cloud Shell 中运行以下命令,将 <your_api_key> 替换为您刚刚复制的密钥:
export API_KEY=<YOUR_API_KEY>
点击检查我的进度以验证您已完成的任务。
创建 API 密钥
任务 2. 将图片上传到 Cloud Storage 存储桶
创建 Cloud Storage 存储桶
您可以通过两种方式将图片发送到 Vision API 进行图片检测:一种是向该 API 发送 base64 编码的图片字符串,另一种是向该 API 传递 Cloud Storage 中存储的文件的网址。在本实验中,您将创建一个 Cloud Storage 存储桶来存储图片。
-
在控制台中,前往导航菜单 > Cloud Storage 浏览器,然后点击创建存储桶。
-
为存储桶指定唯一名称:-bucket。
-
为存储桶命名后,点击选择如何控制对对象的访问权限。
-
取消选中禁止公开访问此存储桶复选框。
-
在“访问权限控制”下选择精细控制,然后点击创建。
将图片上传到存储桶
- 右键点击以下法语标牌图片,然后点击图片另存为,在您的计算机上保存为 sign.jpg。

- 在 Cloud Storage 浏览器中找到您刚刚创建的存储桶,依次点击上传 > 上传文件,然后选择 sign.jpg。
接下来,您将允许公开查看该文件,而对存储桶的访问权限则保留为私享。
- 点击图片文件对应的三点状图标:

-
选择修改访问权限。
-
点击添加条目,然后设置如下:
- 对于“实体”,选择公开。
- 确保“名称”的值为 allUsers。
- 对于“访问权限”,选择读取者。

- 点击保存。
现在,您会看到该文件可公开访问。
将文件放入存储桶后,您就可以创建 Vision API 请求,向该 API 传递此图片的网址。
点击检查我的进度以验证您已完成的任务。
将图片上传到存储桶
任务 3. 创建 Cloud Vision API 请求
- 在 Cloud Shell 环境中,创建
ocr-request.json 文件,然后将以下代码添加到该文件中,并将 my-bucket-name 替换为您创建的存储桶的名称。您可以使用自己喜欢的任一命令行编辑器(例如 nano、vim、emacs)创建该文件,也可以点击铅笔图标在 Cloud Shell 中打开代码编辑器:

- 将以下代码添加到
ocr-request.json 文件中:
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://my-bucket-name/sign.jpg"
}
},
"features": [
{
"type": "TEXT_DETECTION",
"maxResults": 10
}
]
}
]
}
您将使用 Cloud Vision API 的 TEXT_DETECTION 功能。它会对图片执行光学字符识别 (OCR),以提取文本。
任务 4. 调用文本检测方法
- 在 Cloud Shell 中,使用
curl 调用 Cloud Vision API:
curl -s -X POST -H "Content-Type: application/json" --data-binary @ocr-request.json https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}
第一部分响应结果应如下所示:
{
"responses": [
{
"textAnnotations": [
{
"locale": "fr",
"description": "LE BIEN PUBLIC\nles dépêches\nPour Obama,\nla moutarde\nest\nde Dijon\n",
"boundingPoly": {
"vertices": [
{
"x": 138,
"y": 40
},
{
"x": 622,
"y": 40
},
{
"x": 622,
"y": 795
},
{
"x": 138,
"y": 795
}
]
}
},
{
"description": "LE",
"boundingPoly": {
"vertices": [
{
"x": 138,
"y": 99
},
{
"x": 274,
"y": 82
},
{
"x": 283,
"y": 157
},
{
"x": 147,
"y": 173
}
]
}
},
{
"description": "BIEN",
"boundingPoly": {
"vertices": [
{
"x": 291,
"y": 79
},
{
"x": 413,
"y": 64
},
{
"x": 422,
"y": 139
},
{
"x": 300,
"y": 154
}
]
}
...
]
}]
}
OCR 方法能够从图片中提取大量文本。
从 textAnnotations 返回的第一块数据是 API 在图片中找到的整个文本块。其中包括:
- 语言代码(在本例中,fr 代表法语)
- 文本字符串
- 边界框,指示文本在图片中的位置
后面是文本中每个单词所对应的对象,以及该特定单词的边界框。
注意:对于文本较多的图片,Cloud Vision API 还提供 DOCUMENT_TEXT_DETECTION 功能。这种响应结果包含更多信息,并将文本分解为页面、文本块、段落和单词。
如果您不懂法语,可能不知道这段文本的意思。所以下一步就是翻译。
- 运行以下
curl 命令,将响应结果保存到 ocr-response.json 文件,以便稍后引用:
curl -s -X POST -H "Content-Type: application/json" --data-binary @ocr-request.json https://vision.googleapis.com/v1/images:annotate?key=${API_KEY} -o ocr-response.json
任务 5. 将图片中的文本发送到 Translation API
Translation API 可以将文本翻译成 100 多种语言。它还可以检测输入文本的语言。如需将法语文本翻译成英语,请将文本和目标语言的语言代码 (en-US) 传递给 Translation API。
- 首先,创建一个
translation-request.json 文件,并向其中添加以下代码:
{
"q": "your_text_here",
"target": "en"
}
q 是传递待翻译字符串的位置。
-
保存文件。
-
在 Cloud Shell 中运行以下 Bash 命令,提取上一步中的图片文本,并将其复制到新的 translation-request.json 文件中(全部用一个命令完成):
STR=$(jq .responses[0].textAnnotations[0].description ocr-response.json) && STR="${STR//\"}" && sed -i "s|your_text_here|$STR|g" translation-request.json
- 现在,您可以调用 Translation API 了。此命令还会将响应结果复制到
translation-response.json 文件中:
curl -s -X POST -H "Content-Type: application/json" --data-binary @translation-request.json https://translation.googleapis.com/language/translate/v2?key=${API_KEY} -o translation-response.json
- 运行以下命令,检查包含 Translation API 响应结果的文件:
cat translation-response.json
现在,您可以看懂标牌上的内容了!
{
"data": {
"translations": [
{
"translatedText": "TO THE PUBLIC GOOD the dispatches For Obama, the mustard is from Dijon",
"detectedSourceLanguage": "fr"
}
]
}
}
在响应结果中:
-
translatedText 包含翻译结果
-
detectedSourceLanguage 是 fr,即法语的 ISO 语言代码。
Translation API 支持 100 多种语言,所有这些语言已在语言支持参考文档中列出。
除了翻译图片中的文本,您可能还想对这些文本进行进一步的分析。此时就要用到 Natural Language API 了。进入下一步!
任务 6. 使用 Natural Language API 分析图片文本
Natural Language API 可提取实体、分析情感和语法并对文本进行分类,从而帮助您理解文本。使用 analyzeEntities 方法,查看 Natural Language API 可从图片文本中找到的实体。
- 若要设置 API 请求,请创建包含以下代码的
nl-request.json 文件:
{
"document":{
"type":"PLAIN_TEXT",
"content":"your_text_here"
},
"encodingType":"UTF8"
}
在请求中,将所发送文本的相关信息传达给 Natural Language API:
-
type:支持的类型值为 PLAIN_TEXT 或 HTML。
-
content:将要发送的文本传递给 Natural Language API 进行分析。Natural Language API 还支持发送存储在 Cloud Storage 中的文件以进行文本处理。若要发送 Cloud Storage 中的文件,请将 content 替换为 gcsContentUri,并使用 Cloud Storage 中该文本文件的 URI 值。
-
encodingType:告知 API 在处理文本时要使用哪种类型的文本编码。API 将使用它计算特定实体在文本中的位置。
- 在 Cloud Shell 中运行以下 Bash 命令,将翻译后的文本复制到 Natural Language API 请求的内容块中:
STR=$(jq .data.translations[0].translatedText translation-response.json) && STR="${STR//\"}" && sed -i "s|your_text_here|$STR|g" nl-request.json
nl-request.json 文件现在包含原始图片文本经翻译后的英语文本。接下来就是分析了!
- 使用以下
curl 请求调用 Natural Language API 的 analyzeEntities 端点:
curl "https://language.googleapis.com/v1/documents:analyzeEntities?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @nl-request.json
如果滚动浏览响应结果,您可以看到 Natural Language API 找到的实体:
{
"entities": [
{
"name": "dispatches",
"type": "OTHER",
"metadata": {},
"salience": 0.3560996,
"mentions": [
{
"text": {
"content": "dispatches",
"beginOffset": 23
},
"type": "COMMON"
}
]
},
{
"name": "mustard",
"type": "OTHER",
"metadata": {},
"salience": 0.2878307,
"mentions": [
{
"text": {
"content": "mustard",
"beginOffset": 38
},
"type": "COMMON"
}
]
},
{
"name": "Obama",
"type": "PERSON",
"metadata": {
"mid": "/m/02mjmr",
"wikipedia_url": "https://en.wikipedia.org/wiki/Barack_Obama"
},
"salience": 0.16260329,
"mentions": [
{
"text": {
"content": "Obama",
"beginOffset": 31
},
"type": "PROPER"
}
]
},
{
"name": "Dijon",
"type": "LOCATION",
"metadata": {
"mid": "/m/0pbhz",
"wikipedia_url": "https://en.wikipedia.org/wiki/Dijon"
},
"salience": 0.08129317,
"mentions": [
{
"text": {
"content": "Dijon",
"beginOffset": 54
},
"type": "PROPER"
}
]
}
],
"language": "en"
}
如果实体有维基百科页面,API 会提供元数据,包括该页面的网址以及实体的 mid。mid 是在 Google 知识图谱中映射到该实体的一个 ID。如需了解有关实体的更多信息,您可以调用 Knowledge Graph API 并将此 ID 传递给它。对于所有实体,Natural Language API 都会提供它在文本中出现的位置 (mentions)、实体的 type 和 salience(范围是 [0,1],指示实体对文本整体的重要性)。除了英语,Natural Language API 还支持语言支持参考文档中列出的其他语言。
从这张图片中,我们可以相对轻松地挑选出重要的实体,但如果您的图库中有数千张图片,这项工作就会非常艰巨。OCR、翻译和自然语言处理可以帮助您从大型图片数据集中提取有意义的信息。
点击检查我的进度以验证您已完成的任务。
使用 Natural Language API 分析图片文本
恭喜!
您学习了如何结合使用 3 种不同的机器学习 API:用 Vision API 的 OCR 方法从图片中提取了文本,然后用 Translation API 将该文本翻译成了英语,还用 Natural Language API 查找了文本中的实体。您可以结合使用这些 API 从大型图片数据集中提取有意义的信息。
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 10 月 22 日
上次测试实验的时间:2024 年 10 月 22 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。