Ярлыки изображений клиентской библиотеки Google Cloud Vision (PHP) - количество результатов? - PullRequest
0 голосов
/ 21 марта 2019

Я использую упомянутую выше библиотеку (Google Cloud Vision Client Library v1) в PHP для назначения ярлыков изображениям ... пока все хорошо. Все работает, за исключением того, что возвращает меньше результатов, чем на тестовой странице Google ... насколько я понимаю, это связано с параметром "max_results", который по умолчанию равен 10, но я не могу найти, где / как установить это вручную ... Здесь был похожий вопрос на Python, и это было так же просто, как передать его в качестве параметра - я пробовал много вариантов сделать это в PHP, но, очевидно, я делаю что-то не так ...

Вот ссылка на документацию: https://googleapis.github.io/google-cloud-php/#/docs/cloud-vision/v0.19.3/vision/v1/imageannotatorclient?method=labelDetection Я предполагаю, что должен передать его параметру "AdditionalArgs" ... но не совсем уверен, как это сделать ...

Вот более-менее мой код:

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

Кто-нибудь получил идею, как получить больше результатов в массиве $ label?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Новый метод

Так как другой ответ, который я предоставил, кажется устаревшим, я собираюсь предоставить пример, который использует метод setMaxResults для объекта Feature .

$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 указывается в Конструкторе изображений

An пример этого кода можно найти в исходном коде объекта Image.

 $imageResource = fopen(__DIR__ . '/assets/family-photo.jpg', 'r');
 $image = new Image($imageResource, [
   'FACE_DETECTION',
   'LOGO_DETECTION'
 ], [
     'maxResults' => [
         'FACE_DETECTION' => 1
     ],
     'imageContext' => [
          ....
     ]
   ]
]);
0 голосов
/ 26 марта 2019

ОК, так что для тех, кому все еще может понадобиться это, вот рабочий пример

    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 ... есть идеи у кого-нибудь?

...