Пытаясь захватить вывод дисплея для анализа в реальном времени с OpenCV; Мне нужна помощь с взаимодействием с ОС для ввода

StackOverflow https://stackoverflow.com/questions/4060265

Вопрос

Я хочу применить операции из библиотеки компьютерного зрения OpenCV, в режиме реального времени, к видео, захваченному с моего компьютера. Идея в этом конкретном случае состоит в том, чтобы обнаружить интересные функции во время игрового процесса в популярной игре и предоставлять пользователю улучшенным опытом; Но я мог бы подумать о нескольких других сценариях, где можно было бы иметь в прямом эфире доступа к этим данным. Во всяком случае, для этапа разработки может быть приемлемо с использованием консервированного видео, но для окончательного характеристики приложений и отзывчивость явно являются критическими.

Я пытаюсь сделать это на Ubuntu 10.10 на сегодняшний день, и предпочел бы использовать систему, подобную Unix, но какие-либо варианты представляют интерес. Мои навыки C очень ограничены, поэтому, когда можно поговорить с OpenCV через Python, я стараюсь использовать это вместо этого. Обратите внимание, что я пытаюсь захватить не из устройства камеры, а из живого потока выхода дисплея; И я в потере от того, как взять вклад. Насколько я могу сказать, CaptureFromcam работает только для устройств для камеры, и мне кажется, что требование для производительности в реальном времени в конечном результате делает хранение в файле и чтение обратно через CaptureFlueFile.

Наиболее многообещающим маршрутом, который я нашел, настолько далеко, кажется, использует FFMPEG с помощью опции X11GRAB для захвата от отображения X11; (например, команда ffmpeg -f x11grab -sameq -r 25 -s wxga -i: 0.0 out.mpg захватывает 1366x768 дисплея 0 до 'out.mpg'). Предлагаю, что должно быть возможно лечить выходной поток от FFMPEG в качестве файла, который будет прочитан OpenCV (предположительно, используя функцию CaptureFryFile), может быть, с помощью труб; Но это все на гораздо более высоком уровне, чем я когда-либо имел дело до того, как я действительно мог использовать некоторые направления. Как вы думаете, этот подход возможен? И что более важно, вы можете подумать лучшего? Как бы вы это сделали?

Это было полезно?

Решение

Я бы отказался от X11Grab или любых других инструментов CMD-Line, чтобы взять скриншоты, если вы ищете производительность в реальном времени.

Напишите свой собственный Экран Grabber Таким образом, вы можете отправить его прямо в OpenCV. Вы можете взглянуть на XWD Исходный код Если вы хотите знать, как сделать это под х11.

Другие советы

Я думаю, что главная задача - это требование в реальном времени. Я думаю, что вы должны создать некоторую часть программного обеспечения для OPENCV, вдохновленного кодом для видео захвата в FFMPEG. Но это наверняка будет включать в себя кодирование уровня C.

Мое предложение состоит в том, чтобы попытаться получить свой алгоритм вашего зрения прямо сначала, используя видео с захваченным FFMPEG.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top