Saya telah cuba untuk mendapatkan penyerahan kumpulan Document AI untuk berfungsi tetapi menghadapi beberapa kesukaran. Saya menggunakan RawDocument untuk penyerahan fail tunggal dengan andaian saya boleh mengulangi set data saya (imej 27k), tetapi memilih pemprosesan kelompok kerana ia nampaknya teknik yang lebih sesuai.
Apabila saya menjalankan kod, saya melihat ralat: "Tidak dapat memproses semua dokumen". Beberapa baris pertama maklumat nyahpepijat ialah:
O:17:"GoogleRpcStatus":5:{ s:7:"*Kod";i:3;s:10:"*Mesej";s:32:"Tidak dapat memproses semua dokumen."; s:26:"GoogleRpcStatusdetails"; O:38:"GoogleProtobufInternalRepeatedField":4:{ s:49:"GoogleProtobufInternalRepeatedFieldcontainer";a:0:{}s:44:"GoogleProtobufInternalRepeatedFieldtype";i:11;s:45:"GoogleProtobufInternalRepeatedFieldklass";s:19:"GoogleProtobuf52fAny";s:"GoogleProtobuf52fAny";s s:19:"GoogleProtobufAny";}s:38:"GoogleProtobuf InternalMessagedesc";O:35:"GoogleProtobufInternalDescriptor":13:{s:46:"GoogleProtobufInternalDescriptorfull_name";s:17:"google.rpc.Status";s : 42:"GoogleProtobufInternalDescriptorfield";a:3:{i:1;O:40:"GoogleProtobufInternalFieldDescriptor":14:{s:46:"GoogleProtobufInternalFieldDescriptorname ";s:4:"kod";```
Sokongan untuk pepijat ini menyatakan bahawa punca ralat ialah:
ParametergcsUriPrefix dan gcsOutputConfig.gcsUri perlu bermula dengan gs:// dan berakhir dengan aksara sengkang ke belakang (/). Semak konfigurasi URI baldi.
Saya tidak menggunakan gcsUriPrefix (sepatutnya saya? Baldi Saya > Had Kelompok Maks), tetapi gcsOutputConfig.gcsUri saya berada dalam had tersebut. Senarai fail yang saya sediakan memberikan nama fail (menunjuk ke baldi kanan), jadi tidak sepatutnya ada garis miring ke belakang.
Selamat datang untuk berunding
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('<br>result: %s<br>',serialize($result)); // doSomethingWith($result) } else { $error = $operationResponse->getError(); printf('<br>error: %s<br>', serialize($error)); // handleError($error) } } finally { $documentProcessorServiceClient->close(); } }
Biasanya, ralat
“无法处理所有文档”
disebabkan oleh sintaks fail input atau baldi output yang salah. Memandangkan laluan yang cacat mungkin masih menjadi laluan "sah" ke storan awan, tetapi bukan fail yang anda jangkakan. (Terima kasih kerana menyemak halaman mesej ralat dahulu!)Jika anda ingin menyediakan senarai dokumen khusus untuk diproses, anda tidak perlu menggunakan
gcsUriPrefix
。尽管根据您的代码,您似乎还是将 GCS 目录中的所有文件添加到BatchDocumentsInputConfig.gcs_documents
字段,因此尝试在中发送前缀是有意义的>BatchDocumentsInputConfig.gcs_uri_prefix
dan bukannya senarai fail individu.Nota: Terdapat bilangan maksimum fail yang boleh dihantar dalam satu permintaan kelompok (1000), dan pemproses tertentu mempunyai had halaman mereka sendiri.
https://cloud.google.com/document-ai/quotas#content_limits
Anda boleh cuba membahagikan fail kepada beberapa permintaan kelompok untuk mengelak daripada mencapai had ini. SDK Python Kotak Alat AI Dokumen mempunyai fungsi terbina dalam untuk tujuan ini, tetapi anda boleh cuba melaksanakan semula fungsi ini dalam PHP berdasarkan kes penggunaan anda. https://github.com/googleapis/python-documentai-toolbox/blob/ba354d8af85cbea0ad0cd2501e041f21e9e5d765/google/cloud/documentai_toolbox/utilities/gcs_utilities.py#L213
Ini ternyata pepijat ID-10-T dengan nada PEBKAC yang jelas.
$object->name() tidak mengembalikan nama baldi sebagai sebahagian daripada laluan.
akan
$doc->setGcsUri('gs://'.$object->name());
更改为$doc->setGcsUri('gs://'. $bucketName.'/'.$object->name());
menyelesaikan masalah.