Практический тест · Уровень: с нуля
Как искать по изображению: сравниваем Google Images, Lens, Multisearch и AI Mode
Один режим хорошо находит страницы с копиями изображения, другой распознаёт предмет, третий уточняет запрос текстом, а четвёртый объясняет сцену. Чтобы не выбирать их наугад, мы соберём единый набор из 24 изображений, прогоним его четырьмя способами и получим воспроизводимую таблицу точности и времени без выдуманных оценок.
Сначала разделим четыре разных задачи
Визуальный поиск — это общий класс методов, в которых запросом служит изображение или его часть. Внутри него скрываются разные задачи: поиск копий, распознавание объекта, уточнение изображения текстом и ответ на вопрос о сцене.
Из-за похожего интерфейса легко решить, что Google Images, Google Lens, Multisearch и AI Mode — четыре названия одного инструмента. На практике у них разные входные данные и разные признаки успешного ответа.
| Способ | Что передаём | Основной результат | Когда считать полезным |
|---|---|---|---|
| Google Images | Изображение или обычный текстовый запрос | Страницы и похожие изображения из веб-индекса | Нужна страница, публикация или другая копия файла |
| Google Lens | Изображение, снимок камеры или выделенная область | Визуальные совпадения, распознанные объекты и текст | Нужно понять, что находится в выбранной части кадра |
| Multisearch | Изображение плюс текстовое уточнение | Результаты с учётом визуального и текстового контекста | Объект виден, но требуется задать цвет, модель, место или намерение |
| AI Mode | Изображение и вопрос на естественном языке | Сводный ответ с объяснением и возможными ссылками | Нужно ответить на вопрос о сцене или связать несколько признаков |
Интерфейсы Google могут связывать эти режимы между собой. Например, загрузка изображения из Google Images может открыть результаты Lens. В тесте следует оценивать не внутреннее устройство продукта, а четыре доступных пользователю сценария входа: поиск страниц, визуальное распознавание, изображение с уточнением и диалоговый вопрос.
Конкретный кейс: неизвестная лампа в фотографии интерьера
Представим, что редактор получил фотографию комнаты. В углу стоит настольная лампа, на стене висит постер, а на тумбе лежит устройство с неразборчивым логотипом. Нужно решить три задачи:
- Найти известную редакции страницу, с которой была сохранена фотография.
- Определить тип и, если это возможно по видимым признакам, модель лампы.
- Ответить на вопрос: «Какой элемент на фотографии указывает, что рабочее место рассчитано на видеозвонки?»
Первая задача проверяет поиск источника. Вторая — распознавание объекта. Третья — понимание сцены. Один удачный ответ на вопрос о лампе ничего не говорит о способности найти исходную страницу, поэтому смешивать эти результаты в одну субъективную оценку нельзя.
Для каждой задачи нужен заранее записанный контрольный ответ: эталонный URL, точное название объекта или проверяемый факт о сцене. Он должен существовать до запуска поиска. Если записать «правильный» ответ после просмотра результатов, легко принять убедительную догадку системы за истину.
Шаг 1. Собираем единый набор из 24 изображений
Разделите набор на три равные группы. Каждая группа проверяет одну способность, но все 24 файла нужно открыть во всех четырёх режимах. В результате получится 96 запусков.
| Группа | Количество | Что проверяем | Что хранится в эталоне |
|---|---|---|---|
| source | 8 | Поиск известной исходной страницы | Точный URL и допустимые эквивалентные URL |
| object | 8 | Распознавание предмета, растения, устройства или модели | Категория, марка и модель в доступной детализации |
| scene | 8 | Ответ на проверяемый вопрос о сцене | Вопрос, правильный ответ и видимый признак |
Группа source: поиск источника
Выберите восемь веб-изображений, для которых вы точно знаете страницу происхождения. Сохраните URL сразу. Не называйте «источником» самую раннюю публикацию во всём интернете, если это невозможно доказать. В рамках теста источник — это заранее зафиксированная целевая страница.
Сделайте набор неоднородным:
- два файла без изменений;
- два уменьшенных файла;
- два кадрированных варианта;
- один вариант со слегка изменённой яркостью;
- один скриншот, содержащий изображение и часть интерфейса.
Храните оригинал отдельно. Изменённый файл должен иметь собственный идентификатор, а в эталоне нужно отметить вид преобразования.
Группа object: распознавание объекта
Возьмите восемь предметов, названия которых можно проверить независимо от поисковой системы. Например, модель устройства можно сверить с маркировкой на корпусе или упаковке, а вид инструмента — с документацией владельца.
Не требуйте невозможной точности. Если две модели внешне неотличимы и серийный номер не виден, эталоном должна быть серия или категория, а не конкретная модификация. Иначе тест измерит угадывание.
Группа scene: вопросы о сцене
Для каждого кадра сформулируйте один вопрос, ответ на который виден на изображении и не требует знания скрытого контекста. Подходят вопросы такого типа:
- «Сколько свободных мест осталось на стойке?»
- «Какой предмет нужно убрать, чтобы открыть дверцу шкафа?»
- «С какой стороны от монитора находится настольная лампа?»
- «Какой видимый признак указывает на дождливую погоду?»
Не подходят вопросы вроде «О чём думает человек?» или «Почему владелец выбрал эту мебель?». Правильный ответ на них нельзя проверить по пикселям.
Структура папки
visual-search-test/
├── images/
│ ├── source-01.jpg
│ ├── source-02.jpg
│ ├── object-01.jpg
│ ├── object-02.jpg
│ ├── scene-01.jpg
│ └── scene-02.jpg
├── ground-truth.csv
├── observations.csv
└── summarize.py
В реальном наборе продолжите нумерацию до восьми файлов каждой группы.
Файл с эталонами
image_id,category,target,question,allowed_equivalents,notes
source-01,source,https://example.test/page-1,,,original
source-02,source,https://example.test/page-2,,,cropped
object-01,object,точное проверенное название,,допустимое более общее название,
scene-01,scene,проверенный ответ,проверяемый вопрос,допустимая переформулировка,
Адреса example.test выше — только схема записи, а не результаты или рекомендуемые источники. Замените строки собственными проверенными данными.
Фиксируем версии файлов
Чтобы случайно не заменить изображение между запусками, вычислите для каждого файла криптографический хеш:
sha256sum images/* > image-checksums.txt
Команда не определяет визуальное сходство. Она лишь подтверждает, что байты файла не изменились. Перцептивный хеш, напротив, может использоваться для сравнения визуально похожих вариантов, но для базового теста он не обязателен.
Не удаляйте EXIF-метаданные только у части файлов: координаты, модель камеры и комментарии могут повлиять на результат или раскрыть лишнюю информацию. Если метаданные требуется удалить ради приватности, сделайте это до вычисления контрольных сумм и одинаково обработайте весь набор.
Шаг 2. Задаём правила до начала поиска
Главная защита от самообмана — заранее определить, что считается успехом, когда останавливается таймер и как оценивается частично правильный ответ.
Шкала точности
| Баллы | Источник | Объект | Сцена |
|---|---|---|---|
| 1 | Найден целевой или заранее разрешённый эквивалентный URL | Ответ соответствует требуемой детализации эталона | Ответ верен и опирается на видимый признак |
| 0,5 | Не используется | Верна категория или серия, но не достигнута доступная точность | Основной вывод верен, но объяснение неполно |
| 0 | Целевой URL не найден | Ответ неверен, не проверяем или является догадкой | Ответ неверен, противоречит кадру или не отвечает на вопрос |
Для источника используйте строгие 0 или 1. Совпадение самого изображения на другом сайте полезно, но оно не выполняет задачу поиска заранее выбранной страницы.
Окно просмотра
Ограничьте просмотр первыми десятью содержательными результатами или тремя минутами — в зависимости от того, что наступит раньше. Не листайте выдачу бесконечно для любимого режима.
Замер времени
Запускайте таймер в момент, когда начинаете загружать файл или вставлять изображение. Останавливайте его после появления проверяемого правильного результата. Время на вход в аккаунт, принятие cookie и первое знакомство с интерфейсом измерьте отдельно во время пробного запуска и не включайте в основной тест.
Если правильного ответа нет через 180 секунд, запишите:
score = 0
seconds = 180
status = fail
Это ограничение нужно для честного сравнения. Если считать время только успешных попыток, режим с большим количеством провалов может ошибочно выглядеть самым быстрым.
Одинаковые условия
- Используйте одно устройство и одну сеть.
- Проводите тест в одном браузере или одинаково настроенных профилях.
- Отключите расширения, меняющие страницу или блокирующие её части.
- Зафиксируйте язык интерфейса, регион, тип аккаунта и дату теста.
- Не переносите подсказки, найденные одним режимом, в другой.
- Чередуйте режимы, чтобы обучение не помогало последнему инструменту.
Удобный порядок для первого изображения: Images → Lens → Multisearch → AI Mode. Для следующего сдвиньте начало: Lens → Multisearch → AI Mode → Images. Такой круговой порядок уменьшает влияние привычки и усталости.
Один набор, но подходящий запрос
Равенство не означает, что нужно лишить режим его основной функции. Multisearch должен получить изображение и короткое уточнение, а AI Mode — изображение и полный вопрос. Важно стандартизировать запросы внутри каждой категории.
| Категория | Google Images | Lens | Multisearch | AI Mode |
|---|---|---|---|---|
| source | Загрузить файл, искать страницы с совпадением | Загрузить весь кадр, открыть визуальные совпадения | Добавить: «исходная публикация этого изображения» | Спросить: «Найди страницу-источник. Не считай похожую картинку источником» |
| object | Загрузить файл, проверить подписи и похожие изображения | Выделить только целевой объект | Добавить требуемую детализацию: «марка и модель» | Спросить о типе, марке и модели и попросить отделить факты от предположений |
| scene | Загрузить весь кадр и искать подсказки в результатах | Оставить весь кадр, проверить доступные действия | Добавить заранее записанный вопрос | Передать изображение и тот же заранее записанный вопрос |
Если конкретный интерфейс не позволяет выполнить действие, не подменяйте его другим сервисом. Запишите unsupported, оценку 0 и время 180 секунд. Отсутствие нужной функции — часть практического результата.
Шаг 3. Проводим 96 запусков
Подготовительный прогон
Возьмите одно изображение, не входящее в основной набор, и один раз откройте все режимы. Найдите кнопки загрузки, выделения области и добавления текста. Проверьте, доступен ли AI Mode вашему аккаунту, языку и региону. Подготовительный файл не добавляйте в результаты.
Заполняем журнал наблюдений
Создайте observations.csv с такими колонками:
image_id,category,method,score,seconds,status,returned_answer,returned_url,notes
source-01,source,google_images,,,,,,
source-01,source,lens,,,,,,
source-01,source,multisearch,,,,,,
source-01,source,ai_mode,,,,,,
Допустимые значения method:
google_images
lens
multisearch
ai_mode
Не вставляйте в CSV переносы строк из длинного ответа. Сохраните короткую формулировку, а полный текст или снимок экрана положите в отдельную папку доказательств.
Запуск Google Images
- Откройте точку входа поиска изображений.
- Запустите таймер непосредственно перед загрузкой файла.
- Для категории
sourceпроверяйте страницы с совпадающими изображениями, а не только плитки похожих картинок. - Для
objectсмотрите, появляется ли проверяемое название в подписях и результатах. - Для
sceneне формулируйте новый вопрос после того, как увидели подсказку другого режима. - Остановите таймер при достижении эталона или на отметке 180 секунд.
Запуск Google Lens
- Загрузите тот же файл.
- Для поиска источника оставьте рамку на всём изображении.
- Для распознавания объекта выделите только заранее выбранный предмет.
- Сделайте один основной запуск. Если меняете рамку, отметьте это как дополнительную попытку.
- Проверьте, не распознан ли текст вместо самого объекта.
Lens может извлекать надписи с помощью OCR. Точно прочитанный логотип способен привести к правильной модели, но в заметках полезно указать, был ли результат получен по форме объекта или по тексту на нём.
Запуск Multisearch
- Загрузите изображение и выберите область тем же способом, что в Lens.
- Добавьте только стандартизированное уточнение.
- Не перечисляйте предполагаемые бренды: это подскажет системе ответ.
- Для сцены используйте исходный вопрос без дополнительных объяснений.
- Запишите как текстовую формулировку, так и найденный URL, если он есть.
Запуск AI Mode
- Создайте новый диалог для каждого изображения, если интерфейс сохраняет контекст.
- Передайте файл и заранее подготовленный вопрос.
- Не исправляйте ответ в той же измеряемой попытке.
- Если ответ содержит ссылку, откройте её и проверьте, подтверждает ли она вывод.
- Остановите таймер только после получения результата, который можно сверить с эталоном.
Уверенный тон AI-ответа не является доказательством. Если система называет модель предмета, но видимые признаки не позволяют отличить её от соседней модели, выставьте балл по правилам эталона, а не по убедительности текста.
Что считать одной попыткой
Одна попытка включает загрузку, стандартное выделение области и один заранее записанный запрос. Уточняющий вопрос, повторная загрузка, новый кроп или добавление предполагаемой марки — отдельная попытка. Их можно исследовать после основного теста, но нельзя незаметно смешивать с первой попыткой.
Шаг 4. Получаем таблицу точности и времени
Ниже — итоговая форма. Прочерки означают, что значения должны быть рассчитаны по вашему журналу, а не взяты из непроверенного чужого теста.
| Способ | Источник, % | Объект, % | Сцена, % | Общая точность, % | Медианное время, с | Неудачи из 24 |
|---|---|---|---|---|---|---|
| Google Images | — | — | — | — | — | — |
| Google Lens | — | — | — | — | — | — |
| Multisearch | — | — | — | — | — | — |
| AI Mode | — | — | — | — | — | — |
Точность категории рассчитывается как сумма баллов, делённая на количество изображений в категории:
точность = сумма баллов / число заданий × 100%
При восьми заданиях результат 6,5 балла означает:
6,5 / 8 × 100% = 81,25%
Это пример вычисления, а не результат какого-либо из четырёх сервисов.
Для времени используйте медиану, а не среднее значение. Медиана меньше искажается одним очень долгим запуском. Неудачные попытки остаются в расчёте со значением 180 секунд.
Автоматический подсчёт без дополнительных библиотек
Сохраните следующий скрипт как summarize.py. Он ожидает по одной строке для каждой пары «изображение — метод», проверяет оценки и создаёт CSV со сводной таблицей.
#!/usr/bin/env python3
import csv
import statistics
from collections import defaultdict
METHODS = [
"google_images",
"lens",
"multisearch",
"ai_mode",
]
CATEGORIES = ["source", "object", "scene"]
TIME_LIMIT = 180.0
rows = []
with open("observations.csv", newline="", encoding="utf-8") as source:
reader = csv.DictReader(source)
required = {
"image_id",
"category",
"method",
"score",
"seconds",
"status",
}
missing = required - set(reader.fieldnames or [])
if missing:
raise SystemExit(
"Нет обязательных колонок: " + ", ".join(sorted(missing))
)
seen = set()
for line_number, row in enumerate(reader, start=2):
key = (row["image_id"], row["method"])
if key in seen:
raise SystemExit(
f"Строка {line_number}: повторная попытка {key}"
)
seen.add(key)
if row["method"] not in METHODS:
raise SystemExit(
f"Строка {line_number}: неизвестный метод"
)
if row["category"] not in CATEGORIES:
raise SystemExit(
f"Строка {line_number}: неизвестная категория"
)
try:
score = float(row["score"].replace(",", "."))
seconds = float(row["seconds"].replace(",", "."))
except ValueError:
raise SystemExit(
f"Строка {line_number}: балл или время не являются числом"
)
if score not in {0.0, 0.5, 1.0}:
raise SystemExit(
f"Строка {line_number}: допустимы баллы 0, 0.5 и 1"
)
if not 0 <= seconds <= TIME_LIMIT:
raise SystemExit(
f"Строка {line_number}: время должно быть от 0 до 180"
)
if row["status"] not in {"ok", "fail", "unsupported"}:
raise SystemExit(
f"Строка {line_number}: неверный статус"
)
if row["status"] in {"fail", "unsupported"}:
if score != 0 or seconds != TIME_LIMIT:
raise SystemExit(
f"Строка {line_number}: неудача требует score=0 "
f"и seconds={int(TIME_LIMIT)}"
)
rows.append({
"image_id": row["image_id"],
"category": row["category"],
"method": row["method"],
"score": score,
"seconds": seconds,
"status": row["status"],
})
by_method = defaultdict(list)
for row in rows:
by_method[row["method"]].append(row)
def accuracy(items):
if not items:
return ""
return f"{sum(item['score'] for item in items) / len(items) * 100:.2f}"
with open("summary.csv", "w", newline="", encoding="utf-8") as target:
fieldnames = [
"method",
"source_accuracy_percent",
"object_accuracy_percent",
"scene_accuracy_percent",
"overall_accuracy_percent",
"median_seconds",
"failures",
"attempts",
]
writer = csv.DictWriter(target, fieldnames=fieldnames)
writer.writeheader()
for method in METHODS:
items = by_method[method]
if not items:
continue
category_items = {
category: [
item for item in items
if item["category"] == category
]
for category in CATEGORIES
}
writer.writerow({
"method": method,
"source_accuracy_percent":
accuracy(category_items["source"]),
"object_accuracy_percent":
accuracy(category_items["object"]),
"scene_accuracy_percent":
accuracy(category_items["scene"]),
"overall_accuracy_percent": accuracy(items),
"median_seconds": (
f"{statistics.median(item['seconds'] for item in items):.2f}"
),
"failures": sum(
item["status"] != "ok" for item in items
),
"attempts": len(items),
})
print("Готово: summary.csv")
Запустите его из папки эксперимента:
python3 summarize.py
Затем откройте summary.csv в табличном редакторе и перенесите значения в итоговую таблицу. Для полного набора в строке каждого способа должно быть 24 попытки.
Быстрая проверка количества строк
В основном журнале ожидается 96 строк данных плюс заголовок:
wc -l observations.csv
Ожидаемое число строк файла — 97. Если оно отличается, найдите пропущенный или повторный запуск. Сам скрипт обнаружит повтор пары image_id + method, но не сможет узнать, что в наборе должно быть именно 24 изображения, если вы не внесли их в журнал.
Как проверить, что таблице можно доверять
1. Сверьте каждый успешный источник
Откройте найденный URL и убедитесь, что целевое изображение действительно находится на странице. Совпадение заголовка, домена или миниатюры в выдаче недостаточно. Проверьте также перенаправления и мобильные версии адреса.
2. Отделите страницу от файла
Прямой адрес файла изображения и страница публикации — разные результаты. Если эталон содержит страницу статьи, ссылка на CDN не получает полный балл, если вы заранее не добавили её в список допустимых эквивалентов.
3. Проверяйте объект независимым признаком
Сверьте маркировку, упаковку, инструкцию или собственную запись о предмете. Не используйте ответ другого режима как эталон. Если независимой проверки нет, пометьте изображение как спорное и исключите его из основного результата.
4. Проверяйте ответы о сцене по кадру
Ответ должен следовать из видимых деталей. Если вопрос допускает несколько трактовок, попросите второго человека оценить строку, не показывая ему название режима. Разногласие означает, что критерий или вопрос нужно уточнить.
5. Сохраняйте доказательства
Для каждого запуска полезно сохранить:
- снимок экрана с результатом;
- полный запрос;
- выданную ссылку;
- время и статус;
- пояснение причины оценки 0,5 или 0.
Не публикуйте снимки экрана, если на них видны данные аккаунта или история запросов.
6. Повторите спорные строки вслепую
Если разница между двумя режимами зависит от одной попытки, повторите весь набор в другой день, а не только удобный пример. Результат может изменяться из-за обновления индекса, персонализации и интерфейса.
Типичные сбои и что с ними делать
Находятся похожие изображения, но не источник
Это нормальный провал задачи source. Система могла правильно понять содержание кадра, но не связала его с целевой страницей. Зафиксируйте 0 по источнику и не превращайте визуальное сходство в частичный балл.
Рамка Lens выбирает не тот предмет
Для категории object один раз установите рамку вокруг заранее выбранного объекта. Сохраните снимок области. Если приходится несколько раз подбирать кроп под желаемый ответ, это уже оптимизированная, а не стандартная попытка.
Текст на предмете перетягивает результат
Система может найти продукт по крупному логотипу, не распознав форму предмета. Это всё ещё практический успех, если задача — определить объект. Но отметьте механизм в заметках. Для отдельного теста устойчивости можно подготовить копию с закрытым логотипом и оформить её как новый файл.
Multisearch игнорирует уточнение
Сократите запрос до одного намерения: «эта куртка, но синяя», «модель этого разъёма» или «исходная публикация изображения». Не смешивайте поиск источника, цены, магазина и объяснение сцены в одной измеряемой попытке.
AI Mode отвечает убедительно, но без проверки
Оцените только утверждения, которые можно сопоставить с эталоном. Если ответ содержит несколько вариантов, полный балл возможен лишь тогда, когда эталон допускает такую неопределённость. Список из пяти моделей, среди которых случайно есть правильная, не равен идентификации модели.
Режим недоступен
Запишите unsupported, 0 баллов и 180 секунд. Дополнительно укажите регион, язык, устройство и тип аккаунта. Не используйте VPN или чужой аккаунт посреди основного теста: это изменит условия только для части запусков.
Появилась проверка CAPTCHA или ограничение запросов
Остановите сессию и продолжите позже с того же места. Не записывайте время ожидания CAPTCHA как скорость поиска. Если ограничения повторяются, уменьшите размер дневной серии и одинаково распределите методы по сериям.
Выдача изменилась при повторе
Сохраните обе попытки и их даты. Не заменяйте старую строку более удачной. Для оценки стабильности можно провести второй полный прогон и вывести отдельные таблицы «прогон 1» и «прогон 2».
Один инструмент открыл интерфейс другого
Запишите фактический маршрут в notes. Если Google Images после загрузки передал файл в Lens, это важное наблюдение о пользовательском сценарии. Не утверждайте на основании интерфейса, что внутренние системы полностью одинаковы.
Как выбирать режим до получения собственных чисел
Таблица измерений важнее общего совета, но начать можно с характера задачи:
| Вопрос пользователя | Разумная первая попытка | Что проверить после ответа |
|---|---|---|
| «Где ещё опубликовано это изображение?» | Google Images или визуальные совпадения Lens | Открывается ли нужная страница и действительно ли на ней есть файл |
| «Что это за предмет?» | Lens с точным выделением области | Не получен ли ответ только из случайной надписи |
| «Найди такую же вещь, но другого цвета» | Multisearch | Сохранены ли форма и тип объекта, а не только цвет |
| «Что происходит на фотографии и почему?» | AI Mode | Какие части ответа видны в кадре, а какие являются предположением |
| «Прочитай маркировку» | Lens | Не перепутаны ли похожие символы, цифры и буквы |
| «Объясни, какой предмет мешает открыть ящик» | AI Mode или Multisearch с вопросом | Правильно ли поняты пространственные отношения |
Если цена ошибки высока, используйте двухступенчатую схему: сначала найдите кандидата визуальным способом, затем подтвердите его независимым источником или физической маркировкой. Ответ поискового режима не заменяет проверку.
Ограничения эксперимента
- 24 изображения — небольшой набор. Он показывает пригодность режимов для ваших примеров, но не доказывает универсальное превосходство.
- Результаты зависят от состава набора. Фотографии товаров, произведений искусства, растений и улиц дают разные профили сложности.
- Выдача меняется. Индекс, модели, интерфейсы и доступность функций могут обновиться после теста.
- Есть персонализация. Аккаунт, регион, язык, устройство и история могут влиять на результат.
- Время включает работу человека. Оно измеряет полный пользовательский сценарий, а не только скорость сервера.
- Источник не всегда можно доказать. Найденная ранняя страница может быть копией более старой удалённой публикации.
- Ответ о сцене может быть неоднозначным. Нечёткий вопрос снижает качество оценки всех режимов.
- Недоступность функции — локальный результат. Она может относиться к конкретному аккаунту или региону, а не ко всем пользователям.
Поэтому рядом с итоговой таблицей всегда сохраняйте описание набора, дату, язык, регион, устройство, браузер, правила оценки и лимит времени. Без этих данных числа трудно повторить и нельзя корректно сравнивать с чужим экспериментом.
Финальный чек-лист
- Подготовлены 8 изображений для источника, 8 для объекта и 8 для сцены.
- Для каждого файла заранее записан проверяемый эталон.
- Зафиксированы контрольные суммы изображений.
- Определены шкала 0 / 0,5 / 1 и лимит 180 секунд.
- Сделан пробный запуск на файле вне основного набора.
- Каждое из 24 изображений проверено четырьмя способами.
- Неудачи сохранены со временем 180 секунд, а не удалены.
- Успешные URL открыты и проверены вручную.
- Спорные ответы оценены вторым человеком или исключены.
summarize.pyсформировал итоговую таблицу.- Рядом с результатами указаны условия и ограничения теста.
Готовый результат — не абстрактный рейтинг сервисов, а ваша таблица из семи показателей: точность поиска источника, распознавания объекта и ответа о сцене, общая точность, медианное время и число неудач для каждого из четырёх способов. По ней можно выбирать инструмент под конкретную задачу, а не под самый эффектный единичный пример.