这是一个简单的演示,使用 GoogleCloud Functions 和 Flows 来对在 Telegram 上发送的图像进行图像识别。
Flows 及其扩展
作为 Flows 的开发者,我常常考虑我们的用户是谁,他们为何使用 Flows,以及他们需要什么来实现他们的目标;然后,我们需要实施哪些功能来更好地服务这些用户。
Flows 是一个强大的拖放自动化引擎,用于创建通信流程。我们最初将它构思为一个无代码解决方案,但我们发现许多用户可以通过为特定用例编写一些代码来实现非常强大的行为。 这些代码片段可以在 Flows 内部,也可以是像 AWS Lambda 函数或 Google Cloud Functions 这样的第三方云函数。
一个有趣的用例:图像识别
通过一个简短而有趣的例子,我将向你展示如何实现一个识别热狗的应用。我们将在 Flows 中设置一个流程,它将接收用户发送的图像并判断他们是否发送了热狗。
对于我们的许多客户来说,这种图像识别可能非常强大。想象一下,你经营一个快递服务,你希望自动验证成功的快递派送。类似于我将要展示的,你可以使用位置信息、包裹照片,甚至收件人签名来在 Flows 中创建一个验证流程。
成功的计划
首先,我们将设置一个云函数,它接收一个带有图像 URL 的请求,然后使用图像识别 API 来处理该图像,并回复该图像中是否有热狗。
然后我们将构建一个流程,该流程通过消息通道(在此情况下为 Telegram)接收用户的消息,执行上述云函数,并回复用户他发送的图片中是否有热狗。
设置 Google Cloud Function
首先, 我们需要设置一个云函数。要快速开始,请使用此教程创建一个云函数: https://cloud.google.com/functions/docs/quickstart-console。选择 “触发器” 时选择 HTTP 触发器,执行环境:Node.js 10,并在源代码字段插入 代码片段。这是简单的代码,用于检查请求是否包含 JSON 代码并回答是或否。
接下来,你需要部署这个函数。要在 Google Cloud Platform 内进行测试,请按照教程中的步骤执行。
要通过浏览器进行测试,请访问以下 URL,插入你的函数的特定地址:
https://your-function-address.cloudfunctions.net/HotDogOrNot/?url=hello 应该返回 {"isHotDog": true},而地址 https://your-function-address.cloudfunctions.net/HotDogOrNot 应该返回 {"isHotDog": false}.
干得好!你设置了一个 Google Cloud 函数。现在我们需要让我们的云函数更智能。
设置 Google Vision API
要使它更智能,让我们添加图像识别。为此,我们将使用 Google Vision API。要开始,请遵循此教程的第 1-4 步: https://cloud.google.com/vision/docs/quickstart-client-libraries。在教程中,你将激活 Vision API,并创建一个服务账户以使用它。
现在返回到你创建的云函数。切换到 “环境变量、网络、超时等” 并在 “服务账户” 文件中选择你刚刚创建的 VisionAPI 服务账户。现在我们可以在函数内部访问 Vision API。
现在让我们更改代码。在 “Package.json” 标签上,插入 这段代码。它将 Google Vision API 库作为依赖项添加到你的函数中,在 "Index.js" 标签上用 以下代码片段 更新现有代码。
与前一个版本相比有什么不同?我们添加了对 VisionAPI 的请求,它返回图像上发现的 ‘标签’。 然后,我们通过描述过滤这些标签:如果它包含“热狗”,并且如果它在该标签上的置信度大于 60%。如果在过滤后仍然剩下至少 1 个标签,那就意味着我们在图像上找到了一个热狗。
要了解 Google VisionAPI 是如何工作的以及响应的样子,请查看他们的文档 https://cloud.google.com/vision/docs
之后,部署我们函数的新版本。要通过浏览器测试它,找到任何热狗的图像并保存其 URL。现在,转到你的函数的 URL(插入函数的正确地址) https://your-function-address.cloudfunctions.net/HotDogOrNot?url=url_to_image 并将 “url_to_image” 替换为找到的图像的 URL。如果图像中有热狗,页面将返回 {"isHotDog": true}。
现在让我们将这个函数连接到 Flow Builder。
在 Flows 中创建一个流程
登录 Bird Dashboard,如果没有帐户,请 注册一个帐户。
如果你是 Flows 的新手,并且没有任何已设置的频道,你需要访问频道设置页面,并选择设置 Telegram 频道。由于设置方便快速,我选择了 Telegram 作为本次演示。
现在你有一个可以在 Flows 中使用的频道。前往 Flows 页面,创建一个新的自定义流程,并选择“Telegram”频道触发器。
你将被重定向到一个流程页面,在那里你应该选择你的 Telegram 频道作为触发器,在我们的案例中是“热狗”。请添加 2 个步骤:“获取变量”和“回复频道消息”。
在“获取变量”步骤中,我们将调用我们的云函数并将响应检索到变量 “isHotDog” 中,该变量将包含来自 GoogleCloud 函数的“真”或“假”响应。在 URL 字段中,请插入指向你的函数的 URL https://your-function-address.cloudfunctions.net/HotDogOrNot,并按照“获取变量步骤内容”图片填写所有其他字段。
在“回复频道消息”步骤中,我们将以包含是或否响应的消息回应客户。为此,在“回复消息”字段中插入以下文本“图像上有热狗吗? {{isHotDog}}”。
如果你在构建流程时遇到任何问题,可以从文件导出它: simple-hotdog-flow.json。
要测试,向你的 Telegram 机器人发送图像。
到目前为止,它看起来很酷!我们创建了一个小型聊天机器人,该机器人检查客户发送的图像。为了使其更美观,让我们添加一些更多步骤,如下所示:
如果你在构建流程时遇到任何问题,可以从文件导出它: advanced-hotdog-flow.json。
结果
虽然这是一个有趣的示例,但我们相信这种功能对我们的用户非常有用。
如果你希望在 Flows 中内置更多此类功能,请联系支持团队告知我们。