#php #google-cloud-vision
# #php #google-cloud-vision
Вопрос:
Я новичок в Google Cloud Vision API, и я хотел извлечь цвета из изображения, используя их функциональность доминирующего цвета. ниже приведен мой код, основанный на блоге Терренса Райана
$cvurl = "https://vision.googleapis.com/v1/images:annotate?key=API_KEY";
$data = file_get_contents($cache_job);
$base64 = base64_encode($data);
//Create this JSON
$r_json ='{
"requests": [
{
"image": {
"content":"' . $base64. '"
},
"features": [
{
"type": "IMAGE_PROPERTIES",
"maxResults": 200
}
]
}
]
}';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $cvurl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $r_json);
$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ( $status != 200 ) {
die("Error: $cvurl failed status $status" );
}
Код работает, но у меня возникли некоторые проблемы с ним. Есть некоторые цвета, которые явно присутствуют на изображении, но не были включены в ответ API. И поэтому я подумал, что увеличение количества результатов решит проблему, но затем я обнаружил, что изменение параметра «maxResults» (документы Google API: количество результатов, которые будут возвращены) на любое значение ничего не влияет на ответ. Количество результатов фиксируется до 10 цветов, даже если я установил для параметра значение меньше 10 и даже если я изменил изображение. Документация API Google ничего не говорит об этом, поэтому мне было интересно, испытал ли кто-нибудь из вас, ребята, это.
Ответ №1:
Я только что попробовал это сам, и у меня те же результаты. Например, при выполнении LABEL_DETECTION и ограничении результатов до 1 я получаю 1 результат. Выбор IMAGE_PROPERTIES и уменьшение maxResults, похоже, не влияют на результат.
Я попробовал с небольшим изображением с несколькими цветами и, однако, получил только 6 результатов. Результаты структурированы таким образом:
{
"color": {
"red": 198,
"green": 218,
"blue": 199
},
"score": 0.0016616513,
"pixelFraction": 0.0016666667
}
Я предполагаю, что у них есть точка отсечения оценки, где они отбрасывают другие результаты.
Просто из любопытства, почему вы хотите извлечь столько доминирующих цветов? Это не предназначено для извлечения всех цветов из вашего изображения. Это то, чего вы хотите достичь?
Комментарии:
1. Я создаю приложение, которое поможет моим пользователям выбирать цвета для их собственной темы веб-страницы, где они могут загружать изображение или даже скриншот другой веб-страницы, на которой я буду извлекать цвета и добавлять их к выбору цветов пользователем, а не просто предоставлять им цветовой круг / палитру. Дело в том, что иногда даже очевидные цвета не возвращаются / не обнаруживаются. Примером является скриншот страницы входа в Facebook, а в ответе API даже нет синего цвета, который является целым баннером страницы.