Mendeteksi teks dalam sebuah citra - Amazon Rekognition

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mendeteksi teks dalam sebuah citra

Anda dapat menyediakan citra input sebagai array bit citra (bit citra yang dikodekan base64), atau sebagai objek Amazon S3. Dalam prosedur ini, Anda mengunggah citra JPEG atau PNG ke bucket S3 Anda dan menentukan nama file.

Untuk mendeteksi teks dalam citra (API)
  1. Jika Anda belum melakukannya, selesaikan prasyarat berikut.

    1. Buat atau perbarui pengguna dengan AmazonRekognitionFullAccess dan AmazonS3ReadOnlyAccess izin. Untuk informasi selengkapnya, lihat Langkah 1: Siapkan akun AWS dan buat Pengguna.

    2. Instal dan konfigurasikan AWS Command Line Interface dan AWS SDK. Untuk informasi selengkapnya, lihat Langkah 2: Siapkan AWS CLI dan AWS SDK.

  2. Unggah citra yang berisi teks ke bucket S3 Anda.

    Untuk petunjuk, lihat Mengunggah Objek ke Amazon S3 di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

  3. Gunakan contoh berikut untuk memanggil operasi DetectText.

    Java

    Kode contoh berikut menampilkan baris dan kata-kata yang terdeteksi dalam citra.

    Mengganti nilai-nilai bucket dan photo dengan nama bucket S3 dan citra yang Anda gunakan pada langkah 2.

    //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) package aws.example.rekognition.image; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.services.rekognition.model.AmazonRekognitionException; import com.amazonaws.services.rekognition.model.Image; import com.amazonaws.services.rekognition.model.S3Object; import com.amazonaws.services.rekognition.model.DetectTextRequest; import com.amazonaws.services.rekognition.model.DetectTextResult; import com.amazonaws.services.rekognition.model.TextDetection; import java.util.List; public class DetectText { public static void main(String[] args) throws Exception { String photo = "inputtext.jpg"; String bucket = "bucket"; AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); DetectTextRequest request = new DetectTextRequest() .withImage(new Image() .withS3Object(new S3Object() .withName(photo) .withBucket(bucket))); try { DetectTextResult result = rekognitionClient.detectText(request); List<TextDetection> textDetections = result.getTextDetections(); System.out.println("Detected lines and words for " + photo); for (TextDetection text: textDetections) { System.out.println("Detected: " + text.getDetectedText()); System.out.println("Confidence: " + text.getConfidence().toString()); System.out.println("Id : " + text.getId()); System.out.println("Parent Id: " + text.getParentId()); System.out.println("Type: " + text.getType()); System.out.println(); } } catch(AmazonRekognitionException e) { e.printStackTrace(); } } }
    Java V2

    Kode ini diambil dari GitHub repositori contoh SDK AWS Dokumentasi. Lihat contoh lengkapnya di sini.

    /** * To run this code example, ensure that you perform the Prerequisites as stated in the Amazon Rekognition Guide: * https://docs.aws.amazon.com/rekognition/latest/dg/video-analyzing-with-sqs.html * * Also, ensure that set up your development environment, including your credentials. * * For information, see this documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ //snippet-start:[rekognition.java2.detect_text.import] import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.rekognition.RekognitionClient; import software.amazon.awssdk.services.rekognition.model.DetectTextRequest; import software.amazon.awssdk.services.rekognition.model.Image; import software.amazon.awssdk.services.rekognition.model.DetectTextResponse; import software.amazon.awssdk.services.rekognition.model.TextDetection; import software.amazon.awssdk.services.rekognition.model.RekognitionException; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.List; //snippet-end:[rekognition.java2.detect_text.import] /** * Before running this Java V2 code example, set up your development environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class DetectTextImage { public static void main(String[] args) { final String usage = "\n" + "Usage: " + " <sourceImage>\n\n" + "Where:\n" + " sourceImage - The path to the image that contains text (for example, C:\\AWS\\pic1.png). \n\n"; if (args.length != 1) { System.out.println(usage); System.exit(1); } String sourceImage = args[0] ; Region region = Region.US_WEST_2; RekognitionClient rekClient = RekognitionClient.builder() .region(region) .credentialsProvider(ProfileCredentialsProvider.create("default")) .build(); detectTextLabels(rekClient, sourceImage ); rekClient.close(); } // snippet-start:[rekognition.java2.detect_text.main] public static void detectTextLabels(RekognitionClient rekClient, String sourceImage) { try { InputStream sourceStream = new FileInputStream(sourceImage); SdkBytes sourceBytes = SdkBytes.fromInputStream(sourceStream); Image souImage = Image.builder() .bytes(sourceBytes) .build(); DetectTextRequest textRequest = DetectTextRequest.builder() .image(souImage) .build(); DetectTextResponse textResponse = rekClient.detectText(textRequest); List<TextDetection> textCollection = textResponse.textDetections(); System.out.println("Detected lines and words"); for (TextDetection text: textCollection) { System.out.println("Detected: " + text.detectedText()); System.out.println("Confidence: " + text.confidence().toString()); System.out.println("Id : " + text.id()); System.out.println("Parent Id: " + text.parentId()); System.out.println("Type: " + text.type()); System.out.println(); } } catch (RekognitionException | FileNotFoundException e) { System.out.println(e.getMessage()); System.exit(1); } } // snippet-end:[rekognition.java2.detect_text.main]
    AWS CLI

    AWS CLI Perintah ini menampilkan output JSON untuk operasi detect-text CLI.

    Mengganti nilai-nilai Bucket dan Name dengan nama bucket S3 dan citra yang Anda gunakan pada langkah 2.

    Ganti nilai profile_name dengan nama profil pengembang Anda.

    aws rekognition detect-text --image "{"S3Object":{"Bucket":"bucket-name","Name":"image-name"}}" --profile default

    Jika Anda mengakses CLI pada perangkat Windows, gunakan tanda kutip ganda alih-alih tanda kutip tunggal dan hindari tanda kutip ganda bagian dalam dengan garis miring terbalik (yaitu\) untuk mengatasi kesalahan parser yang mungkin Anda temui. Sebagai contoh, lihat berikut ini:

    aws rekognition detect-text --image "{\"S3Object\":{\"Bucket\":\"bucket-name\",\"Name\":\"image-name\"}}" --profile default
    Python

    Contoh kode berikut menampilkan baris dan kata-kata yang terdeteksi dalam sebuah citra.

    Mengganti nilai-nilai bucket dan photo dengan nama S3bucket dan citra yang Anda gunakan pada langkah 2. Ganti nilai profile_name di baris yang membuat sesi Rekognition dengan nama profil pengembang Anda.

    # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. # PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) import boto3 def detect_text(photo, bucket): session = boto3.Session(profile_name='default') client = session.client('rekognition') response = client.detect_text(Image={'S3Object': {'Bucket': bucket, 'Name': photo}}) textDetections = response['TextDetections'] print('Detected text\n----------') for text in textDetections: print('Detected text:' + text['DetectedText']) print('Confidence: ' + "{:.2f}".format(text['Confidence']) + "%") print('Id: {}'.format(text['Id'])) if 'ParentId' in text: print('Parent Id: {}'.format(text['ParentId'])) print('Type:' + text['Type']) print() return len(textDetections) def main(): bucket = 'bucket-name' photo = 'photo-name' text_count = detect_text(photo, bucket) print("Text detected: " + str(text_count)) if __name__ == "__main__": main()
    .NET

    Contoh kode berikut menampilkan baris dan kata-kata yang terdeteksi dalam sebuah citra.

    Ganti nilai-nilai bucket dan photo dengan nama bucket S3 dan citra yang Anda gunakan pada langkah 2.

    //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) using System; using Amazon.Rekognition; using Amazon.Rekognition.Model; public class DetectText { public static void Example() { String photo = "input.jpg"; String bucket = "bucket"; AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient(); DetectTextRequest detectTextRequest = new DetectTextRequest() { Image = new Image() { S3Object = new S3Object() { Name = photo, Bucket = bucket } } }; try { DetectTextResponse detectTextResponse = rekognitionClient.DetectText(detectTextRequest); Console.WriteLine("Detected lines and words for " + photo); foreach (TextDetection text in detectTextResponse.TextDetections) { Console.WriteLine("Detected: " + text.DetectedText); Console.WriteLine("Confidence: " + text.Confidence); Console.WriteLine("Id : " + text.Id); Console.WriteLine("Parent Id: " + text.ParentId); Console.WriteLine("Type: " + text.Type); } } catch (Exception e) { Console.WriteLine(e.Message); } } }
    Node.JS

    Contoh kode berikut menampilkan baris dan kata-kata yang terdeteksi dalam sebuah citra.

    Mengganti nilai-nilai bucket dan photo dengan nama S3bucket dan citra yang Anda gunakan pada langkah 2. Ganti nilai region dengan wilayah yang ditemukan di kredensial.aws Anda. Ganti nilai profile_name di baris yang membuat sesi Rekognition dengan nama profil pengembang Anda.

    var AWS = require('aws-sdk'); const bucket = 'bucket' // the bucketname without s3:// const photo = 'photo' // the name of file const config = new AWS.Config({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, }) AWS.config.update({region:'region'}); const client = new AWS.Rekognition(); const params = { Image: { S3Object: { Bucket: bucket, Name: photo }, }, } client.detectText(params, function(err, response) { if (err) { console.log(err, err.stack); // handle error if an error occurred } else { console.log(`Detected Text for: ${photo}`) console.log(response) response.TextDetections.forEach(label => { console.log(`Detected Text: ${label.DetectedText}`), console.log(`Type: ${label.Type}`), console.log(`ID: ${label.Id}`), console.log(`Parent ID: ${label.ParentId}`), console.log(`Confidence: ${label.Confidence}`), console.log(`Polygon: `) console.log(label.Geometry.Polygon) } ) } });

DetectText permintaan operasi

Dalam operasi DetectText, Anda menyediakan citra input, sebagai array bit yang dikodekan base64 atau sebagai citra yang disimpan dalam bucket Amazon S3. Contoh permintaan JSON berikut menunjukkan citra yang dimuat dari bucket Amazon S3.

{ "Image": { "S3Object": { "Bucket": "bucket", "Name": "inputtext.jpg" } } }

Filter

Pemfilteran berdasarkan wilayah teks, ukuran, dan skor kepercayaan memberikan Anda fleksibilitas tambahan untuk mengendalikan output deteksi teks Anda. Dengan menggunakan wilayah yang diminati, Anda dapat dengan mudah membatasi deteksi teks ke wilayah yang relevan bagi Anda, misalnya, kanan atas foto profil atau lokasi tetap terkait dengan titik referensi saat membaca nomor suku cadang dari citra mesin. Filter ukuran kotak pembatas kata dapat digunakan untuk menghindari teks latar belakang kecil yang mungkin ramai atau tidak relevan. Filter kepercayaan kata memungkinkan Anda untuk menghapus hasil yang mungkin tidak dapat diandalkan karena buram atau ternoda.

Untuk informasi mengenai nilai filter, lihatDetectTextFilters.

Anda dapat menggunakan filter berikut:

  • MinConfidence—Menetapkan tingkat kepercayaan deteksi kata. Kata-kata dengan kepercayaan deteksi di bawah tingkat ini dikeluarkan dari hasil. Nilai harus antara 0 hingga 100.

  • MinBoundingBoxWidth— Mengatur lebar minimum kotak pembatas kata. Kata-kata dengan kotak pembatas yang lebih kecil dari nilai ini dikeluarkan dari hasil. Nilainya relatif terhadap lebar bingkai citra.

  • MinBoundingBoxHeight— Mengatur tinggi minimum kotak pembatas kata. Kata-kata dengan tinggi kotak pembatas kurang dari nilai ini dikeluarkan dari hasil. Nilainya relatif terhadap tinggi bingkai citra.

  • RegionsOfInterest— Membatasi deteksi ke wilayah tertentu dari bingkai gambar. Nilai-nilainya relatif terhadap dimensi bingkai. Untuk teks yang hanya sebagian dalam suatu wilayah, responsnya tidak ditentukan.

DetectText respon operasi

DetectTextOperasi menganalisis gambar dan mengembalikan array, TextDetections, di mana setiap elemen (TextDetection) mewakili garis atau kata yang terdeteksi dalam gambar. Untuk setiap elemen, DetectText mengembalikan informasi berikut:

  • Teks yang terdeteksi (DetectedText)

  • Hubungan antara kata-kata dan baris (Id dan ParentId)

  • Lokasi teks pada citra (Geometry)

  • kepercayaan Amazon Rekognition memiliki keakuratan teks yang terdeteksi dan kotak pembatas (Confidence)

  • tipe teks yang terdeteksi (Type)

Teks yang terdeteksi

Setiap elemen TextDetection berisi teks yang dikenali (kata atau baris) dalam bidang DetectedText. Sebuah kata adalah satu atau lebih karakter skrip yang tidak dipisahkan oleh spasi. DetectTextdapat mendeteksi hingga 100 kata dalam sebuah gambar. Teks yang dikembalikan mungkin menyertakan karakter yang membuat kata tidak dapat dikenali. Misalnya, C@t alih-alih Cat. Untuk menentukan apakah elemen TextDetection mewakili baris teks atau kata, gunakan bidang Type.

Setiap elemen TextDetection termasuk nilai persentase yang mewakili tingkat kepercayaan bahwa Amazon Rekognition memiliki keakuratan teks yang terdeteksi dan kotak pembatas yang mengelilingi teks.

Hubungan kata dan baris

Setiap elemen TextDetection memiliki bidang pengenal, Id. Id menunjukkan posisi kata dalam satu baris. Jika elemennya adalah kata, bidang pengenal induk, ParentId, mengidentifikasi baris tempat kata tersebut terdeteksi. ParentId untuk baris adalah nol. Sebagai contoh, baris "tapi tetap" dalam citra contoh memiliki nilai Id dan ParentId berikut:

Teks

ID

ID Induk

tapi tetap

3

tapi

8

3

tetap

9

3

Lokasi teks pada citra

Untuk menentukan di mana teks yang dikenali berada pada gambar, gunakan informasi kotak pembatas (Geometri) yang dikembalikan oleh. DetectText Objek Geometry berisi dua tipe informasi kotak pembatas untuk baris dan kata yang terdeteksi:

Koordinat kotak pembatas dan poligon menunjukkan lokasi teks terletak pada citra sumber. Nilai koordinat adalah rasio ukuran citra secara keseluruhan. Untuk informasi lebih lanjut, lihat BoundingBox.

Berikut respons JSON dari operasi DetectText yang menunjukkan kata-kata dan baris yang terdeteksi pada citra berikut.

Mug kopi tersenyum di sebelah teks yang bertuliskan “Ini hari Senin tapi tetap Tersenyum” dengan latar belakang batu bata, dengan kotak pembatas teks.
{ 'TextDetections': [{'Confidence': 99.35693359375, 'DetectedText': "IT'S", 'Geometry': {'BoundingBox': {'Height': 0.09988046437501907, 'Left': 0.6684935688972473, 'Top': 0.18226495385169983, 'Width': 0.1461552083492279}, 'Polygon': [{'X': 0.6684935688972473, 'Y': 0.1838926374912262}, {'X': 0.8141663074493408, 'Y': 0.18226495385169983}, {'X': 0.8146487474441528, 'Y': 0.28051772713661194}, {'X': 0.6689760088920593, 'Y': 0.2821454107761383}]}, 'Id': 0, 'Type': 'LINE'}, {'Confidence': 99.6207275390625, 'DetectedText': 'MONDAY', 'Geometry': {'BoundingBox': {'Height': 0.11442459374666214, 'Left': 0.5566731691360474, 'Top': 0.3525116443634033, 'Width': 0.39574965834617615}, 'Polygon': [{'X': 0.5566731691360474, 'Y': 0.353712260723114}, {'X': 0.9522717595100403, 'Y': 0.3525116443634033}, {'X': 0.9524227976799011, 'Y': 0.4657355844974518}, {'X': 0.5568241477012634, 'Y': 0.46693623065948486}]}, 'Id': 1, 'Type': 'LINE'}, {'Confidence': 99.6160888671875, 'DetectedText': 'but keep', 'Geometry': {'BoundingBox': {'Height': 0.08314694464206696, 'Left': 0.6398131847381592, 'Top': 0.5267938375473022, 'Width': 0.2021435648202896}, 'Polygon': [{'X': 0.640289306640625, 'Y': 0.5267938375473022}, {'X': 0.8419567942619324, 'Y': 0.5295097827911377}, {'X': 0.8414806723594666, 'Y': 0.609940767288208}, {'X': 0.6398131847381592, 'Y': 0.6072247624397278}]}, 'Id': 2, 'Type': 'LINE'}, {'Confidence': 88.95134735107422, 'DetectedText': 'Smiling', 'Geometry': {'BoundingBox': {'Height': 0.4326171875, 'Left': 0.46289217472076416, 'Top': 0.5634765625, 'Width': 0.5371078252792358}, 'Polygon': [{'X': 0.46289217472076416, 'Y': 0.5634765625}, {'X': 1.0, 'Y': 0.5634765625}, {'X': 1.0, 'Y': 0.99609375}, {'X': 0.46289217472076416, 'Y': 0.99609375}]}, 'Id': 3, 'Type': 'LINE'}, {'Confidence': 99.35693359375, 'DetectedText': "IT'S", 'Geometry': {'BoundingBox': {'Height': 0.09988046437501907, 'Left': 0.6684935688972473, 'Top': 0.18226495385169983, 'Width': 0.1461552083492279}, 'Polygon': [{'X': 0.6684935688972473, 'Y': 0.1838926374912262}, {'X': 0.8141663074493408, 'Y': 0.18226495385169983}, {'X': 0.8146487474441528, 'Y': 0.28051772713661194}, {'X': 0.6689760088920593, 'Y': 0.2821454107761383}]}, 'Id': 4, 'ParentId': 0, 'Type': 'WORD'}, {'Confidence': 99.6207275390625, 'DetectedText': 'MONDAY', 'Geometry': {'BoundingBox': {'Height': 0.11442466825246811, 'Left': 0.5566731691360474, 'Top': 0.35251158475875854, 'Width': 0.39574965834617615}, 'Polygon': [{'X': 0.5566731691360474, 'Y': 0.3537122905254364}, {'X': 0.9522718787193298, 'Y': 0.35251158475875854}, {'X': 0.9524227976799011, 'Y': 0.4657355546951294}, {'X': 0.5568241477012634, 'Y': 0.46693626046180725}]}, 'Id': 5, 'ParentId': 1, 'Type': 'WORD'}, {'Confidence': 99.96778869628906, 'DetectedText': 'but', 'Geometry': {'BoundingBox': {'Height': 0.0625, 'Left': 0.6402802467346191, 'Top': 0.5283203125, 'Width': 0.08027780801057816}, 'Polygon': [{'X': 0.6402802467346191, 'Y': 0.5283203125}, {'X': 0.7205580472946167, 'Y': 0.5283203125}, {'X': 0.7205580472946167, 'Y': 0.5908203125}, {'X': 0.6402802467346191, 'Y': 0.5908203125}]}, 'Id': 6, 'ParentId': 2, 'Type': 'WORD'}, {'Confidence': 99.26438903808594, 'DetectedText': 'keep', 'Geometry': {'BoundingBox': {'Height': 0.0818721204996109, 'Left': 0.7344760298728943, 'Top': 0.5280686020851135, 'Width': 0.10748066753149033}, 'Polygon': [{'X': 0.7349520921707153, 'Y': 0.5280686020851135}, {'X': 0.8419566750526428, 'Y': 0.5295097827911377}, {'X': 0.8414806127548218, 'Y': 0.6099407076835632}, {'X': 0.7344760298728943, 'Y': 0.6084995269775391}]}, 'Id': 7, 'ParentId': 2, 'Type': 'WORD'}, {'Confidence': 88.95134735107422, 'DetectedText': 'Smiling', 'Geometry': {'BoundingBox': {'Height': 0.4326171875, 'Left': 0.46289217472076416, 'Top': 0.5634765625, 'Width': 0.5371078252792358}, 'Polygon': [{'X': 0.46289217472076416, 'Y': 0.5634765625}, {'X': 1.0, 'Y': 0.5634765625}, {'X': 1.0, 'Y': 0.99609375}, {'X': 0.46289217472076416, 'Y': 0.99609375}]}, 'Id': 8, 'ParentId': 3, 'Type': 'WORD'}], 'TextModelVersion': '3.0'}