Работа с IP камерой. (IP camera)

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы

Работа с IP камерой. (IP camera)

Postby Sergey Ivanov on 17 Aug 2014, 13:49

Долго я трудился чтобы заставить IP камеру работать.

Так,что есть:
IP камера DCS-930/930L, которая подключена к ноутбуку через USB сетевую карту.
и вторая IP камера HN-VD9712IR, она подключена к роутеру. доступ к этой камере обеспечивается посредством wi-fi. (ноутбук, к которому подключена первая камера подключен по wi-fi к роутеру).

что понадобится для работы камер и встраивания видео в программу в :labview: :
1. программа iSpy
2. VLC плеер ( обязательно старая версия). новые версии в :labview: не работают. Я использовал версию 1.0.5 . Но, думаю, можно и другую версию скачать

Начнём с первой камеры. Она более популярна, много чего о ней описано на форумах. В идеале получить ссылку на видеопоток и использовать эту ссылку в VLC.
С ней, относительно просто. Заходим сюда и ищем свою камеру. Свою я нашёл, и нашёл ссылку на видеопоток:
http://IPADDRESS/video.cgi?resolution=VGA

IPADDRESS - это понятно что. в моём случае 192.168.0.20
немного переделаем ссылку, чтобы не было необходимости вводить логин и пароль.
http://username:password@IPADDRESS/video.cgi?resolution=VGA


у меня username - admin
пароль отсутствует
ссылка получается такая:
http://admin:@192.168.0.20/video.cgi?resolution=VGA


с первой камерой покончено.

Со второй было сложнее. На неё полностью отсутствовала всякая документация. В комплекте был только диск с программой, запустив которую можно было определить её IP. Ну я узнал его (192.168.1.10). Но ссылку на видео поток никак не получить.
Тут и понадобится программа iSpy
В общем, запускаем её, жмём Добавить>ONVIF камера
1111.jpg

Нажимаем на NVT
22222.jpg

В правом окне появляются доступные видеопотоки
33333.jpg

Выбираем нужный поток и жмём ОК
В окне изменить камеры ( появится после нажатия на ОК). Нажимаем на источник.
4444.jpg

В появившемся окне копируем поток для использования его в :labview: (также в программе iSpy можно проверить работоспособность камеры)
В моём случае, ссылка на видеопоток такая:
5555.jpg

rtsp://:@192.168.1.10/user=admin_password=DuTIbxbU_channel=1_stream=0.sdp?real_stream


Ну вот и всё. Собираем в :labview: небольшую программу с использованием ActiveX от VLC.

Вот такая получается и даже работает :)
6666.jpg


вот сам vi:
vlc.vi
(15.07 KiB) Downloaded 419 times


ну и вопрос у меня возник. Как можно получить картинку с камеры ? У кого-нибудь есть идеи как это реализовать можно ?
Добро пожаловать на http://rk-stud.ru/
User avatar
Sergey Ivanov
expert
expert
 
Posts: 1193
Joined: 01 Mar 2009, 20:54
Location: Санкт-Петербург, Кронштадт
Medals: 5
Activity (1) Professionalism (1) Gold (2) Автор (1)
LabVIEW Version: 2013
Karma: 117
hardware VIP

Re: Работа с IP камерой. (IP camera)

Postby Sergey Ivanov on 18 Aug 2014, 22:49

подскажите, кто знает, плеер для проигрывания потокового видео с поддержкой ActiveX ?
Добро пожаловать на http://rk-stud.ru/
User avatar
Sergey Ivanov
expert
expert
 
Posts: 1193
Joined: 01 Mar 2009, 20:54
Location: Санкт-Петербург, Кронштадт
Medals: 5
Activity (1) Professionalism (1) Gold (2) Автор (1)
LabVIEW Version: 2013
Karma: 117
hardware VIP

Re: Работа с IP камерой. (IP camera)

Postby griffinru on 21 Aug 2014, 03:50

Сергей,
В принципе если камера имеет rtsp стрим то достаточно сделать запрос DESCRIBE и получить в ответ как к ней подключаться и работать. Посмотреть как это делается можно у меня вот здесь https://decibel.ni.com/content/docs/DOC-35217

По поводу ActiveX, то ни знаю зачем вам такой механизм поддерживается все хужу и хуже, но если нужно, то QuickTime работает с rtsp. Далее мог бы рекомендовать VLC (правда последнии версии больше ни обновлялись и с онлайн сняты, поэтому будет необходимо устанавливать VLC по полной для работы только через ActiveX). Ну и наконец можно прицепить WM, но ни для H264 стрима - иногда работает с MJPEG.

По ONVIF очень много документации и как все универсальное очень легко присоединяется, но есть определенные глюки когда хочется общаться с определенной камерой. В любом случае скачать картинку в JPG формате очень легко, показать видео через VLC или QT тоже ни составляет труда, но вот получить статус аналоговых, цифровых цепей, к детектору движения и тд может составить определенную трудность.

-Артур
User avatar
griffinru
beginner
beginner
 
Posts: 14
Joined: 15 Nov 2012, 03:03
Location: MD, USA
LabVIEW Version: 11
Karma: 20

Re: Работа с IP камерой. (IP camera)

Postby Sergey Ivanov on 22 Aug 2014, 15:05

Артур, спасибо ещё раз за помощь.
Решил воспользоваться вашим примером (VLC - Play Stream&Snapshot.vi (45.3 K) LabVIEW 11.0), он мне больше всего подходит.
Добро пожаловать на http://rk-stud.ru/
User avatar
Sergey Ivanov
expert
expert
 
Posts: 1193
Joined: 01 Mar 2009, 20:54
Location: Санкт-Петербург, Кронштадт
Medals: 5
Activity (1) Professionalism (1) Gold (2) Автор (1)
LabVIEW Version: 2013
Karma: 117
hardware VIP

Re: Работа с IP камерой. (IP camera)

Postby Axel on 13 Dec 2014, 20:16

Скажите пожалуйста, а можно просматривать поток, не через плеер, а выдергивать из потока кадры и выводить их на image?
Axel
junior
junior
 
Posts: 51
Joined: 15 Nov 2014, 17:26
LabVIEW Version: 12
Karma: 0

Re: Работа с IP камерой. (IP camera)

Postby Sergey Ivanov on 09 Feb 2015, 12:16

Лучше поздно чем никогда

Посмотрите тут пример VLC - Play Stream&Snapshot.vi (45.3 K)

Но, в этом случае, необходимо будет установить VLC плеер
Добро пожаловать на http://rk-stud.ru/
User avatar
Sergey Ivanov
expert
expert
 
Posts: 1193
Joined: 01 Mar 2009, 20:54
Location: Санкт-Петербург, Кронштадт
Medals: 5
Activity (1) Professionalism (1) Gold (2) Автор (1)
LabVIEW Version: 2013
Karma: 117
hardware VIP

Re: Работа с IP камерой. (IP camera)

Postby dadreamer on 09 Feb 2015, 15:32

Sergey Ivanov, этот пример очень полезен в плане взаимодействия с VLC, но проблему Axel не решит :) Чтобы извлечь кадры из видеопотока, нужно зарегистрировать самописные callback-функции с помощью процедуры libvlc_video_set_callbacks. После этого перестанет выводиться на Image или в отдельное окно весь видеопоток, но будут вызываться функции lock, unlock и display. В lock мы указываем буфер, куда будет помещаться каждый новый кадр из потока. В unlock можем передать этот буфер в :labview: через функцию PostLVUserEvent. Ну, а display можно даже не трогать :) Пример на C можно увидеть здесь или здесь. На :labview: , к сожалению, подобного примера пока нет...
User avatar
dadreamer
professor
professor
 
Posts: 3104
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 782
I/O VIP vision internet

Re: Работа с IP камерой. (IP camera)

Postby Borjomy_1 on 23 Mar 2015, 15:51

Возникла такая-же проблема. Кучу вариантов перепробовал, из того, что есть. Остановился на VLC плееере. В общем, решение такое - вывод изображения в .Net контейнер, в котором находится компонент "Picture Box" (Расположение: System.Windows.Forms(2.0.0.0) / PictureBox).
Прошу тех, кто работал с .Net, проконсультировать, как можно из него выдрать изображение. Какой-нибудь простенький примерчик.

Либо компонент .Net NationalInstruments.Vision.Common (NationalInstruments.Vision.WindowsForms / ImageViewer), у него есть незамысловатое свойство "Image", а у того метод "ImageToArray". Как этом можно воспользоваться?
Attachments
Получение изображения.PNG
Получение изображения.PNG (5.87 KiB) Viewed 11550 times
Borjomy_1
expert
expert
 
Posts: 1810
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 318
VIP

Re: Работа с IP камерой. (IP camera)

Postby dadreamer on 23 Mar 2015, 17:44

Borjomy_1 wrote:Остановился на VLC плееере.

Могу в принципе сделать пример с вариантом, описанным выше. Единственное, что требуется, - продумать архитектуру приложения. Ширина/высота картинки известна? Будет ли она меняться время от времени? Какой формат изображения (RGB32, RGB24, Grayscale, ...)? Откуда ведётся захват изображения (real-time поток с веб-камеры, например)?.. В данный момент я могу либо забить в callback-библиотеку формат константой, либо инициализировать формат каждый раз при запуске и подстраивать вывод.
User avatar
dadreamer
professor
professor
 
Posts: 3104
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 782
I/O VIP vision internet

Re: Работа с IP камерой. (IP camera)

Postby Borjomy_1 on 23 Mar 2015, 18:18

dadreamer, У меня прием с IP камеры (если это о чем-то говорит IPEYE-3852P, но на реальном объекте это будет другая камера, с другим разрешением) в .Net контейнер есть. И он показывает картинку. Размер картинки 720p (1280*720). Мне нужно получить растровую картинку хотя-бы массив цветов U32, который я отображу на компоненте "Picture". Скриншотить дллкой я не могу - камера дает 20 кадров в сек.
Через Ni-Max камера не видна. Попробую поставить последние драйвера NI Device Drivers, но пока все тухло. Через VLC хоть работает.
Поэтому меня сейчас интересует принципиальная возможность выдрать изображение из контейнера средствами .Net
рабочий пример прилагаю.
Attachments
VLC - Play Stream&Snapshot Folder.zip
(57.22 KiB) Downloaded 167 times
Получение изображения1.PNG
Borjomy_1
expert
expert
 
Posts: 1810
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 318
VIP

Re: Работа с IP камерой. (IP camera)

Postby dadreamer on 23 Mar 2015, 20:13

Borjomy_1 wrote:Поэтому меня сейчас интересует принципиальная возможность выдрать изображение из контейнера средствами .Net

Думаю, что это вряд ли возможно, если сам .NET-объект (то есть, класс в библиотеке) не предоставляет такого метода. Если только писать обёртку, перегружающую объект класса, чтобы он начал экспортировать соответствующий метод.
Теперь что касается VLC. Единственный способ выдрать кадр, что я нашёл, это использование callback'ов (см. выше). Так что согласно вашему формату и кое каким старым наработкам я состряпал вот такой :vi: . Сделано всё очень на скорую руку, но вроде как работает.

2015-03-23_21-54-01.jpg

Проверка на тестовом стриме:
2015-03-23_21-52-48.jpg

Красным на БД выделил место, где устанавливается формат видеопотока. Ещё одно место, где это нужно сделать, тут (выделено розовым):
Исходник callback-библиотеки wrote:// VLC_CB.cpp : Defines the entry point for the DLL application.

#include "stdafx.h"
#include "extcode.h"
#include <stdlib.h>
#include <stdio.h>

// В этот массив будем получать кадры из видео, а потом перекидывать в LabVIEW
unsigned char * pixels = NULL;
LVBoolean DoPost = LVFALSE;
LVUserEventRef Ref = 0;
size_t ImgSize = 1280 * 720 * 4; //размер массива, куда производится рендеринг

extern "C" {
__declspec (dllexport) void * lock(void *data, void **p_pixels);
__declspec (dllexport) void unlock(void *data, void *id, void *const *ipixels);
__declspec (dllexport) void display(void *data, void *id);
__declspec (dllexport) unsigned videoFormat(void **opaque, char *chroma, unsigned *width, unsigned *height, unsigned *pitches, unsigned *lines);
__declspec (dllexport) void EnablePost();
__declspec (dllexport) void DisablePost();
__declspec (dllexport) void SetEventRef(LVUserEventRef *UserEventRef);
}

// Callback вызывается VLC плеером перед рендером кадра
__declspec (dllexport) void * lock(void *data, void **p_pixels)
{
*p_pixels = pixels; // просто указываем плееру, куда положить текущий кадр
return NULL;
}

// Вызывается плеером после lock
__declspec (dllexport) void unlock(void *data, void *id, void *const *ipixels)
{
if (DoPost)
{
PostLVUserEvent(Ref, (void *)ipixels);
}
}

// Вызывается плеером после unlock
__declspec (dllexport) void display(void *data, void *id)
{
//
}

//просмотр информации о видеоформате - в данном случае не используется
__declspec (dllexport) unsigned videoFormat(void **opaque, char *chroma, unsigned *width, unsigned *height, unsigned *pitches, unsigned *lines)
{
DbgPrintf("Video Format:");
DbgPrintf("Chroma is %s", chroma);
DbgPrintf("Width is %d", *width);
DbgPrintf("Height is %d", *height);
DbgPrintf("Pitches is %d", *pitches);
DbgPrintf("lines is %d", *lines);
return 0;
}

__declspec (dllexport) void EnablePost()
{
DoPost = LVTRUE; //можно кидать кадры
}

__declspec (dllexport) void DisablePost()
{
DoPost = LVFALSE; //нельзя кидать кадры
}

__declspec (dllexport) void SetEventRef(LVUserEventRef *UserEventRef)
{
Ref = *UserEventRef; //запоминаем ссылку на event
}

BOOL APIENTRY DllMain(HMODULE hModule,
DWORD Reason_for_call,
LPVOID lpReserved)
{
switch (Reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
//выделяем память под массив
pixels = new unsigned char[ImgSize];
}

case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
{
//освобождаем память
delete [] pixels;
break;
}
}
return TRUE;
}

В будущем могу добавить дополнительную функцию SetFormat, чтобы из :labview: установить размер кадра (массива) под рендеринг. Первоначально вывод в :labview: шёл в IMAQ-контрол, но я поставил Picture, хотя он похуже в плане качества картинки. Да, и всё это хозяйство будет работать сугубо на x32 пока что. Проверьте, если у вас на вашем потоке будет работать, то можно допиливать.
Attachments
2011.rar
VLC Callbacks - LV2011
(54.44 KiB) Downloaded 192 times
User avatar
dadreamer
professor
professor
 
Posts: 3104
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 782
I/O VIP vision internet

Re: Работа с IP камерой. (IP camera)

Postby Borjomy_1 on 24 Mar 2015, 11:02

Прекрасно! Оно работает.
Теперь о проблеме: Загрузка процессора составляет 40%, причем половина из этого приходится на CIN "Get Array By Pointer", из-за чего Frame Rate не поднимается выше 13 кадров в сек
Borjomy_1
expert
expert
 
Posts: 1810
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 318
VIP

Re: Работа с IP камерой. (IP camera)

Postby dadreamer on 24 Mar 2015, 13:25

Borjomy_1
У меня загрузка ЦП составляет ≈20% (Intel Core i7-2600 @ 3.4 ГГц, 8 Гб ОЗУ, Win 7 x64). В Event Inspector'е постоянно проскакивает Timeout, значит, пропуска кадров нет. Сделал вывод FPS и действительно видно, что частота не более 15 кадров/с. Если убрать мат. обработку массива, то она увеличивается до 23-24 кадров/с.
VLC Callback Test2.vi
lv2011
(44.36 KiB) Downloaded 141 times

Так что, по-видимому, программа банально не успевает дёргать кадры, причём это вина не только :labview: , но и VLC. Может быть, поместить RGBA-ARGB преобразование и вывод в отдельный поток?.. Не совсем ясно, как лучше поступить. Можно ещё попробовать вариант без Event'а - в цикле While брать кадры из массива, тогда вроде бы потоки получаются развязаны. Хотя и в случае Event'а должно было бы быть переполнение очереди событий, если бы не хватало производительности. Чего лично я не вижу нигде. :dntknw:

upd:
Не туда смотрел всё это время :D Пропуск кадров действительно имеется:
2015-03-24_15-34-44.jpg

Так что вывод таков: выносить полностью куда-то в отдельный поток всю обработку данных. Или, может, у вас есть какие-то предложения, как ускорить обработку?
User avatar
dadreamer
professor
professor
 
Posts: 3104
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 782
I/O VIP vision internet

Re: Работа с IP камерой. (IP camera)

Postby Borjomy_1 on 24 Mar 2015, 14:21

В первую очередь очень тормозит CIN GetArrayByPointer, хотя его задача только скопировать 4Мб памяти. Но он тормозит больше, чем вся обработка и вывод Picture.
Есть такой пример https://decibel.ni.com/content/docs/DOC-15159
В нем делается копия данных через Marshal Copy (source, destination, startIndex, length). Может, ее как-то прикрутить вместо CIN? У меня не удается преобразовать ваш BufPtr в System.IntPtr Класс
Borjomy_1
expert
expert
 
Posts: 1810
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 318
VIP

Re: Работа с IP камерой. (IP camera)

Postby dadreamer on 24 Mar 2015, 14:30

Borjomy_1, посмотрите мой второй пример.
User avatar
dadreamer
professor
professor
 
Posts: 3104
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 782
I/O VIP vision internet

Next

Return to Коммуникация с приборами

Who is online

Users browsing this forum: No registered users and 5 guests

cron