大家好!在本文中,我们将创建一个简单的应用程序,以使用 AWS Rekognition 和 Node.js 执行图像文本检测。
什么是 AWS Rekognition?
Amazon Rekognition 是一项服务,可让您轻松地将图像和视频分析添加到您的应用程序中。它提供文本检测、面部识别、甚至名人检测等功能。
虽然 Rekognition 可以分析存储在 S3 中的图像或视频,但在本教程中,为了简单起见,我们将不使用 S3。
我们将使用 Express 作为后端,使用 React 作为前端。
第一步
在开始之前,您需要创建一个 AWS 账户并设置一个 IAM 用户。如果您已经有了这些,您可以跳过本节。
创建 IAM 用户
配置 aws-sdk
项目目录
my-directory/ │ ├── client/ │ └── src/ │ └── App.jsx │ └── public/ │ └── package.json │ └── ... (other React project files) │ └── server/ ├── index.js └── rekognition/ └── aws.rek.js
设置前端
npm 创建 vite @latest。 -- --模板反应
它将在客户端文件夹中创建反应项目。
在 App.jsx 中
import { useState } from "react"; function App() { const [img, setImg] = useState(null); const handleImg = (e) => { setImg(e.target.files[0]); // Store the selected image in state }; const handleSubmit = (e) => { e.preventDefault(); if (!img) return; const formData = new FormData(); formData.append("img", img); console.log(formData); // Log the form data to the console }; return ( <div> <form onSubmit={handleSubmit}> <input type="file" name="img" accept="image/*" onChange={handleImg} /> <br /> <button type="submit">Submit</button> </form> </div> ); } export default App;
让我们通过确保图像在提交后记录到控制台来测试一下。
现在,让我们转到后端并开始为这个项目制作灵魂。
初始化后端
在服务器文件夹中
npm init -y
npm install express cors nodemon multer @aws-sdk/client-rekognition
我创建了一个单独的文件夹用于重新识别,以处理分析逻辑并在该文件夹内创建一个文件。
//aws.rek.js import { RekognitionClient, DetectTextCommand, } from "@aws-sdk/client-rekognition"; const client = new RekognitionClient({}); export const Reko = async (params) => { try { const command = new DetectTextCommand( { Image: { Bytes:params //we are using Bytes directly instead of S3 } } ); const response = await client.send(command); return response } catch (error) { console.log(error.message); } };
说明
创建 API
在服务器文件夹中,创建一个文件index.js 或任何你想要的名称。
//index.js import express from "express" import multer from "multer" import cors from "cors" import { Reko } from "./rekognition/aws.rek.js"; const app = express() app.use(cors()) const storage = multer.memoryStorage() const upload = multer() const texts = [] let data = [] app.post("/img", upload.single("img"), async(req,res) => { const file = req.file data = await Reko(file.buffer) data.TextDetections.map((item) => { texts.push(item.DetectedText) }) res.status(200).send(texts) }) app.listen(3000, () => { console.log("server started"); })
说明
回到前端
import axios from "axios"; import { useState } from "react"; import "./App.css"; function App() { const [img, setImg] = useState(null); const [pending, setPending] = useState(false); const [texts, setTexts] = useState([]); const handleImg = (e) => { setImg(e.target.files[0]); }; const handleSubmit = async (e) => { e.preventDefault(); if (!img) return; const formData = new FormData(); formData.append("img", img); try { setPending(true); const response = await axios.post("http://localhost:3000/img", formData); setTexts(response.data); } catch (error) { console.log("Error uploading image:", error); } finally { setPending(false); } }; return ( <div className="app-container"> <div className="form-container"> <form onSubmit={handleSubmit}> <input type="file" name="img" accept="image/*" onChange={handleImg} /> <br /> <button type="submit" disabled={pending}> {pending ? "Uploading..." : "Upload Image"} </button> </form> </div> <div className="result-container"> {pending && <h1>Loading...</h1>} {texts.length > 0 && ( <ul> {texts.map((text, index) => ( <li key={index}>{text}</li> ))} </ul> )} </div> </div> ); } export default App;
最终输出
点击“上传图片”按钮后,后端处理图片并返回检测到的文本,然后将其显示给用户。
完整的代码,请查看我的:GitHub Repo
谢谢!!!
关注我:Medium、GitHub、LinkedIn、X、Instagram
以上是使用 AWS Rekognition 和 Node.js 检测图像中的文本的详细内容。更多信息请关注PHP中文网其他相关文章!