W dzisiejszym artykule pokażę, jak połączyć dwa potężne serwisy AWS – Rekognition i Translate – w jednej funkcji Lambda, aby automatycznie wyciągać tekst z obrazów zapisanych w S3, a następnie tłumaczyć ten tekst na wybrany język. Na przykładzie mojego projektu, przekształcimy obraz z tekstem w dokument tekstowy, a na końcu stworzymy jego przetłumaczoną wersję.
Ten proces jest niezwykle przydatny, gdy pracujesz z obrazami zawierającymi informacje w różnych językach. Ponieważ funkcja lambda automatycznie wykrywa język i tłumaczy odczytany tekst na wskazany przez ciebie język. W moim przypadku użyję przykładowych plików z S3, z których niektóre mogą być trudne do odczytania – zobaczymy, jak sobie z tym poradzi AWS Rekognition.
Jak to działa?
Najpierw użyjemy AWS Rekognition do odczytania tekstu z obrazu, a następnie Amazon Translate przetłumaczy go na wybrany język – w moim przypadku na polski. Na koniec oba pliki tekstowe (oryginalny i przetłumaczony) zostaną zapisane w S3.
Wymagania
Aby wdrożyć ten projekt, potrzebujesz:
- Konta w AWS,
- Uprawnień do korzystania z Rekognition, S3 i Translate,
- Plików graficznych zapisanych w S3.
Funkcja Lambda – kod
Poniżej znajdziesz kod funkcji Lambda, która wykonuje wszystkie opisane zadania. Zostawiłem pełne wyjaśnienia w filmie, więc tutaj zamieszczam tylko kod. Pamiętaj, żeby w kodzie dopasować szczegóły, takie jak nazwy bucketów S3 czy plików.
import json
import boto3
def lambda_handler(event, context):
rekognition_client = boto3.client('rekognition')
s3_client = boto3.client('s3')
translate_client = boto3.client('translate')
bucket_name = 'rekognition-bucket-00235'
object_key = 'OCR/Black_and_White_Minimalist_Coffee_Presentation.jpg'
response = rekognition_client.detect_text(
Image={
'S3Object': {
'Bucket': bucket_name,
'Name': object_key
}
}
)
detected_text_lines = []
for text in response['TextDetections']:
if text['Type'] == 'LINE':
detected_text_lines.append(text['DetectedText'])
extracted_text = '\n'.join(detected_text_lines)
new_file_key = object_key.rsplit('.',1)[0] + '_extracted_text.txt'
s3_client.put_object(
Bucket=bucket_name,
Key=new_file_key,
Body=extracted_text.encode('utf-8'),
ContentType='text/plain; charset=utf-8'
)
translate_response = translate_client.translate_text(
Text=extracted_text,
SourceLanguageCode='auto',
TargetLanguageCode='pl'
)
translated_text = translate_response['TranslatedText']
new_file_key_translated = object_key.rsplit('.',1)[0] + '_translated_pl.txt'
s3_client.put_object(
Bucket=bucket_name,
Key=new_file_key_translated,
Body=translated_text.encode('utf-8'),
ContentType='text/plain; charset=utf-8'
)
return {
'statusCode': 200,
'body': json.dumps(f'Text extracted and saved as {new_file_key}')
}
Podsumowanie
Po wdrożeniu tego kodu będziesz w stanie automatycznie wyciągać tekst z obrazów w S3 i tłumaczyć go na język który wskażesz za pomocą AWS Rekognition i Translate. W moim filmie szczegółowo wyjaśniam każdy krok i pokazuję, jak działa cały proces, dlatego zachęcam Cię do obejrzenia go. Będziesz mógł zobaczyć, jak narzędzia AWS radzą sobie nawet z trudniejszymi obrazami.
.