前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【云原生】在 React Native 中使用 AWS Textract 实现文本提取

【云原生】在 React Native 中使用 AWS Textract 实现文本提取

作者头像
前端修罗场
发布于 2023-10-07 11:27:05
发布于 2023-10-07 11:27:05
34900
代码可运行
举报
文章被收录于专栏:Web 技术Web 技术
运行总次数:0
代码可运行

Amazon Textract 是 Amazon 推出的一项机器学习服务,可将扫描文档、PDF 和图像中的文本、手写文字提取到文本文档中,然后可以将其存储在任何类型的存储服务中,例如 DynamoDB、s3 等。

今天我将介绍从 React Native 移动应用程序中捕获或选择图像并将这些图像上传到 S3 的过程,然后一旦我们使用 API Gateway 触发 lambda 函数,就会从这些图像中提取数据,然后在处理完数据后我们 会将这些数据作为 DynamoDB 记录插入。大致的过程如下图所示:

在开始实战前,我假设你对AWS 的 lambda 函数 和 API Gateway 已经了解了。同时,请准备好如下实战环境:

  • npm or yarn
  • react-native > 0.59
  • aws-amplify
  • nodejs
  • aws-sdk

我会将内容分为 2 部分来讲解:

  1. 前端
  2. 后端

前端

在本节中,我们将处理我们在移动应用程序中捕获的图像,并将图像上传到 S3 中,以便我们的后端从这些图像中提取数据。首先,我们将从安装开始:

  • 安装 aws-amplify,它会用在 React Native 中。 在命令行中执行如下命令: npm install aws-amplify 或使用 npm install @aws-amplify/api @aws-amplify/core @aws-amplify/storage 因为我们不需要所有的 aws-amplify 库。
  • 安装 react-native-image-picker : 它能从设备库或相机中选择照片。 执行如下命令: npm install react-native-image-picker

接下来,我们将从实现两个函数开始,一个是用户从库中选择图像,一个是从相机中选择图像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {launchCamera, launchImageLibrary} from 'react-native-image-picker';

const options = {
  mediaType: 'photo',
  quality: 0.5,
  includeBase64: true,
};
// 从库中选择图像
const libraryPickerHandler = () => {
    launchImageLibrary(options, async (response) => {
      if (response.didCancel) {
        console.log('用户取消了图像选择');
      } else if (response.errorMessage) {
        console.log('ImagePicker Error: ', response.errorMessage);
      } else {
        await onImageSelect(response?.assets[0].uri);
      }
    });
  };
// 从相机中提取图像
  const cameraPickerHandler = async () => {
    launchCamera(options, async (response) => {
      if (response.didCancel) {
        console.log('用户取消了图像选择');
      } else if (response.errorMessage) {
        console.log('ImagePicker Error: ', response.errorMessage);
      } else {
        await onImageSelect(response?.assets[0].uri);
      }
    });
  };

onImageSelect 函数将处理图像上传到 S3,并将 S3 密钥发送到我们将在后端部分开发的 API 端点 /textract-scan

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Storage from '@aws-amplify/storage';
import API from '@aws-amplify/api';
// or
import { Storage, API } from 'aws-amplify';

const onImageSelect = async (uri: string) => {
  let imageResponse = await fetch(uri);
  const blob = await imageResponse.blob();

  // timestamp for random image names
  let naming = `{new Date().getTime()}.jpeg`;

  const s3Response = await Storage.put(naming, blob, {
    contentType: 'image/jpeg',
    level: 'protected',
  });

 await API.post('your-endpoint-name', '/main/textract-scan', {
    body: {
      imageKey: s3Response.key,
    },
  });
};

目前,前端部分就完成了。接下来,看后端部分。

后端

在本节中,我们将处理从将用 nodejs 编写的图像中提取数据。首先安装如下依赖:

  • aws-sdk,它使你能够轻松地使用 Amazon Web Services。执行如下命令: npm install aws-sdk or yarn add aws-sdk

我们将创建一个名为 textract.ts 的文件,其中将包含名为 textractScanlambda 函数。textractScan 将是我们的主要函数,它将被前端通过指定的 api 调用。该函数将是一个 post 方法,它将在 body 中获取一个 imageKey 属性。 此 imageKey 表示指定 Bucket 中的 S3 对象键。

你需要将其添加到功能块内的 serverless.yml 文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextractScanLambda:
  handler: path-to-your-file/textract.textractScan
  events:
    - http:
        method: post
        path: main/textract-scan
        authorizer: aws_iam

现在在 textract.ts 文件中,我们开始实现 lambda 函数。让我们首先编写 Textract 函数来分析我们将在 lambda 函数中使用的 Text:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Textract } from 'aws-sdk';

const analyzeText = async(key: string) => {
  const payload = {
      Document: {
        S3Object: {
          //the bucket where you uploaded your images
          Bucket: 'BUCKET_NAME',
          Name: key,
        },
      },
    };

    return new Textract().detectDocumentText(payload);
}

现在我们开始编写我们的 lambda 函数 textractScan:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const textractScan = async (event: AWSLambda.APIGatewayProxyEvent) => {
  try {
    console.log(event);
    const body = JSON.parse(event.body);

    const { imageKey } = body;

    const analyzeTextResult = await analyzeText(imageKey);
  } catch (e) {
    console.log(e);
    return {
      statusCode: 500,
      body: JSON.stringify({ message: 'ERROR_ANALYZING_DOCUMENT' }),
    };
  }
};

现在我们完成了该功能,我们可以使用它从图像中提取文本。 analyzeTextResult 中的结果将包含一个对象数组,其中包含在文档中检测到的文本,但是从该对象中提取我们需要的实际数据将非常耗时。

这就是创建 aws-textract-json-parser 的原因,该库将来自 AWS Textract 的 json 响应解析为更可用的格式,然后你可以将其插入 DynamoDB:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { DynamoDB } from 'aws-sdk';

const textractScan = async (event: AWSLambda.APIGatewayProxyEvent) => {
  try {
    console.log(event);
    const body = JSON.parse(event.body);

    const { imageKey } = body;

    const analyzeTextResult = await analyzeText(imageKey);
    const parsedData = await AWSJsonParser(analyzeTextResult);
    console.info(parsedData);
    const rawData = parsedData.getRawData();
    console.info(data);
      if (data.length === 0) {
        console.error('no text detected');
 return {
      statusCode: 400,
      body: JSON.stringify({ message: 'INVALID_DOCUMENT' }),
    };
      }
    const payload = {
     ...someData,
     textractData: rawData
    }
    new DynamoDB.DocumentClient(payload).put;

    ....

  } catch (e) {
    console.log(e);
    return {
      statusCode: 500,
      body: JSON.stringify({ message: 'ERROR_ANALYZING_DOCUMENT' }),
    };
  }
};

现在,你可以实现许多需要用户拍照的场景,并通过简单的步骤提取数据并将其与他的个人资料相关联。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【云原生】给我 10 分钟,带你上手一个 AWS serverless web server
serverless 最流行的应用场景之一是部署和运行带有路由的 Web 服务器。 在本文中,我将向你展示如何在几分钟内启动并运行 AWS Lambda、Amazon API Gateway 和 AWS Amplify。
前端修罗场
2023/10/07
4060
【云原生】给我 10 分钟,带你上手一个 AWS serverless web server
Serverless|Framework——图文玩转 AWS Lambda
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand i
用户4172423
2020/10/23
2.5K0
Serverless|Framework——图文玩转 AWS Lambda
具有EC2自动训练的无服务器TensorFlow工作流程
机器学习训练工作通常是时间和资源密集型的,因此将这一过程整合到实时自动化工作流程中可能会面临挑战。
代码医生工作室
2019/10/15
12.6K0
具有EC2自动训练的无服务器TensorFlow工作流程
深入理解Serverless架构:构建无服务器应用的完全指南
Serverless架构是一种现代化的云计算范式,它允许开发者构建应用程序而无需管理服务器基础架构。本文将深入探讨Serverless架构的关键概念,为您提供一份全面的指南,并提供带有实际代码示例的技巧,以帮助您构建出色的无服务器应用。
海拥
2023/09/19
1.1K0
深入理解Serverless架构:构建无服务器应用的完全指南
构建AWS Lambda触发器:文件上传至S3后自动执行操作的完整指南"
在本篇文章中,我们将学习如何设计一个架构,通过该架构我们可以将文件上传到AWS S3,并在文件成功上传后触发一个Lambda函数。
泽霖
2024/02/08
4220
React Native 使用react-native-image-picker库实现图片上传功能
react-native-image-picker作为一个集成相机和相册的功能的第三方库,因为其使用相对简单受到前端开发人员的喜爱。 react-native-image-picker使用 1, 首先,安装下该插件。 npm install react-native-image-picker@latest --save 2, 针对Android和iOS平台分别进行配置 ## android 平台配置 1,在android/settings.gradle文件中添加如下代码: include ':react-n
xiangzhihong
2018/02/06
5.6K0
React Native 使用react-native-image-picker库实现图片上传功能
COS SDK有Flutter和React Native版本啦
对象存储COS简介 对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。腾讯云 COS 使所有用户都能使用具备高扩展性、低成本、可靠和安全的数据存储服务。 COS 通过控制台、API、SDK 和工具等多样化方式简单、快速地接入,实现了海量数据存储和管理。通过 COS 可以进行任意格式文件的上传、下载和管理。腾讯云提供了直观的 Web 管理界面,同时遍布全国范围的 CDN 节点可以对文件下载进行加速。 导语 Flu
云存储
2023/05/18
8470
COS SDK有Flutter和React Native版本啦
云开发:构建强大应用的云原生开发指南
云开发是一种基于云原生架构的开发方法,它允许开发者构建应用程序,利用云服务的强大功能,如存储、数据库、身份验证和部署,无需管理底层基础架构。本文将深入探讨云开发的关键概念,为您提供一份全面的指南,并提供带有实际代码示例的技巧,以帮助您构建出色的云原生应用。
海拥
2023/09/19
4400
云开发:构建强大应用的云原生开发指南
React Native最佳实践指北
对于这个题目,我是很抗拒的,想了怎么写之后,大概有一个思路,准备使用React Natvie做一个与AI 大模型对话的App,为什么是React Native,因为我对Flutter 太过于熟悉了,以至于我觉得使用 flutter来写一个实在没有什么挑战,而我又对ReactNative基本没有怎么使用过,不来点挑战点的,似乎不能体现出我装逼的潜质,也恰好算作最佳实践指北吧。
老码小张
2024/01/28
7602
React Native最佳实践指北
React Native推送通知:完整的操作指南
推送通知已成为构建移动应用时需要考虑的重要功能。由于它们类似于短信,但发送不需要任何费用,许多企业现在更喜欢使用推送通知向应用用户发送信息和警报。
前端小智@大迁世界
2024/02/21
1.7K0
React Native推送通知:完整的操作指南
分布式系统开发实战:实战,使用AWS平台实现Serverless架构
·全球所有玩家的持久化信息(包括用户基本信息、等级、装备、进度等状态信息)都保存在中心站点。玩家统一通过HTTP(S)登录中心站点并获取状态信息。
IT大咖说
2021/06/15
1.8K0
分布式系统开发实战:实战,使用AWS平台实现Serverless架构
2025年你需要了解的5个JavaScript技术趋势
2025 年的 JavaScript 将在无服务器架构、与 WebAssembly 集成、微前端的采用等方面取得进展。
云云众生s
2025/01/11
1650
React Native网络请求
很多移动应用都需要从远程地址中获取数据或资源。你可能需要给某个REST API发起POST请求以提交用户数据,又或者可能仅仅需要从某个服务器上获取一些静态内容——以下就是你会用到的东西。新手可以对照这个简短的视频教程加深理解。 使用Fetch React Native提供了和web标准一致的Fetch API,用于满足开发者访问网络的需求。如果你之前使用过XMLHttpRequest(即俗称的ajax)或是其他的网络API,那么Fetch用起来将会相当容易上手。这篇文档只会列出Fetch的基本用法,并不会讲
xiangzhihong
2018/02/05
2.1K0
搬运向 | 浅析serverless架构与实践
Serverless ,不是没有server,而是不用去担心维护server 这件事, 不管是在部署还是开发,都是以一个个function 为单位, 这带来了程式码上的高度decoupling,但同时
Rainbond开源
2018/05/31
2.5K0
React 文件上传组件 File Upload
文件上传是 Web 应用中常见的功能之一,无论是图片、文档还是其他类型的文件,都需要一个可靠的文件上传组件来实现这一功能。React 作为目前最流行的前端框架之一,提供了丰富的生态系统和工具来帮助开发者构建高效的文件上传组件。本文将从浅入深地介绍如何在 React 中实现文件上传组件,包括常见的问题、易错点以及如何避免这些问题。
Jimaks
2024/11/27
2660
[ 后端篇 ] 05 - AWS DynamoDB 入门教程
DynamoDB 属于AWS 专有的 NoSQL 数据库服务。其实和Mongod类似。
程序手艺人
2019/03/15
3.7K0
react-native集成微信分享记录
关于微信分享,主要用到了这两个库 react-native-wechat-lib react-native-wechat
w候人兮猗
2020/07/01
1.1K1
react-native集成微信分享记录
react-native集成微信分享记录
去微信官方网址https://open.weixin.qq.com/,注册移动应用,填写相关信息,获取到相关到key
w候人兮猗
2020/06/24
2.4K0
react-native 开发笔记 (三)
react native默认编译配置可以编译一部分es7语法的,async await是其中的一种。使用起来自然是很简单,和koa 1.x 基本一致,没有区别。
frontoldman
2019/09/02
6760
2024年11月最新版微信小程序支付功能,使用小程序云开发10行代码实现小程序支付功能(含源码和步骤)
我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。
编程小石头
2024/11/14
1300
推荐阅读
相关推荐
【云原生】给我 10 分钟,带你上手一个 AWS serverless web server
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文