Google Cloud Vision 客户端库 (PHP) 图像标签 - 结果数?

Google Cloud Vision Client Library (PHP) Image Labels - Number of results?

我在 PHP 中使用上面提到的库 (Google Cloud Vision Client Library v1) 为图像分配标签...到目前为止一切顺利。一切正常,除了 returns 比 google 测试页上的结果少......据我所知,它与默认为 10 的 "max_results" 参数有关,但我我找不到 where/how 来手动设置... 在 Python 上有一个类似的问题,它就像将它作为参数传递一样简单 - 我在 PHP 中尝试了很多选项来做到这一点,但显然我做错了什么......

这是文档的 link:https://googleapis.github.io/google-cloud-php/#/docs/cloud-vision/v0.19.3/vision/v1/imageannotatorclient?method=labelDetection 我猜我必须将它传递给 "optionalArgs" 参数...但不确定如何执行此操作...

我的代码大致如下:

require __DIR__ . '/vendor/autoload.php';

use Google\Cloud\Vision\V1\ImageAnnotatorClient;

$this->client = new ImageAnnotatorClient();
$response = $this->client->labelDetection(...THE IMAGE...);
$labels = $response->getLabelAnnotations();

if ($labels) {
    foreach ($labels as $label) {
        // do something with $label->getDescription()
    }
}

有人知道如何在 $labels 数组中获得 更多结果 吗?

新方法

由于我提供的另一个答案似乎已被弃用,我将提供一个使用 setMaxResults method on the Feature object.

的示例
$imageAnnotatorClient = new ImageAnnotatorClient();
$gcsImageUri = 'some/image.jpg';
$source = new ImageSource();
$source->setGcsImageUri($gcsImageUri);
$image = new Image();
$image->setSource($source);
$type = Feature_Type::FACE_DETECTION;
$featuresElement = new Feature();
$featuresElement->setType($type);
$featuresElement->setMaxResults(100); // SET MAX RESULTS HERE
$features = [$featuresElement];
$requestsElement = new AnnotateImageRequest();
$requestsElement->setImage($image);
$requestsElement->setFeatures($features);
$requests = [$requestsElement];
$imageAnnotatorClient->batchAnnotateImages($requests);

已弃用的方法

maxResults 值在 Image constructor

中指定

可以在 Image 对象的源代码中找到 example of this code

 $imageResource = fopen(__DIR__ . '/assets/family-photo.jpg', 'r');
 $image = new Image($imageResource, [
   'FACE_DETECTION',
   'LOGO_DETECTION'
 ], [
     'maxResults' => [
         'FACE_DETECTION' => 1
     ],
     'imageContext' => [
          ....
     ]
   ]
]);

好的,对于仍然可能需要它的任何人,这里有一个工作示例

    use Google\Cloud\Vision\Image;
    use Google\Cloud\Vision\VisionClient;

    $imageResource = fopen(__DIR__ .'/'. $fileIMG, 'r');

    $thePic = new Image($imageResource, [
         'LABEL_DETECTION',
          'LOGO_DETECTION',
          'TEXT_DETECTION'
     ], [
         'maxResults' => [
             'LABEL_DETECTION' => 20,
             'LOGO_DETECTION' => 20,
             'TEXT_DETECTION' => 20
         ],
         'imageContext' => []
     ]);


    $vision = new VisionClient();
    $result = $vision->annotate($thePic);

    $finalLabels = array();

    // do the same for $results->text(), $results->logos()
    if($result->labels()){
        foreach ($result->labels() as $key => $annonObj) {
            $tmp = $annonObj->info();
            $finalLabels[] = $tmp['description'];
        }
    }

但是...正如官方文档中所说

  • 请注意,此客户端将在我们的下一个版本中弃用。按顺序
  • 要接收最新的功能和更新,请
  • 是时候熟悉一下{@see Google\Cloud\Vision\V1\ImageAnnotatorClient}了。

所以我仍然需要一种方法来使用 ImageAnnotatorClient class...有人有什么想法吗?