Проект Video Color

Описание

Перед всеми нами ежедневно встаёт задача поиска информации. Требуется найти текст, изображения, аудио или видео информацию. Чаще всего для поискового запроса используется текст. Реже - изображения. Есть сервисы вроде "Shazam", которые ищут музыку используя запись звука. Мы сосредоточились на создании поискового сервиса, который осуществляет поиск видео. В качестве параметров для запроса мы используем изображения.

Сайт

Сайт находится по адресу www.videocolor.aapsoftware.ru

Список статей

Список видео

Библиотека для поиска

Для поиска видео по скриншоту для сторонних веб-сайтов на PHP была написана библиотека Video Color Search Client.

Есть два варианта получения данной библиотеки:

  • GitHub

  • Packagist.org

GitHub

Для клонирования проекта с GitHub откройте окошко терминала, перейдите в рабочий каталог и выполните следующую команду:

git clone https://github.com/alekseev23/VideoColorSearchClientPHP.git

Packagist.org

Для установки пакета с помощью Composer введите в консоли следующую команду:

php composer.phar require aap_software/video_color_search_client

После её выполнения в каталоге vendor появится подкаталог aap_software.

Использование библиотеки

Тестовый скрипт

  • Откройте окошко терминала

  • Перейдите в каталог проекта, туда где находится файл sample.php

  • Выполните следующую команду

php sample.php test.jpg

В результате работы скрипта появится текстовая информация о фильме. Попробуйте использовать другой скриншот. Где его взять? В Интернете полно кадров из фильмов.

Код примера

Давайте нашем тестовый скрипт example.php и разберём его работу.

<?php
declare(strict_types=1);
require("vendor/autoload.php");
$img = imagecreatefromjpeg("test.jpg");
$search = new AapSoftware\VideoColor\SearchClient();
$obj = $search->get($img);
imagedestroy($img);
if ($obj === null) {
    echo "Server not connected!\n";
} elseif (!$obj->result) {
    echo "Not found\n";
} else {
    var_dump($obj);
}

Сохраняем, копируем в каталог изображение test.jpg и запускаем его:

php example.php

В результате выполнения увидим результат выполнения поискового запроса.

Подробный разбор кода

Включаем режим строгой типизации.

<?php
declare(strict_types=1);

Подключаем нашу библиотеку

require("vendor/autoload.php");

Создаём в памяти изображение из JPEG файла test.jpg

$img = imagecreatefromjpeg("test.jpg");

Создаём экземпляр класса SearchClient.

$search = new AapSoftware\VideoColor\SearchClient();

Выполняем поисковый запрос просто передав наше изображение.

$obj = $search->get($img);

Удаляем ставшее ненужным изображение.

imagedestroy($img);

Анализируем результат и если нет ошибок, то выводим полученную информацию.

if ($obj === null) {
    echo "Server not connected!\n";
} elseif (!$obj->result) {
    echo "Not found\n";
} else {
    var_dump($obj);
}

Замечание 1

Если не использовать автозагрузку классов, то можно написать иначе.

require("src/SearchClient.php");

Замечание 2

Если нужно получить информацию о видео не на английском (работает по-умолчанию) а на русском языке, то поисковый запрос следует немного изменить и добавить второй параметр.

$obj = $search->get($img,"ru");

Комментарии (10)


  1. NeoCode
    25.02.2022 08:27
    +1

    Поиск медиаконтента - в целом весьма интересная тема, но слищком мало по этой теме информации

    Существуют ли какие-то "общепринятые" решения в этой области? Например для обычного хеширования (применяемого в том числе в p2p сетях) применяют некий набор хешей со стандартными алгортмами. А для перцептивных хешей изображений, аудио и видео есть такие общепринятые решения?

    Предоставляют ли крупные веб-сервисы (поисковики, соцсети) возможность поиска по готовому хешу?


    1. aapsoftware Автор
      25.02.2022 08:34

      Поиск медиаконтента - в целом весьма интересная тема, но слищком мало по этой теме информации

      В целом согласен, но есть очень интересные публикации. Вот, наткнулся недавно, хотя сами статьи опубликованы 5 лет назад.

      Существуют ли какие-то "общепринятые" решения в этой области? Например для обычного хеширования (применяемого в том числе в p2p сетях) применяют некий набор хешей со стандартными алгортмами. А для перцептивных хешей изображений, аудио и видео есть такие общепринятые решения?

      Нет, не встречал. Думаю, отчасти это связано с тем, что компании, занимающиеся этим, не хотят так просто раскрывать свои секреты. А они есть! Тема весьма непростая, на мой взгляд.

      Предоставляют ли крупные веб-сервисы (поисковики, соцсети) возможность поиска по готовому хешу?

      Нет.


  1. pilot114
    25.02.2022 08:58
    +2

    Друг интересуется - творчество порноактрисы по её фото сервис сможет найти?


    1. aapsoftware Автор
      25.02.2022 09:25

      Вопрос, конечно интересный, но ...

      На сегодняшний день в базе данных более 30 000 проиндексированных фильмов (список есть на сайте), но порно там нет (ну может, какие то фильмы случайно затесались).

      В принципе, нет ограничений по жанрам, и, если Вы хотите добавить сами целенаправленно какие то фильмы, то для этого есть специальное приложение. Нужно только потратить время на заполнение полей (название, жанр, актёры, год выпуска и т.п.) и само видео, после чего отправка индексных данных на сервер, а потом в БД. В начале этого поста есть ссылки на другие публикации, там этот процесс описан довольно подробно.


  1. GennPen
    25.02.2022 11:52

    Почему у меня по той же картинке что в статье ничего не находит?

    Hidden text


    1. aapsoftware Автор
      25.02.2022 13:30

      Можно в личку информацию о браузере, а ещё лучше скриншот с консоли?


  1. mrStrike
    25.02.2022 12:27

    где код поисковика? Залить фото по url на сервер я и так могу, а вот серверный код, хм... ладей пахнет.


    1. aapsoftware Автор
      25.02.2022 13:39
      +1

      А код приложения обработки исходного видео? А код построителя базы данных, а код скрэпера?

      А ключи от квартиры где деньги лежат?

      Залить фото по url на сервер я и так могу,

      Не-а, не можете. Сервер не принимает изображения. Обработка изображений на сайте и в приложениях ведётся на стороне клиента (для клиента это занимает секунду, а сервак разгружает). Сервер получает только результат обработки изображения (массив чисел).

      Именно поэтому и нужна библиотека. Она этой обработкой и занимается.


  1. Vitaly48
    26.02.2022 05:01

    Я там сделал небольшой pull request, глянь как будет возможность)


    1. aapsoftware Автор
      26.02.2022 10:43

      OK, гляну.