Fehler bei der Übermittlung des Batch-Jobs: „Alle Dokumente konnten nicht verarbeitet werden“, scheinen die URIS korrektPhp

PHP-Programmierer chatten hier
Guest
 Fehler bei der Übermittlung des Batch-Jobs: „Alle Dokumente konnten nicht verarbeitet werden“, scheinen die URIS korrekt

Post by Guest »

Ich habe versucht, die Batch-Übermittlung von Document AI zum Laufen zu bringen, hatte aber einige Schwierigkeiten. Ich verwende RawDocument für die Übermittlung einzelner Dateien und nehme an, ich könnte einfach über meinen Datensatz (27.000 Bilder) iterieren, habe mich aber für Batch entschieden, da dies die geeignetere Technik zu sein scheint.
Wenn ich meinen Code ausführe Ich erhalte die Fehlermeldung „Alle Dokumente konnten nicht verarbeitet werden“. Die ersten paar Zeilen der Debug-Informationen lauten:

O:17:"Google\Rpc\Status":5:{
s:7 :"*code";i:3;s:10:"*message";s:32:"Fehler beim Verarbeiten aller Dokumente.";
s:26:"Google\Rpc\Statusdetails";
O:38:"Google\Protobuf\Internal\RepeatedField":4:{
s:49:"Google\Protobuf\Internal\RepeatedFieldcontainer";a:0:{}s:44:"Google\Protobuf\Internal\RepeatedFieldtype";i:11;s:45:"Google\Protobuf\Internal \RepeatedF ieldklass";s:19:"Google\Protobuf\Any";s:52:"Google\Protobuf\Internal\RepeatedFieldlegacy_klass";s:19:"Google\Protobuf\Any";}s:38:"Google\Protobuf \Intern\Mes sagedesc";O:35:"Google\Protobuf\Internal\Descriptor":13:{s:46:"Google\Protobuf\Internal\Descriptorfull_name";s:17:"google.rpc.Status";s:42: „Google\Protobuf\In ternal\Descriptorfield";a:3:{i:1;O:40:"Google\Protobuf\Internal\FieldDescriptor":14:{s:46:"Google\Protobuf\Internal\FieldDescriptorname";s:4:" code";```

Der Support für diesen Fehler besagt, dass der Grund für den Fehler ist:

Das gcsUriPrefix und gcsOutputConfig. gcsUri-Parameter müssen mit gs:// beginnen und mit einem abschließenden Backslash-Zeichen (/) enden. Überprüfen Sie die Konfiguration für die Bucket-URIs.

Ich verwende nicht gcsUriPrefix (sollte ich? Meine Buckets > maximales Batch-Limit), aber mein gcsOutputConfig.gcsUri ist innerhalb diese Grenzen. Die von mir bereitgestellte Dateiliste enthält Dateinamen (die auf den rechten Bucket zeigen) und sollte daher keinen abschließenden Backslash enthalten.
Beratung willkommen

Code: Select all

    function filesFromBucket( $directoryPrefix ) {
// NOT recursive, does not search the structure
$gcsDocumentList = [];

// see https://cloud.google.com/storage/docs/samples/storage-list-files-with-prefix
$bucketName = 'my-input-bucket';
$storage = new StorageClient();
$bucket = $storage->bucket($bucketName);
$options = ['prefix' => $directoryPrefix];
foreach ($bucket->objects($options) as $object) {
$doc = new GcsDocument();
$doc->setGcsUri('gs://'.$object->name());
$doc->setMimeType($object->info()['contentType']);
array_push( $gcsDocumentList, $doc );
}

$gcsDocuments = new GcsDocuments();
$gcsDocuments->setDocuments($gcsDocumentList);
return $gcsDocuments;
}

function batchJob ( ) {
$inputConfig = new BatchDocumentsInputConfig( ['gcs_documents'=>filesFromBucket('the-bucket-path/')] );

// see https://cloud.google.com/php/docs/reference/cloud-document-ai/latest/V1.DocumentOutputConfig
// nb: all uri paths must end with / or an error will be generated.
$outputConfig = new DocumentOutputConfig(
[ 'gcs_output_config' =>
new GcsOutputConfig( ['gcs_uri'=>'gs://my-output-bucket/'] ) ]
);

// see https://cloud.google.com/php/docs/reference/cloud-document-ai/latest/V1.DocumentProcessorServiceClient
$documentProcessorServiceClient = new DocumentProcessorServiceClient();
try {
// derived from the prediction endpoint
$name = 'projects/######/locations/us/processors/#######';
$operationResponse = $documentProcessorServiceClient->batchProcessDocuments($name, ['inputDocuments'=>$inputConfig, 'documentOutputConfig'=>$outputConfig]);
$operationResponse->pollUntilComplete();
if ($operationResponse->operationSucceeded()) {
$result = $operationResponse->getResult();
printf('
result: %s
',serialize($result));
// doSomethingWith($result)
} else {
$error = $operationResponse->getError();
printf('
error: %s
', serialize($error));
// handleError($error)
}
} finally {
$documentProcessorServiceClient->close();
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post