Ответы пользователя по тегу OpenCV
  • Как распознать белый объект на белом фоне opencv?

    @rPman
    как объяснить программе, что на снимке снег, а что облака
    если простыми способами по цвету или по соотношению интенсивности цветов на интервале (в общем аналитически) не получится, то собирай обучающую выборку (не весь кадр а небольшой участок, на котором ты как человек все еще можешь понять снег это или облако) и обучай нейронную сеть.

    Примеров подбирай по больше, тысячами. Старайся чтобы количество с облаками, со снегом и без них было примерно одного количества. Яркость изображений нормализуй, сохраняй пометку об исходном уровне света (по текущей долготе и времени съемки можно понять день, вечер, ночь, утро...), кстати от времени года и высоте над уровнем моря наверное тоже можно понять, имеет ли смысл искать тут снег или нет. Затем увеличивай обучающую выборку вращением исходных примеров и запускай на обучение.

    Вся работа тут - формирование обучающей выборки и подбор гиперараметров нейронной сети.
    Ответ написан
    Комментировать
  • Существует ли готовая нейросеть, которая составляет текстовое описание изображения?

    @rPman
    Пощелкай по этим моделям
    Ответ написан
    Комментировать
  • Как подсчитывать на видео проходящих людей по головам?

    @rPman
    Боюсь ты не найдешь готовых решений
    Мало того, тут нужно искать размеченный датасет голов людей и радоваться этому богатству

    Решение для тебя - берешь несколько сотен тысяч видео (разные времена года), нанимаешь десяток человек в помощники и садишься размечать, затем берешь готовые решения по нейронкам, арендуешь на недельку себе кластер с gpu или на месяц другой игровую видеокарту и вперед с примерами от pytorch пилишь результат.

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

    p.s. после того как ты на все это портатишь от нескольких сотен тысяч рублей до миллионов, к тебе подойдет такой же как ты сейчас и скажет, а дай мне готовые веса твоей нейронки... куда ты его вежливо пошлешь?
    Ответ написан
    1 комментарий
  • Потянет ли Orange Pi PC H3 1gb OpenCV обработку?

    @rPman
    да
    но в зависимости от задачи и реализации скорость будет гулять 5..30fps (ориентируйся на меньший)

    погугли, первый же пример (там малинка, один фиг)
    Ответ написан
    1 комментарий
  • Как БЫСТРО надать масив экрана для opencv (селен)?

    @rPman
    так быстро точно не получится
    между экраном браузера и питоном пропасть буферов и прослоек
    и главное там png сжатие происходит, быстро это сделать не получится (а ты еще обратно его будешь пережимать)

    Попробуй вместо средств selenium работать с экраном см помощью remote desktop api но как именно это будет работать с headless браузером надо тестировать, главное что это api подразумевает высокую отзывчивость и быструю передачу содержимого экрана, но нужно будет изучать как этот экран принимать

    p.s. у браузера есть свой webgl и когда то был зарелизен webcl (но поддержка браузерами сейчас под вопросом), т.е. может попробуешь работать с графикой напрямую в браузере?
    Ответ написан
  • Как автоматически создать нескольких изображений, наложив одно изображение на другие и трансформировав форму этого изображения в процессе?

    @rPman
    100% готовая библиотека есть, но не нагуглилась, так как задача не такая уж и сложная, ведь все можно сделать заранее.

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

    Полученное фото нужно сравнить с исходным изображением, и разница и будет теми изменениями, которые необходимо делать с целевыми изображениями, перед наложением. Каждый квадрат (область закрашенная одним цветом, чтобы не бодаться с тенями, делать фото нужно с хорошим освещением) на фото связываем с квадратом на изображении (поиск ближайшего того же цвета) а там либо искать центр либо пытаться задетектировать у квадратов углы и брать их за точки, для каждой точки строим вектор сдвига (dx,dy) на который нужно подправить соответствующий квадрат, затем сплайнами считаем эти вектора для каждой точки на изображении, полученную матрицу используем для правки всех фото.

    Ищи библиотеки, с эффектом warping/morphing, те что есть работают по ключевым точкам, как раз те что рассчитываешь по центрам квадратом в моем описании выше.
    Ответ написан
    1 комментарий
  • Как определить угол наклона изображения?

    @rPman
    Что есть угол наклона?
    Чтобы ответить на этот вопрос, нужно понимать где верх/низ а где сбоку, а это как понимаешь зависит от того что именно изображено.

    Если изображения именно такие как в вопросе, значит нулевое положение определить можно по длине (протяженности) объекта. Ищем контур findContours и находим две точки контура, расстояние между которыми максимальное, этот отрезок можешь считать линией, угол которой и считай.

    Еще можно считать линейную регрессию всех точек объекта (не нужно считать ее контур) до линии, и уже ее угол считать.
    Ответ написан
    Комментировать
  • Как сделать удержание объекта, чтобы нейронка его не теряла?

    @rPman
    Если нейронка потеряла объект, значит не смогла распознать, а значит и координаты определить тоже не сможет.

    Недообученная сеть?

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

    хуже всего, если камера тоже может двигаться/поворачиваться, либо ненужный фон может двигаться, тогда нужен алгоритм не разницу кадров, а тот что используется для определения дрожания камеры (для точек на экране будет дан вектор движения, те что были у объекта с прошлых кадров дадут поправку на старые координаты).
    Ответ написан
    Комментировать
  • Как в opencv достигается такая скорость работы?

    @rPman
    opencv это библиотека, использующая вычисления на видеокартах, используя Opnecl

    Opencl тут не виноват, причина высокой скорости GPU - ОГРОМНОЕ (десятки для дешевых и тысячи для дорогих) дубовых и от этого энергноэффективных проецессоров, каждый из которых подключен к своему независимому блоку оперативной памяти (там многоуровневая система, по разному организовано у amd/nvidia/intel). И еще, работа кода на этих процессорах ограничена одним правилом - выполняется только один код сразу на всех, это дополнительно позволяет сэкономить энергию и место на чипе.

    Если код без ветвлений, он сможет быть запущен на пиксельных конвеерах а работа с памятью линейна - это какраз те самые тысячи параллельных процессов будут загружены максимально оптимально.
    Ответ написан
  • Как заставить OpenCV работать с Twitch'ом?

    @rPman
    по адресу twitch.tv/streamer_id нет видеоконтента, там html, но vlc умный, у него с помощью плагинов и сложной логики есть парсер, вытаскивающий видео из кучи типовых видео и стриминговых сервисов, а вот у opencl такой логики нет

    p.s. твитч хорошо прячет ссылку в html но кажется есть api читайте их доки как вытаскивать ссылку на поток
    Ответ написан
  • Обрезание изображения по 3 точкам opencv?

    @rPman
    Попиксельно пройдитесь по области внутри трехугольника.
    Вот как это делают для всего изображения, остается заменить в нем два вложенных цикла по всем точкам на точки трехугольника.

    Про треугольник ищите алгоритм попиксельной заливки треугольника или напишите его сами, для пиксилизации линии берите алгоритм Брезенхэма
    Ответ написан
    4 комментария
  • Как определить время на аналоговых часах с помощью машинного зрения?

    @rPman
    Не надо вам тут нейронные сети и обучение, это как ходить в соседний магазин за хлебом, на вертолете, садясь на него в соседнем городе.

    Часы это набор прямых и окружностей, с помощью opencv ищите их (т.е. векторизуйте изображение) затем выбирайте только те отрезки, которые похожи на часы (окружность риски часов, часовая и минутные стрелки, опционально цифры), таким образом вы поймете какие из линий - стрелки, а дальше либо через цифры, либо через ориентацию телефона (если цифр нет) определяйте где верх а где низ.
    Ответ написан
    Комментировать
  • Как создать простую нейронную сеть на TF, которая сможет управлять игрой через захват экрана?

    @rPman
    Судя по вопросам, боюсь вы поставили себе пока непосильную задачу.

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

    Затем вы должны очень хорошо закодировать (отдельными алгоритмами, собственно opencv для этого хорошо подходит) чтобы распознать объекты на экране (глупо для этого пользоваться нейронкой, точнее это ДОРОГО), в итоге у вас будет информация об игровом мире в вашем представлении, удобном для использования в вашей программе. И только потом начинайте думать, как использовать полученную информацию, стоит ли вообще все заводить на нейронные сети.

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

    geometry dash это обычный платформер, если я правильно понимаю там вообще одно действие - прыжок? Эта игра не требует нейронки от слова совсем, все действия рассчитываются простым анализом игрового мира (движения врагов рассчитываются за 3-4 кадра в коротком варианте либо заранее вы сами определяете что вот этот враг двигается по таким правилам) а дальше поиск по 'лабиринту' перебором или поиском в глубину.
    Ответ написан
    Комментировать
  • Как убрать повторение голоса при распознования лица?

    @rPman
    Сохраняйте в массиве (по ключу - произнесенное имя) время последнего распознавания, и каждый раз при обнаружении, сравнивайте его с текущим, если разница меньше некоторой константы, не произносите.
    Ответ написан
    Комментировать
  • Запуск С++ Linux библиотеки c OpenCV на другом компьютере

    @rPman
    это что за windows way?
    'положить необходимые библиотеки' это и есть 'установка', какие проблемы? на удаленном компьютере в репозитарии нет необходимой версии? найдите или соберите свою сборку под версию ту OS и передайте вместе со своей программой, если с той стороны боятся что ваша сборка что то порушит — пусть устанавливают библиотеки и программу в chroot копию самих же себя, скрипты этого дела из пары команд можете сами написать (sudo cp -rx / /chroot;sudo chroot /chroot;… хотя не, создание копии системы еще тот вопрос, лучше вместо cp -xr прописать список каталогов, гарантированно принадлежащих системе), но то, мне кажется, извращение

    p.s. если на удаленном компьютер не установлены драйвера, то ничего не получится… ставить их придется без вариантов.

    p.p.s. спросите их про тип видеокарты на той стороне и подготовьте свой демонстрационный дистрибутив в виде iso файлика (благо с поддержкой opencl это либо ati, либо nvidia, либо изредка intel), а уж прожечь компакт диск и запустить его сможет практически любой пользователь.
    Ответ написан
    Комментировать