AWS Textract 및 React Native
21322 단어 nodejnpmawsreactnative
오늘은 반응 네이티브 모바일 애플리케이션에서 이미지를 캡처하거나 선택하고 이 이미지를 S3에 업로드하는 과정을 살펴보겠습니다. 그런 다음 API 게이트웨이를 사용하여 람다 기능을 트리거하면 해당 이미지에서 데이터 추출이 발생하고 데이터를 처리한 후 이 데이터를 DynamoDB 레코드로 삽입합니다.
전제 조건
In this blog I will assume you have some knowledge in developing and deploying lambda functions and API Gateway.
블로그를 크게 두 부분으로 나누겠습니다.
1. 프런트엔드 부분
이 섹션에서는 백엔드가 이러한 이미지에서 데이터를 추출하기 위해 모바일 애플리케이션에서 캡처한 이미지를 S3로 업로드하는 작업을 처리합니다.
우선 다음을 설치하여 시작하겠습니다.
aws-amplify 네이티브 반응용.
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
사용자가 라이브러리에서 이미지를 선택하는 경우와 카메라에서 하나를 선택하는 경우의 두 가지 기능을 구현하는 것으로 시작합니다.
import {launchCamera, launchImageLibrary} from 'react-native-image-picker';
//Inside your component
const options = {
mediaType: 'photo',
quality: 0.5,
includeBase64: true,
};
const libraryPickerHandler = () => {
launchImageLibrary(options, async (response) => {
if (response.didCancel) {
console.log('User cancelled image picker');
} 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('User cancelled image picker');
} else if (response.errorMessage) {
console.log('ImagePicker Error: ', response.errorMessage);
} else {
await onImageSelect(response?.assets[0].uri);
}
});
};
onImageSelect 함수는 S3에 이미지 업로드를 처리하고 백엔드 부분에서 개발할 API 엔드포인트/texttract-scan에 S3 키를 보냅니다.
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,
},
});
};
2. 백엔드 부분
이 섹션에서는 nodejs로 작성될 이미지에서 데이터 추출을 처리합니다.
다음을 설치하여 시작하겠습니다.
aws-sdk Amazon Web Services로 쉽게 작업할 수 있는 javascript용.
npm install aws-sdk
또는yarn add aws-sdk
texttractScan이라는 람다 함수를 포함하는
textract.ts
라는 파일을 생성합니다.texttractScan은 지정된 엔드포인트를 통해 프런트엔드에서 호출되는 주요 기능이 됩니다.
함수는 본문에서
imageKey
속성을 취하는 post 메서드가 됩니다. 이imageKey
는 지정된 버킷의 S3 객체 키를 나타냅니다.함수 블록 내부의 serverless.yml 파일에 이것을 추가해야 합니다.
TextractScanLambda:
handler: path-to-your-file/textract.textractScan
events:
- http:
method: post
path: main/textract-scan
authorizer: aws_iam
이제
textract.ts
파일 내에서 람다 함수 구현을 시작합니다.먼저 람다 함수에서 사용할 Texract 서비스 함수 analyzeText를 작성해 보겠습니다.
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);
}
이제 람다 함수 texttractScan 개발을 시작합니다.
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에 삽입할 수 있습니다.
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' }),
};
}
};
따라서 이제 사용자가 사진을 찍고 데이터를 추출하여 간단한 단계로 자신의 프로필과 연결해야 하는 많은 시나리오를 달성할 수 있습니다.
Reference
이 문제에 관하여(AWS Textract 및 React Native), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hadinasser/aws-textract-and-react-native-m7j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)