Text in Dateien erkennen (PDF/TIFF)

Die Vision API kann Text aus PDF- und TIFF-Dateien, die in Cloud Storage gespeichert sind, erkennen und transkribieren.

Die Texterkennung in PDF-/TIFF-Dokumenten muss mit der Funktion files:asyncBatchAnnotate angefordert werden. Diese Funktion führt eine (asynchrone) Offlineanfrage durch und gibt mithilfe der Ressourcen operations den Status an.

Die Ausgabedaten aus einer PDF/TIFF-Anfrage werden in eine JSON-Datei geschrieben, die im angegebenen Cloud Storage-Bucket erstellt wurde.

Beschränkungen

Die Vision API akzeptiert PDF/TIFF-Dateien mit maximal 2.000 Seiten. Größere Dateien führen zu einem Fehler.

Authentifizierung

API-Schlüssel werden bei files:asyncBatchAnnotate-Anfragen nicht unterstützt. Weitere Informationen dazu, wie Sie sich mit einem Dienstkonto authentifizieren, finden Sie unter Dienstkonto verwenden.

Das für die Authentifizierung verwendete Konto muss Zugriff auf den Cloud Storage-Bucket haben, den Sie für die Ausgabe (roles/editor oder roles/storage.objectCreator oder höher) festgelegt haben.

Sie können einen API-Schlüssel verwenden, um den Status des Vorgangs abzufragen. Eine Anleitung dazu finden Sie unter API-Schlüssel verwenden.

Anfragen zur Erkennung von Dokumenttext

Derzeit ist die PDF/TIFF-Dokumenterkennung nur für Dateien verfügbar, die in Cloud Storage-Buckets gespeichert sind. JSON-Antwortdateien werden ebenso in einem Cloud Storage-Bucket gespeichert.

PDF-Seite zur US-Volkszählung 2010
gs://cloud-samples-data/vision/pdf_tiff/census2010.pdf, Quelle: Statistisches Bundesamt der USA.

REST

Ersetzen Sie folgende Werte in den Anfragedaten:

  • CLOUD_STORAGE_BUCKET: ein Google Cloud Storage-Bucket/-Verzeichnis, in dem Ausgabedateien gespeichert werden. Dies wird in folgender Form angegeben:
    • gs://bucket/directory/
    Der anfragende Nutzer muss Schreibberechtigung für den Bucket haben.
  • CLOUD_STORAGE_FILE_URI: der Pfad zu einer gültigen Datei (PDF/TIFF) in einem Cloud Storage-Bucket. Sie müssen zumindest Leseberechtigungen für die Datei haben. Beispiel:
    • gs://cloud-samples-data/vision/pdf_tiff/census2010.pdf
  • FEATURE_TYPE: ein gültiger Featuretyp. Für files:asyncBatchAnnotate-Anfragen können Sie die folgenden Featuretypen verwenden:
    • DOCUMENT_TEXT_DETECTION
    • TEXT_DETECTION
  • PROJECT_ID: Ihre Google Cloud -Projekt-ID

Feldspezifische Hinweise:

  • inputConfig ersetzt das Feld image, das in anderen Vision API-Anfragen verwendet wird. Es enthält zwei untergeordnete Felder:
    • gcsSource.uri ist der Google Cloud Storage-URI der PDF- oder TIFF-Datei (zugänglich für den Nutzer oder das Dienstkonto, von dem die Anfrage stammt).
    • mimeType ist einer der akzeptierten Dateitypen: application/pdf oder image/tiff.
  • outputConfig gibt Ausgabedetails an. Es enthält zwei untergeordnete Felder:
    • gcsDestination.uri ist ein gültiger Google Cloud Storage-URI. Der Nutzer oder das Dienstkonto, von dem die Anfrage gesendet wird, muss Schreibrechte für den Bucket haben. Der Dateiname ist output-x-to-y, wobei x und y für die Anzahl der PDF/TIFF-Seiten stehen, die in dieser Ausgabedatei enthalten sind. Wenn die Datei vorhanden ist, wird ihr Inhalt überschrieben.
    • batchSize gibt an, wie viele Ausgabeseiten in jeder JSON-Ausgabedatei enthalten sein sollen.

HTTP-Methode und URL:

POST https://vision.googleapis.com/v1/files:asyncBatchAnnotate

JSON-Text der Anfrage:

{
  "requests":[
    {
      "inputConfig": {
        "gcsSource": {
          "uri": "CLOUD_STORAGE_FILE_URI"
        },
        "mimeType": "application/pdf"
      },
      "features": [
        {
          "type": "FEATURE_TYPE"
        }
      ],
      "outputConfig": {
        "gcsDestination": {
          "uri": "CLOUD_STORAGE_BUCKET"
        },
        "batchSize": 1
      }
    }
  ]
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://vision.googleapis.com/v1/files:asyncBatchAnnotate"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/files:asyncBatchAnnotate" | Select-Object -Expand Content
Antwort:

Eine erfolgreiche asyncBatchAnnotate-Anfrage gibt als Antwort ein einzelnes Namensfeld zurück:

{
  "name": "projects/usable-auth-library/operations/1efec2285bd442df"
}

Dieser Name stellt einen Vorgang mit langer Ausführungszeit mit einer verknüpften ID dar (z. B. 1efec2285bd442df), die mit der v1.operations API abgefragt werden kann.

Sie können die Antwort mit den Vision-Annotationen abrufen. Dazu senden Sie eine GET-Anfrage an den Endpunkt v1.operations und übergeben in der URL die Vorgangs-ID:

GET https://vision.googleapis.com/v1/operations/operation-id

Beispiel:

curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://vision.googleapis.com/v1/projects/project-id/locations/location-id/operations/1efec2285bd442df

Wenn der Vorgang läuft:

{
  "name": "operations/1efec2285bd442df",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.OperationMetadata",
    "state": "RUNNING",
    "createTime": "2019-05-15T21:10:08.401917049Z",
    "updateTime": "2019-05-15T21:10:33.700763554Z"
  }
}

Sobald der Vorgang abgeschlossen ist, wird der state als DONE angezeigt und Ihre Ergebnisse werden in die von Ihnen angegebene Google Cloud Storage-Datei geschrieben:

{
  "name": "operations/1efec2285bd442df",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.OperationMetadata",
    "state": "DONE",
    "createTime": "2019-05-15T20:56:30.622473785Z",
    "updateTime": "2019-05-15T20:56:41.666379749Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.vision.v1.AsyncBatchAnnotateFilesResponse",
    "responses": [
      {
        "outputConfig": {
          "gcsDestination": {
            "uri": "gs://your-bucket-name/folder/"
          },
          "batchSize": 1
        }
      }
    ]
  }
}

Die JSON-Datei in Ihrer Ausgabedatei ähnelt der [Anfrage zur Dokumenttexterkennung] für ein Bild (/vision/docs/ocr), wobei zusätzlich das Feld context vorhanden ist. Es gibt den Speicherort der angegebenen PDF- oder TIFF-Datei und die Anzahl der Seiten in der Datei an:

output-1-to-1.json

Go

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Go in der Vision-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Go-Referenzdokumentation zur Vision API.

Richten Sie zur Authentifizierung bei Vision die Standardanmeldedaten für Anwendungen (ADC) ein. Weitere Informationen finden Sie unter ADC für eine lokale Entwicklungsumgebung einrichten.


// detectAsyncDocumentURI performs Optical Character Recognition (OCR) on a
// PDF file stored in GCS.
func detectAsyncDocumentURI(w io.Writer, gcsSourceURI, gcsDestinationURI string) error {
	ctx := context.Background()

	client, err := vision.NewImageAnnotatorClient(ctx)
	if err != nil {
		return err
	}

	request := &visionpb.AsyncBatchAnnotateFilesRequest{
		Requests: []*visionpb.AsyncAnnotateFileRequest{
			{
				Features: []*visionpb.Feature{
					{
						Type: visionpb.Feature_DOCUMENT_TEXT_DETECTION,
					},
				},
				InputConfig: &visionpb.InputConfig{
					GcsSource: &visionpb.GcsSource{Uri: gcsSourceURI},
					// Supported MimeTypes are: "application/pdf" and "image/tiff".
					MimeType: "application/pdf",
				},
				OutputConfig: &visionpb.OutputConfig{
					GcsDestination: &visionpb.GcsDestination{Uri: gcsDestinationURI},