Ralat penyerahan kerja kelompok "Tidak dapat memproses semua dokumen" uris nampaknya betul?
P粉696891871
P粉696891871 2024-03-31 14:10:13
0
2
392

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:

Parameter

gcsUriPrefix 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();
        }    
    }

P粉696891871
P粉696891871

membalas semua(2)
P粉103739566

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

P粉195402292

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!