dot Redis 8 来了——而且是开源的

了解更多

如何使用 Redis 创建强大的无人机系统,以保护作物保险公司免受虚假索赔

面对气候变化,作物保险公司面临着一系列全新的问题。缺乏评估可耕地和产量的相关数据一直是个问题,而准确评估作物损失也被证明几乎是不可能完成的任务。 

更糟糕的是,作物的偏远位置可能会阻止保险公司找到专家来进行检查和风险评估。这些都会对保险公司的成本和时间产生影响。 

但是,无人机的能力正迅速被认为是解决这些问题的方案。 

Launchpad 应用 演示了如何通过创建一个互连的无人机系统来实现这一点,该系统使用 Redis 在组件之间传输数据。Redis 将每个组件拉得更近,从而能够实时传输大量数据。 

借助这项资产,无人机能够飞越田地,拍摄作物图像,然后将它们发送回在线门户进行评估。创建了一个演示来说明如何实现这一点。 

让我们来研究一下该团队是如何实现这一目标的。但在我们深入探讨之前,我们还有各种不同的应用程序供您探索,因此请务必在 Launchpad 上查看它们。  

https://www.youtube.com/embed/HDlO-rv-0AQ

目录

  1. 您将构建什么?
  2. 您需要什么?
  3. 架构
  4. 它是如何工作的?
  5. 开始使用
  6. 如何设置后端
  7. 如何设置前端
  8. 结论

1. 您将构建什么?

您将构建一个无人机系统,该系统使用 Redis 和云技术,以快速捕获农村地区作物的准确数据。作物保险公司可以利用这项资产来创建更安全的保险单,同时在 索赔流程 中最大限度地提高透明度。 

我们将探讨他们是如何将所有这些不同的组件结合在一起,使其彼此和谐地工作。 

2. 您需要什么?

开发

  • Next.JS: 启用基于 React 的 Web 应用程序的功能,例如服务器端渲染和生成静态网站(门户)
  • Python: 用作首选编程语言
  • Java/Spring Boot: 用于构建处理所有客户相关查询、策略和索赔相关 API 的微服务 

云和服务

  • Azure 云: 将分析后的图像存储到 Azure Blob Storage
  • RedisGears: 用于监听图像流
  • RedisAI: 执行深度学习/机器学习模型来管理数据
  • Redis Streams: 当用户在前端触发检查时启动无人机
  • RedisTimeSeries: 提供时间序列数据
  • Docker 容器: 使用 RedisAI、Tensorflow 和自定义视觉服务处理和分析图像。 
  • Microsoft Airsim: 无人机模拟器
  • Custom Vision Service: 创建自定义计算机视觉模型
  • Customer-Service: 处理所有客户相关查询
  • Policy-Service: 处理策略和索赔相关 API
  • Inspection-Service: 包含与检查相关的所有 API

3. 架构

4. 它是如何工作的?

现在让我们来看看架构。为了简化,我们将其分解为 4 个部分。 

门户

  • 为作物保险公司创建了一个门户,他们可以在其中完成客户的注册以及他们的保单和理赔结算。保险公司可以从此门户实时扫描其客户的土地。 
  • 用户点击实时检查后,将生成一个唯一的 ID 并通过 Redis Streams 传递。
  • 无人机应用程序容器接收到此消息,并将其发送到无人机,然后无人机起飞。

AirSim

  • 虚拟土地(见上图)是使用 AirSims 模拟器创建的,该模拟器塑造了虚拟作物。
  • 无人机将飞越土地以捕获作物图像,这些图像通过 Redis Streams 实时传输到 Redis。

自定义视觉

  • 使用 Microsoft 自定义视觉 服务创建了一个预训练模型,该模型可以识别图像中的不同类型的对象,例如高作物土地、低作物土地、肥沃土地等。
  • Tensorflow 模型传递到 Redis,Redis AI 将从无人机获取原始图像,并将所有图像转换为建模图像。 
  • 这些建模图像存储在 Azure Blob 存储中。Redis Streams 用于将这些图像传输到前端应用程序,该应用程序将显示此检查的所有数据。
  • 无人机完成作物扫描后,数据将使用微服务架构发送到后端系统

微服务架构

  • 微服务架构分为 3 个不同的容器:客户 API、检查 API 和策略 API 
  • 此微服务架构建立在使用 Redis、RediSearch 和 RedisJSON 的 Java Spring Boot 框架上。 
  • 后端 API 将检查所有数据。基于这些数据,将计算出保险金额和保费,并将其传递到前端应用程序。从这里,保险公司和农民可以商定新的保险单。 

借助这款产品,保险公司可以实时进行作物检查,并在他/她的办公室制定保险单。 

开始使用

第 1 步. 克隆项目存储库

git clone https://github.com/redis-developer/CropInsurRedis 

如果您查看源代码存储库,整个项目分为 3 个主要部分

  • Redis_Airsim
    • 用于加载 Redis 模块的 RedisMod
    • 使用 RedisAI 进行图像建模
    • 使用 RedisGears 进行流注册
    • 使用 Unreal Engine 对象创建虚拟农场的模块
    • Azure blob 存储集成
  • 前端
    • 前端应用程序代码
    • 与 Redis 流集成
    • 与微服务集成
  • 微服务
    • 微服务代码 - Java Spring Boot 框架

第 2 步. 检查 Airsim 模拟器

Redis 模块、RedisGears、RediStreams 和 RedisAI 都部署在此项目中。它们都用于分析无人机实时捕获的土地图像,以及使用 Tensorflow、Microsoft Custom Vision 和 RedisAI 计算这些图像中不同类别的百分比。

要连接到 AirSim 模拟器,只需使用下面的基于 Python 的代码。这还允许您设置坐标,这些坐标将确定您的无人机在飞行过程中将遵循的路径。 

import airsimimport argparsefrom flyDroneService import FlyDroneServiceimport time
if __name__ == '__main__':
    parser = argparse.ArgumentParser()    parser.add_argument('-u', '--level', help='Game Level', type=int, default=1)    args = parser.parse_args()        # connect to the AirSim simulator    client = airsim.MultirotorClient()    FlyDroneService.initializeAirSimClient(client)
    gameLevel = args.level    print(gameLevel)    # set the coordinates to set up the path for drone to travel    if gameLevel == 3:        print('Level 3')        client.simEnableWeather(True)        FlyDroneService.setFlyingCoordsForDroneAtThirdLevel(client)    elif gameLevel == 2:        print('Level 2')        client.simEnableWeather(True)        FlyDroneService.setFlyingCoordsForDroneAtSecondLevel(client)    else:        print('Level 1')        client.simEnableWeather(True)        client.simSetWeatherParameter(airsim.WeatherParameter.Rain, 1)        FlyDroneService.setFlyingCoordsForDroneAtFirstLevel(client)            #stop and return the simulator to initial state    FlyDroneService.resetAirSimClient(client)

第 3 步. 安装所需的软件

在执行 Python 脚本之前,您应该安装下面讨论的必备软件。

  • Docker
  • Docker-Compose
  • UnReal Engine(>= 4.24)
  • Python(>=3.6)

您可以通过 使用此链接 在您的环境中安装 Docker。此外,请确保您的系统中安装了 Docker compose。 

第 4 步. 设置 Unreal Engine

Unreal Engine 是世界上最开放和最先进的实时 3D 创建工具。此时,您需要 在您的本地机器上设置 Unreal Engine 以模拟无人机在虚拟田地上的飞行。

以下是设置 Unreal Engine 的硬件要求: 

  • 操作系统:Windows 10 64 位
  • 显卡/DirectX 版本:DirectX 11 或 DirectX 12 或 NVIDIA 兼容显卡
  • RAM:32 GB

一旦在您的本地环境中设置了 Unreal Engine,您需要从 Google Drive 下载该文件夹。它包括无人机将飞越的不同景观的地图。由于其文件很大,我们已将该文件夹放在 Google Drive 中。 

下载该文件夹后,您需要双击“FinalProjDroneSquad”文件,如下所示

Output

这将在 Unreal Editor 上启动景观,如下所示

Output

单击下面突出显示的“播放”按钮以开始第 1 关。

Output

要更改游戏的级别,首先导航到 Content -> Maps 文件夹。双击 Level 2/Level 3 文件,如下所示,然后单击播放按钮。

Output

之后,您可以继续安装部分以设置其他先决条件。

 

第 6 步. 安装依赖项

cd airsim

pip install -r requirements.txt

从该项目的根文件夹中,运行以下 docker 命令

docker-compose up

您可以从上面的 docker-compose 文件中看到,该项目结合了几个 Redis 模块,例如 RedisGears、RediStreams 和 RedisAI。这些都用于分析无人机实时捕获的土地图像,以及使用 Tensorflow、Microsoft Custom Vision 和 RedisAI 计算这些图像中不同类别的百分比。 

本质上,这将在此项目中在您的机器上创建两个容器

  • Redis 容器:托管 RedisAI、Redismod 和 RedisGears
  • 无人机应用程序容器:在 RedisAI 上初始化模型并使用 RedisGears 注册流。它将处于退出状态。

最后,我们需要创建 Blob 存储帐户,以存储使用 RedisAI 生成的分析图像。 为此,请在 Blob 存储中创建一个名为 ‘droneimages’ 的容器。 

cd redisedge\secrets

从 Azure Blob 存储帐户复制连接字符串,并将其粘贴到文件夹内的 ‘azureblobsecret’ 文件中。

步骤 7. 运行演示

打开你喜欢的终端并运行以下命令。

在第一个选项卡上运行以下命令,并将 level 参数更改为 1、2 和 3,以便启动不同级别的游戏。  

python flyDrone.py –level=1

这将初始化无人机并将其置于“等待起飞”模式。

在第二个选项卡上运行以下命令。 这将监听 Redis Streams 执行的检查。 每当触发检查时,都会从前端输入数据。 

python captureImagesFromDrone.py –level=1

一旦数据到达 Redis Streams,无人机将起飞并开始捕获图像。 然后,RedisAI 使用 Tensorflow 处理和分析这些图像。

注意:如前所述,更改 Unreal Editor 上的游戏级别后,再次在不同的终端上运行上述两个脚本,并关闭现有的脚本。

输出

以下是 RedisAI 生成的输出图像。

具有其他类别的耕地高质量和低质量类别
OutputOutput


贫瘠土地类别
其他类别
OutputOutput

6. 如何设置后端

后端系统使用微服务构建,这些微服务分为不同的实体,例如: 

  • Customer-Service:处理所有与客户相关的查询
  • Policy-Service:处理与策略和索赔相关的 API
  • Inspection-Service:包含所有与检查相关的 API

这些微服务使用 Java Spring Boot 框架构建,后者又使用 Redis、RedisJSON 和 RediSearch。 后端 API 将执行所有数据检查。 基于这些数据,计算出保额和保费,并传递到前端应用程序。

7. 如何设置前端

让我们检查一下代码,这将帮助你创建一个可由作物保险公司访问的公共应用程序。 

运行应用程序的步骤

注意:需要 Node Version 14+

  1. 将 repo 克隆到本地存储库。

git clone https://github.com/redis-developer/CropInsurer

  1. 使用以下命令全局安装 yarn

npm i -g yarn

  1. 运行命令

 yarn install

  1. 运行命令

 yarn start

  1. 在浏览器中打开  http://localhost:3000  以启动前端应用程序。

门户凭据

用户名:[email protected]

密码:admin

应用程序屏幕截图

以下是应用程序的屏幕截图。 

登录页面

image

客户注册页面

image

客户列表页面

image

检查页面

image

结论:利用实时数据消除障碍

通过 Redis 的高级功能,这个 Launchpad 应用程序 创建了一个强大的无人机系统,使作物保险公司能够从办公室扫描、监控和评估农作物产量质量。 然而,使该项目的雄心壮志得以实现的真正资产是 Redis 提供实时数据的能力。 

以如此快的速度将数据从 A 传输到 B,使组件能够在具有复杂架构的系统中彼此无缝协作。 作物保险公司现在可以进行准确的作物质量评估,同时确保更透明的索赔流程。 

要了解有关此创新项目的更多信息,请查看 Launchpad 上的完整应用程序。

另外,请务必浏览我们在那里提供的令人兴奋的应用程序范围。 

谁创建了这个应用程序?

Piyush Jain

Piyush 拥有超过 16 年的软件开发经验,目前在 Publicis Sapient 担任解决方案架构师。 请务必 查看他的 GitHub 个人资料,了解他所有令人兴奋的工作。