Я хочу применить операции из библиотеки компьютерного зрения OpenCV в режиме реального времени к видео, снятому с экрана моего компьютера.
Идея в этом конкретном случае состоит в том, чтобы обнаружить интересные функции во время игры в популярной игре и предоставить пользователю расширенные возможности; но я мог бы подумать о нескольких других сценариях, где кто-то хотел бы иметь прямой доступ к этим данным.
Во всяком случае, на этапе разработки было бы приемлемо использовать стандартное видео, но для конечного приложения производительность и быстродействие, очевидно, имеют решающее значение.
На данный момент я пытаюсь сделать это в Ubuntu 10.10 и предпочел бы использовать UNIX-подобную систему, но любые варианты представляют интерес.
Мои навыки в C очень ограничены, поэтому, когда возможно общение с OpenCV через Python, я стараюсь использовать это вместо этого.
Обратите внимание, что я пытаюсь сделать снимок не с устройства камеры, а с живого потока вывода изображения; и я в растерянности относительно того, как принять вход. Насколько я могу судить, CaptureFromCAM работает только для камерных устройств, и мне кажется, что требование к производительности в реальном времени в конечном результате делает хранение в файле и обратное чтение через CaptureFromFile плохим вариантом.
Наиболее многообещающий маршрут, который я нашел до сих пор, похоже, использует ffmpeg с опцией x11grab для захвата с дисплея X11;
(например, команда
ffmpeg -f x11grab -sameq -r 25 -s wxga -i: 0,0 out.mpg
захватывает 1366x768 из дисплея 0 в «out.mpg»).
Я полагаю, что должна быть возможность обработать поток вывода из ffmpeg как файл, который будет прочитан OpenCV (предположительно с помощью функции CaptureFromFile), возможно, с использованием каналов; но это все на гораздо более высоком уровне, чем я когда-либо имел дело прежде, и я мог бы действительно использовать некоторые направления.
Как вы думаете, такой подход возможен? И что еще важнее, вы можете придумать лучший? Как бы вы это сделали?