Подключение двух (и более) ip-камер и обработка изображения

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
BARD
beginner
beginner
Сообщения: 20
Зарегистрирован: 13 янв 2012, 16:28
Версия LabVIEW: 2022
Благодарил (а): 1 раз
Контактная информация:

Подключение двух (и более) ip-камер и обработка изображения

Сообщение BARD »

Добрый день! Требуется наладить подключение трех ip-камер одновременно с возможностью отдельной обработки каждого из получаемых изображений. Поискав возможные решения на форумах, понял, что просто получать видео очень легко, но вот делать возможность последующей обработки уже намного сложнее. В связи с этим свел задачу хотя бы к тому, чтобы организовать один канал получения информации с трех камер, но подключаться к каждой попеременно для получения актуального изображения (скажем, канал обращается к каждой из камер на 3 секунды, потом переключается на новую). Такое реализовать "с грехом пополам" удалось в приложенной мной программе. Если подключать вывод просто на изображения, то нет проблем, все работает. Если же вместо изображений сделать global переменные и пытаться передать значения в три другие, независимые программы по обработке, то в каждую программу будет передаваться только одно какое-то изображение, и оно меняться не будет (то есть во всех трех программах будет одинаковое изображение с одной камеры вместо трех разных). Также, если отсечь программы по обработке и оставить только global на прием изображений, то они прекрасно работают, в каждою переменную своё изображение доходит, картинка обновляется. Я попробовал создать абсолютно разные global для каждого изображения и из каждого передавать только свою картинку только в свою программу, но результат точно такой же - одинаковая картинка на 3 программы с одной камеры вместо трех разных картинок.
В связи с этим несколько вопросов:
1. Можете ли подсказать, как все-таки сделать так, чтобы внешние программы через global принимали 3 разных картинки? Честно говоря, я не понимаю абсолютно, почему так происходит.
2. Я был бы очень признателен, если бы кто-то показал, как можно сделать три потока сразу с 3-х камер (если это возможно) с возможностью обработки изображения. В labview не то чтобы совсем новичок, но работу с библиотеками, которые в данной программе используются, я не очень понимаю.
3. Пришлось сделать изменения события в event структуре по нажатию клавиши клавиатуры, а нажатие клавиши эмулировать в другом цикле, потому что event структура почему-то не реагирует на изменение величины Ring, остается всегда на нулевом значении и не останавливает цикл. Почему?
4. Возможно многое, что сейчас находится в большом главном цикле можно вынести за его пределы, чтобы увеличить скорость программы и не инициализировать все каждый раз? Я пробовал вынести кое-что вплоть до libvlc_new и GetProcAddress, но labview выдает критическую ошибку, после которой вообще закрывается.
5. Может быть есть другой способ вытаскивания изображения с двух и более ip-камер без применения библиотек vlc? Если да, то может быть кто-то покажет их или подскажет, где посмотреть?

P.S. Все три камеры абсолютно одинаковые, различаются только ip-адреса, в прикрепленном архиве основная программа - "ARPES camera"
Вложения
3 ip cameras.rar
(124.51 КБ) 166 скачиваний
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Подключение двух (и более) ip-камер и обработка изображе

Сообщение IvanLis »

Начните, сначала и добейтесь стабильного получения трех видепотоков от различных камер.
Сейчас столько накручено, что даже вникать не хочется :dntknw:

На данный момент проблема "в том что видео одно и тоже" в том, что все дисплеи (индикаторы) получают информацию из одного места.
Вы выделяете область в памяти и указываете на нее ссылку.
Снимок экрана от 2018-11-21 18-35-38.png
А соответственно при отображении на всех индикаторах изображения будут совпадать.
!!! Imaq Image - это ссылка (reference), а не информация
Т.е. для каждой камеры должна быть выделена своя область памяти, а обращаться к одной области данных можно даже из разных :vi: !
По этому имя должно быть уникально.
BARD
beginner
beginner
Сообщения: 20
Зарегистрирован: 13 янв 2012, 16:28
Версия LabVIEW: 2022
Благодарил (а): 1 раз
Контактная информация:

Re: Подключение двух (и более) ip-камер и обработка изображе

Сообщение BARD »

На данный момент проблема "в том что видео одно и тоже" в том, что все дисплеи (индикаторы) получают информацию из одного места.
Вы выделяете область в памяти и указываете на нее ссылку.
Большое Вам спасибо! Уже идет десятый день, как мне срочно нужно решить большую задачу по взаимодействию с видеоданными, и я уже за "деревьями леса не вижу". Да, проблема была в этом. Может быть Вы еще подскажете, как сделать так, чтобы программа работала не только когда открыта ее лицевая панель, но и просто пока была запущена, но, допустим, свернута?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Подключение двух (и более) ip-камер и обработка изображе

Сообщение IvanLis »

BARD писал(а):Может быть Вы еще подскажете, как сделать так, чтобы программа работала не только когда открыта ее лицевая панель, но и просто пока была запущена, но, допустим, свернута?
Открыта или свернута лицевая панель...
по идее никак не должно сказываться на работу программы.
BARD
beginner
beginner
Сообщения: 20
Зарегистрирован: 13 янв 2012, 16:28
Версия LabVIEW: 2022
Благодарил (а): 1 раз
Контактная информация:

Re: Подключение двух (и более) ip-камер и обработка изображе

Сообщение BARD »

Открыта или свернута лицевая панель...
по идее никак не должно сказываться на работу программы.
Вы знаете, после того, как осуществил запуск программы из другой, то действительно пропал такой эффект.
А может быть сможете подсказать еще один момент: сейчас я запускаю параллельно три программы таких, как в первом моем посте, но с разницей в том, что каждая программа передает только одно свое изображение от каждой из камер. Каждое изображение передается в глобальную переменную и далее уже по отдельности обрабатывается тремя различными программами для наложения на каждое из изображений различных рисунков. Если при запуске только двух программ все работает еще более-менее стабильно, то при подключении еще и третей программы начинаются очень большие провисания всего :labview:
Имеет ли смысл не делать три параллельные программы для каждой из камер, а сделать все в одной программе или это никак заметно не повлияет в производительности? Может быть даже избавиться от global переменных и вообще все сделать в одной программе, используя вместо них local переменные?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Подключение двух (и более) ip-камер и обработка изображе

Сообщение IvanLis »

BARD писал(а): Вы знаете, после того, как осуществил запуск программы из другой, то действительно пропал такой эффект.
А может быть сможете подсказать еще один момент: сейчас я запускаю параллельно три программы таких, как в первом моем посте, но с разницей в том, что каждая программа передает только одно свое изображение от каждой из камер. Каждое изображение передается в глобальную переменную и далее уже по отдельности обрабатывается тремя различными программами для наложения на каждое из изображений различных рисунков. Если при запуске только двух программ все работает еще более-менее стабильно, то при подключении еще и третей программы начинаются очень большие провисания всего :labview:
Имеет ли смысл не делать три параллельные программы для каждой из камер, а сделать все в одной программе или это никак заметно не повлияет в производительности? Может быть даже избавиться от global переменных и вообще все сделать в одной программе, используя вместо них local переменные?
:labview: сам распараллеливает задачи, по этому отдельно Вы запускаете или в теле одной программы будут работать три независимых потока (цикла), разницы наверное большой не будет.
А вот использование глобальной переменной, я бы не рекомендовал. Раньше NI не рекомендовало их использовать для обмена "быстрыми" данными, т.к. один из самых медленных механизмов, плюс там проблемы с многопользовательским доступом из-за блокировок монопольного доступа.
Я бы рекомендовал использовать очереди Queue, их и обрабатывать просто и если не успеваешь обработать, можно очистить (если не критично).

Но самое ресурсозатратное, сама обработка, т.к. любое изображение имеет огромное количество пикселей, например Full HD (1920×1080) более 2мл, а если учесть что там 3 отдельных составляющих... получается, что простейшие операция изменения яркости или контрастности, требуют более 6мл операций.

Возможно получится уменьшить разрешение или перейти к обработке gray изображения, без потери информативности.

Трудно советовать не зная задачи и алгоритма обработки.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»