Text aus Bildern in Node.js mit AWS Rekognition extrahieren
Text aus Bildern zu extrahieren ist eine häufige Anforderung in modernen Anwendungen, sei es für die Verarbeitung gescannter Dokumente, für mehr Barrierefreiheit oder für die automatisierte Dateneingabe. AWS Rekognition bietet robuste Funktionen zur Texterkennung, die sich nahtlos in Ihre Node.js-Anwendungen integrieren lassen. Der Service unterstützt JPEG- und PNG-Bilder mit bis zu 5 MB, wenn sie als Roh-Bytes übergeben werden, oder mit bis zu 15 MB, wenn sie in S3 referenziert werden, und kann bis zu 100 Wörter pro Bild erkennen.
Einführung in AWS Rekognition und Texterkennung
AWS Rekognition ist ein leistungsstarker Service zur Bild- und Videoanalyse, der mithilfe von Deep Learning Objekte, Szenen, Text und Gesichter in Bildern identifiziert. Die Texterkennung eignet sich ideal für die automatisierte Dateneingabe, für mehr Barrierefreiheit und für die Verarbeitung gescannter Dokumente. In dieser Anleitung erfahren Sie, wie Sie AWS Rekognition für eine zuverlässige Textextraktion in Ihre Node.js-Anwendung integrieren.
AWS Rekognition einrichten
Bevor Sie beginnen, richten Sie Ihre AWS-Zugangsdaten ein und stellen Sie sicher, dass Sie über die
nötigen IAM-Berechtigungen verfügen. Verwenden Sie eine IAM-Rolle oder ein konfiguriertes lokales
AWS-Profil mit einer Richtlinie wie der folgenden, um den Zugriff auf die Aktion
rekognition:DetectText zu erlauben:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["rekognition:DetectText"],
"Resource": "*"
}
]
}
Konfigurieren Sie Ihre AWS-Zugangsdaten mit einer dieser Methoden:
- Umgebungsvariablen (setzen Sie
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYundAWS_REGIONsowieAWS_SESSION_TOKENfür temporäre Zugangsdaten). - Datei mit AWS-Zugangsdaten (zu finden unter
~/.aws/credentialsunter Linux/Mac oderC:\Users\YourUser\.aws\credentialsunter Windows). - Eine IAM-Rolle, die an den AWS-Service angehängt ist, der Ihre Anwendung ausführt.
Das AWS SDK für Node.js installieren
Verwenden Sie Node.js 22 oder neuer und installieren Sie AWS SDK v3 für Rekognition. Speichern Sie
die JavaScript-Beispiele als Dateien mit der Endung .mjs oder setzen Sie "type": "module" in der
Datei package.json Ihres Projekts:
npm install @aws-sdk/client-rekognition@3
AWS SDK in eine Node.js-Anwendung integrieren
Importieren Sie die nötigen Klassen und konfigurieren Sie die Region. Wenn Sie credentials nicht
setzen, kann die
Standard-Anbieterkette für Zugangsdaten
Profile, temporäre Zugangsdaten und IAM-Rollen auflösen:
import { RekognitionClient, DetectTextCommand } from '@aws-sdk/client-rekognition'
const client = new RekognitionClient({
region: process.env.AWS_REGION || 'us-west-2',
})
Texterkennung mit AWS Rekognition durchführen
Sie können Text sowohl aus lokalen Dateien als auch aus Bildern erkennen, die in S3 gespeichert sind. Die folgende Beispielfunktion lädt eine lokale Bilddatei und gibt die erkannten Textzeilen mit ihren Konfidenzwerten und Angaben zur Bounding Box zurück:
import fs from 'fs'
// Assumes 'client' is already configured as shown above
const detectTextFromImage = async (imagePath) => {
const imageBytes = fs.readFileSync(imagePath)
const params = {
Image: { Bytes: imageBytes },
}
try {
const data = await client.send(new DetectTextCommand(params))
const textLines = (data.TextDetections ?? []).filter((text) => text.Type === 'LINE').map((text) => ({
text: text.DetectedText,
confidence: text.Confidence,
boundingBox: text.Geometry?.BoundingBox,
}))
return textLines
} catch (err) {
if (err.name === 'InvalidImageFormatException') {
throw new Error('Invalid image format. Only JPEG and PNG are supported.', { cause: err })
} else if (err.name === 'ImageTooLargeException') {
throw new Error('Image size exceeds the 5MB limit for raw bytes.', { cause: err })
} else if (err.name === 'ThrottlingException') {
throw new Error('API request rate exceeded. Please retry with backoff.', { cause: err })
}
throw err
}
}
Bilder aus S3 analysieren
Wenn Ihr Bild in einem S3-Bucket gespeichert ist, verwenden Sie erneut client und DetectTextCommand
aus der obigen Konfiguration. Der Bucket muss sich in derselben Region wie der Rekognition-Client
befinden, und die aufrufende Identität benötigt für das Bild die Berechtigung
s3:GetObject:
const detectTextFromS3Image = async (bucket, key) => {
const params = {
Image: {
S3Object: {
Bucket: bucket,
Name: key,
},
},
}
try {
const data = await client.send(new DetectTextCommand(params))
const textLines = (data.TextDetections ?? []).filter((text) => text.Type === 'LINE').map((text) => ({
text: text.DetectedText,
confidence: text.Confidence,
boundingBox: text.Geometry?.BoundingBox,
}))
return textLines
} catch (err) {
if (err.name === 'InvalidImageFormatException') {
throw new Error('Invalid image format. Only JPEG and PNG are supported.', { cause: err })
} else if (err.name === 'ImageTooLargeException') {
throw new Error('Image exceeds the 15MB limit for S3 objects.', { cause: err })
} else if (err.name === 'ThrottlingException') {
throw new Error('API request rate exceeded. Please retry with backoff.', { cause: err })
}
throw err
}
}
Praktisches Beispiel und Code-Snippets
Das folgende vollständige Beispiel verarbeitet eine lokale Bilddatei. Es prüft, ob die Datei vorhanden ist, sendet das Bild zur Texterkennung an AWS Rekognition und protokolliert die erkannten Textzeilen zusammen mit ihren Konfidenzwerten und Positionen.
import { RekognitionClient, DetectTextCommand } from '@aws-sdk/client-rekognition'
import fs from 'fs'
const client = new RekognitionClient({
region: process.env.AWS_REGION || 'us-west-2',
})
const processImage = async (imagePath) => {
if (!fs.existsSync(imagePath)) {
throw new Error('Image file not found.')
}
const imageBytes = fs.readFileSync(imagePath)
const params = {
Image: { Bytes: imageBytes },
}
try {
const data = await client.send(new DetectTextCommand(params))
console.log('Detected text lines:')
const detections = data.TextDetections ?? []
for (const text of detections.filter((text) => text.Type === 'LINE')) {
console.log(`- Text: ${text.DetectedText}`)
if (text.Confidence != null) console.log(` Confidence: ${text.Confidence.toFixed(2)}%`)
const box = text.Geometry?.BoundingBox
if (box?.Left != null && box.Top != null) {
console.log(` Position: (${box.Left.toFixed(2)}, ${box.Top.toFixed(2)})`)
}
}
return detections
} catch (err) {
if (err.name === 'InvalidImageFormatException') {
console.error('Error: Invalid image format. Only JPEG and PNG are supported.')
} else if (err.name === 'ImageTooLargeException') {
console.error('Error: Image size exceeds the 5MB limit for raw bytes.')
} else if (err.name === 'ThrottlingException') {
console.error('Error: API request rate exceeded. Please retry with backoff.')
} else {
console.error('Error detecting text:', err.message)
}
throw err
}
}
// Usage example
processImage('path/to/your/image.jpg')
.then((results) => {
console.log(`Found ${results.length} text elements`)
})
.catch((err) => {
console.error('Failed to process image:', err.message)
process.exitCode = 1
})
Service-Limits und Preise von AWS Rekognition
Wenn Sie AWS Rekognition zur Texterkennung einsetzen, sollten Sie diese wichtigen Punkte beachten:
- Die Eingabe als Roh-Bytes ist auf 5 MB begrenzt; S3-Objekte sind auf 15 MB begrenzt.
- Unterstützte Bildformate sind JPEG und PNG.
- Der Service kann bis zu 100 Wörter pro Bild erkennen.
- Die Preise hängen von der API, der Region, dem Volumen und der Berechtigung Ihres Kontos für das kostenlose Kontingent ab.
Weitere Details finden Sie auf der Seite Preise für AWS Rekognition sowie in der Dokumentation zu den Service-Limits.
Fazit
AWS Rekognition bietet leistungsstarke Funktionen zur Texterkennung, die sich einfach in Ihre Node.js-Anwendungen integrieren lassen. Mit den obigen Schritten richten Sie Ihre AWS-Zugangsdaten ein, installieren das AWS SDK und implementieren eine robuste Fehlerbehandlung für lokale Bilder ebenso wie für Bilder aus S3.
Möchten Sie Ihren Workflow zur Bildanalyse noch weiter automatisieren? Sehen Sie sich an, wie der Image Describe Robot von Transloadit ähnliche Technologie nutzt, um Ihnen die Verarbeitung von Bildern in großem Umfang zu erleichtern.
