搜尋

首頁  >  問答  >  主體

批次作業提交錯誤“無法處理所有文件”,uris 似乎正確?

我一直在嘗試讓 Document AI 大量提交正常工作,但遇到了一些困難。我使用 RawDocument 進行單一文件提交,假設我可以迭代我的資料集(27k 映像),但選擇批次處理,因為它似乎是更合適的技術。

當我運行程式碼時,我看到錯誤:「無法處理所有文件」。調試資訊的前幾行是:

O:17:"Google\Rpc\Status":5:{ s:7:"*代碼";i:3;s:10:"*訊息";s:32:"無法處理所有文件。"; 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\RepeatedFieldklass ";s:19:"Google\Protobuf\Any";s:52:"Google\Protobuf\Internal\RepeatedFieldlegacy_klass";s:19:"Google\Protobuf\Any";}s:38:"Google\Protobuf\ Internal\Messagedesc";O:35:"Google\Protobuf\Internal\Descriptor":13:{s:46:"Google\Protobuf\Internal\Descriptorfull_name";s:17:"google.rpc.Status";s: 42:"Google\Protobuf\Internal\Descriptorfield";a:3:{i:1;O:40:"Google\Protobuf\Internal\FieldDescriptor":14:{s:46:"Google\Protobuf\Internal\FieldDescriptorname ";s:4:"代碼";```

#對此錯誤的支援指出錯誤的原因是:

gcsUriPrefix 和 gcsOutputConfig.gcsUri 參數需要以 gs:// 開頭並以反斜線字元 (/) 結尾。檢查儲存桶 URI 的配置。

我沒有使用 gcsUriPrefix(應該嗎?我的儲存桶 > 最大批次限制),但我的 gcsOutputConfig.gcsUri 在這些限制之內。我提供的檔案清單給出了檔案名稱(指向右側儲存桶),因此不應有尾部反斜線。

歡迎諮詢

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粉696891871P粉696891871270 天前471

全部回覆(2)我來回復

  • P粉103739566

    P粉1037395662024-04-01 09:46:00

    通常,錯誤「無法處理所有文件」的原因是輸入檔案或輸出儲存桶的語法不正確。由於格式不正確的路徑可能仍然是雲端儲存的「有效」路徑,但不是您期望的檔案。 (感謝您首先檢查錯誤訊息頁面!)

    如果您要提供要處理的特定文件列表,則不必使用 gcsUriPrefix。儘管根據您的代碼,您似乎還是將GCS 目錄中的所有文件添加到BatchDocumentsInputConfig.gcs_documents 字段,因此嘗試在​​ 中發送前綴是有意義的>BatchDocumentsInputConfig.gcs_uri_prefix 而不是單一文件的列表。

    注意:單一批次請求中可以傳送的檔案最大數量(1000),且特定處理器有自己的頁面限制。

    https://cloud.google.com/document-ai/quotas#content_limits

    您可以嘗試將檔案分成多個批次要求,以避免達到此限制。 Document AI Toolbox Python SDK 具有用於此目的的內建函數,但您可以嘗試根據自己的用例在 PHP 中重新實作此函數。 https:// github.com/googleapis/python-documentai-toolbox/blob/ba354d8af85cbea0ad0cd2501e041f21e9e5d765/google/cloud/documentai_toolbox/utilities/##213.pyp.

    回覆
    0
  • P粉195402292

    P粉1954022922024-04-01 00:22:20

    這被證明是一個 ID-10-T 錯誤,具有明確的 PEBKAC 泛音。

    $object->name() 不會將儲存桶名稱作為路徑的一部分傳回。

    $doc->setGcsUri('gs://'.$object->name()); 改為$doc->setGcsUri('gs://'. $bucketName.'/'.$object->name()); 解決了這個問題。

    回覆
    0
  • 取消回覆