ドキュメント テキスト検出のベータ版機能

Google Cloud Vision API v1p1beta1 では、ドキュメント テキスト検出に次のベータ版機能が追加されています。

  • 信頼スコア: 各テキスト ブロックとサブブロック(段落、単語、記号)の信頼スコアが返されます。このスコアの範囲は 0(信頼できない)~1(完全に信頼できる)です。

新しい機能を使用するには、API を呼び出すときに https://vision.googleapis.com/v1p1beta1/images:annotate エンドポイントを指定します。

サンプルコード

プロトコル

このコードは、Google Cloud Storage に保存されているサンプル画像を使用しています。このサンプル画像を使用してコードを実行したり、独自のコードを提供したり、コードを変更してインライン画像を受け入れたりすることができます(ウェブ検出サンプルページを参照してください)。

ドキュメント テキスト検出を行うには、POST リクエストを作成し、適切なリクエスト本文を指定します。

POST https://vision.googleapis.com/v1p1beta1/images:annotate?key=YOUR_API_KEY
{
  "requests": [
    {
      "image": {
        "source": {
          "gcsImageUri": "gs://bucket-name-123/abbey_road.jpg"
      "features": [
        {
          "type": "DOCUMENT_TEXT_DETECTION"
        }
      ]
    }
  ]
}

リクエスト本文の設定について詳しくは、AnnotateImageRequest のリファレンス ドキュメントをご覧ください。

リクエストが成功すると、サーバーは 200 OK HTTP ステータス コードと JSON 形式のレスポンスを返します。

{
  "responses": [
    {
    ...
      "fullTextAnnotation": {
        "pages": [
          {
            "property": {
              "detectedLanguages": [
                {
                  "languageCode": "en"
                }
              ]
            },
            "width": 4032,
            "height": 3024,
            "blocks": [
              {
                "property": {
                  "detectedLanguages": [
                    {
                      "languageCode": "en"
                    }
                  ]
                },
                "boundingBox": {
                  "vertices": [
                    {
                      "x": 175,
                      "y": 2346
                    },
                    {
                      "x": 209,
                      "y": 1149
                    },
                    {
                      "x": 534,
                      "y": 1159
                    },
                    {
                      "x": 500,
                      "y": 2355
                    }
                  ]
                },
                "paragraphs": [
                  {
                    "property": {
                      "detectedLanguages": [
                        {
                          "languageCode": "en"
                        }
                      ]
                    },
                    "boundingBox": {
                      "vertices": [
                        {
                          "x": 179,
                          "y": 2181
                        },
                        {
                          "x": 216,
                          "y": 1337
                        },
                        {
                          "x": 287,
                          "y": 1340
                        },
                        {
                          "x": 250,
                          "y": 2184
                        }
                      ]
                    },
                    "words": [
                      {
                        "property": {
                          "detectedLanguages": [
                            {
                              "languageCode": "en"
                            }
                          ]
                        },
                        "boundingBox": {
                          "vertices": [
                            {
                              "x": 179,
                              "y": 2181
                            },
                            {
                              "x": 196,
                              "y": 1795
                            },
                            {
                              "x": 267,
                              "y": 1798
                            },
                            {
                              "x": 250,
                              "y": 2184
                            }
                          ]
                        },
                        "symbols": [
                          {
                            "property": {
                              "detectedLanguages": [
                                {
                                  "languageCode": "en"
                                }
                              ]
                            },
                            "boundingBox": {
                              "vertices": [
                                {
                                  "x": 179,
                                  "y": 2181
                                },
                                {
                                  "x": 181,
                                  "y": 2141
                                },
                                {
                                  "x": 252,
                                  "y": 2144
                                },
                                {
                                  "x": 250,
                                  "y": 2184
                                }
                              ]
                            },
                            "text": "S",
                            "confidence": 0.99
                          },

        ...

Python

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

def detect_document(path):
    """Detects document features in an image."""
    client = vision.ImageAnnotatorClient()

    with io.open(path, 'rb') as image_file:
        content = image_file.read()

    image = vision.types.Image(content=content)

    response = client.document_text_detection(image=image)

    for page in response.full_text_annotation.pages:
        for block in page.blocks:
            block_words = []
            for paragraph in block.paragraphs:
                block_words.extend(paragraph.words)
                print(u'Paragraph Confidence: {}\n'.format(
                    paragraph.confidence))

            block_text = ''
            block_symbols = []
            for word in block_words:
                block_symbols.extend(word.symbols)
                word_text = ''
                for symbol in word.symbols:
                    word_text = word_text + symbol.text
                    print(u'\tSymbol text: {} (confidence: {})'.format(
                        symbol.text, symbol.confidence))
                print(u'Word text: {} (confidence: {})\n'.format(
                    word_text, word.confidence))

                block_text += ' ' + word_text

            print(u'Block Content: {}\n'.format(block_text))
            print(u'Block Confidence:\n {}\n'.format(block.confidence))

Java

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

/**
 * Performs document text detection on a remote image on Google Cloud Storage.
 *
 * @param gcsPath The path to the remote file on Google Cloud Storage to detect document text on.
 * @param out A {@link PrintStream} to write the results to.
 * @throws Exception on errors while closing the client.
 * @throws IOException on Input/Output errors.
 */
public static void detectDocumentTextGcs(String gcsPath, PrintStream out) throws Exception,
    IOException {
  List<AnnotateImageRequest> requests = new ArrayList<>();

  ImageSource imgSource = ImageSource.newBuilder().setGcsImageUri(gcsPath).build();
  Image img = Image.newBuilder().setSource(imgSource).build();
  Feature feat = Feature.newBuilder().setType(Type.DOCUMENT_TEXT_DETECTION).build();
  AnnotateImageRequest request =
      AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
  requests.add(request);

  try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) {
    BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
    List<AnnotateImageResponse> responses = response.getResponsesList();
    client.close();

    for (AnnotateImageResponse res : responses) {
      if (res.hasError()) {
        out.printf("Error: %s\n", res.getError().getMessage());
        return;
      }
      // For full list of available annotations, see http://g.co/cloud/vision/docs
      TextAnnotation annotation = res.getFullTextAnnotation();
      for (Page page: annotation.getPagesList()) {
        String pageText = "";
        for (Block block : page.getBlocksList()) {
          String blockText = "";
          for (Paragraph para : block.getParagraphsList()) {
            String paraText = "";
            for (Word word: para.getWordsList()) {
              String wordText = "";
              for (Symbol symbol: word.getSymbolsList()) {
                wordText = wordText + symbol.getText();
                out.format("Symbol text: %s (confidence: %f)\n", symbol.getText(),
                    symbol.getConfidence());
              }
              out.format("Word text: %s (confidence: %f)\n\n", wordText, word.getConfidence());
              paraText = String.format("%s %s", paraText, wordText);
            }
            // Output Example using Paragraph:
            out.println("\nParagraph: \n" + paraText);
            out.format("Paragraph Confidence: %f\n", para.getConfidence());
            blockText = blockText + paraText;
          }
          pageText = pageText + blockText;
        }
      }
      out.println("\nComplete annotation:");
      out.println(annotation.getText());
    }
  }
}

Node.js

Cloud Vision API クライアントのインストールと作成の詳細については、Cloud Vision API クライアント ライブラリをご覧ください。

// Imports the Google Cloud client libraries
const vision = require('@google-cloud/vision').v1p1beta1;

// Creates a client
const client = new vision.ImageAnnotatorClient();

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const fileName = 'Local image file, e.g. /path/to/image.png';

// Performs label detection on the local file
client
  .textDetection(fileName)
  .then(results => {
    const pages = results[0].fullTextAnnotation.pages;
    pages.forEach(page => {
      page.blocks.forEach(block => {
        const blockWords = [];
        block.paragraphs.forEach(paragraph => {
          paragraph.words.forEach(word => blockWords.push(word));
          console.log(`Paragraph confidence: ${paragraph.confidence}`);
        });

        let blockText = '';
        const blockSymbols = [];
        blockWords.forEach(word => {
          word.symbols.forEach(symbol => blockSymbols.push(symbol));
          let wordText = '';
          word.symbols.forEach(symbol => {
            wordText = wordText + symbol.text;
            console.log(`Symbol text: ${symbol.text}`);
            console.log(`Symbol confidence: ${symbol.confidence}`);
          });
          console.log(`Word text: ${wordText}`);
          console.log(`Word confidence: ${word.confidence}`);
          blockText = blockText + ` ${wordText}`;
        });

        console.log(`Block text: ${blockText}`);
        console.log(`Block confidence: ${block.confidence}`);
      });
    });
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

試してみる

以下のドキュメント テキスト検出のベータ版をお試しください。[実行] をクリックすると、すでに指定されている画像(gs://bucket-name-123/abbey_road.jpg)を使用することも、代わりに独自の画像を指定することもできます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Vision API ドキュメント