Документация для версии Интеллект 4.10.4. Документация на другие версии также доступна.

Предыдущая страница Использование сторонних программ-отладчиков  Заключeниe Следующая страница


На странице:

Для иллюстрации возможных областей применения скриптов на языке JScript ниже приведены примеры, которые могут использоваться для создания на основе объекта Скрипт дополнительных функций в системе.

Пример 1. Визуализация работы детектора длины очереди в окне Монитора видеонаблюдения

Для корректной работы скрипта в ПК Интеллект предварительно должны быть созданы и настроены объекты: Детектор длины очереди (входит в состав пакета детекторов Detector Pack),  Камера и Титрователь (ниже вместо символов N, M, L нужно подставить соответствующие номера Детектора длины очереди, Камеры и Титрователя).

//Считывание события по длине очереди
if (Event.SourceType == "OCCUPANCY_COUNTER" && Event.SourceId == "N" && Event.Action == "OCCUPANCY")  //N - Номер Детектора длины очереди
{
  var n=Event.GetParam("occupancy");
//Отображение длины очереди через Титрователь в Мониторе
  DoReactStr("CAM","M","CLEAR_SUBTITLES","title_id<L>"); //M - Номер Камеры  L - Номер Титрователя
  DoReactStr("CAM","M","ADD_SUBTITLES","command<Длина очереди: "+n+" чел.\r>,page<BEGIN>,title_id<L>"); //M, L - то же
}

В результате при отображении соответствующей камеры в мониторе, на видеоизображение будет накладываться текстовое сообщение о текущей длине очереди.

Настройки шрифта, цвета и положения надписи настраиваются на панели настройки объекта Титрователь.

Примечание.

При использовании параметров page<BEGIN> и page<END> будут заполняться соответствующие поля в базе титров, что даст возможность производить поиск данных с помощью интерфейсного объекта Поиск по титрам.

Пример 2. Визуализация работы детектора подсчета посетителей в окне Монитора видеонаблюдения

Для корректной работы скрипта в ПК Интеллект предварительно должны быть созданы и настроены объекты: Детектор подсчета посетителей (входит в состав пакета детекторов Detector Pack), Камера, Титрователь и Макрокоманда (ниже вместо символов N, M, L, P нужно подставить соответствующие номера Детектора подсчета посетителей, Камеры, Титрователя и Макрокоманды).

//Считывание события и подсчет вошедших посетителей 
if (Event.SourceType == "PEOPLE_COUNTER" && Event.SourceId == "N" && Event.Action == "IN") //N - Номер Детектора подсчета посетителей  
  {
    i = Itv_var("counter_i");
    k = Itv_var("counter_k");  
    i++;  
    Itv_var("counter_i")=i;
//Отображение количества посетителей через Титрователь в Мониторе
     
    DoReactStr("CAM","M","CLEAR_SUBTITLES","title_id<L>"); //M - Номер Камеры  L - Номер Титрователя
    DoReactStr("CAM","M","ADD_SUBTITLES","command<Кол-во посетителей (вх./вых.): "+i+" / "+k+"\r>,page<BEGIN>,title_id<L>"); //M, L - то же
      
  }
//Считывание события и подсчет вышедших посетителей
if (Event.SourceType == "PEOPLE_COUNTER" && Event.SourceId == "N" && Event.Action == "OUT") //N - Номер Детектора подсчета посетителей
  {
    i = Itv_var("counter_i");
    k = Itv_var("counter_k"); 
    k++;  
    Itv_var("counter_k")=k;
//Отображение количества посетителей через Титрователь в Мониторе  
   
   DoReactStr("CAM","M","CLEAR_SUBTITLES","title_id<L>"); //M - Номер Камеры  L - Номер Титрователя
   DoReactStr("CAM","M","ADD_SUBTITLES","command<Кол-во посетителей (вх./вых.): "+i+" / "+k+"\r>,page<BEGIN>,title_id<L>"); //M, L - то же
  }
//Обнуление счетчика по Макрокоманде (предварительно в Интеллекте должна быть создана Макрокоманда)
if (Event.SourceType == "MACRO" && Event.SourceId == "P" && Event.Action == "RUN") //P - Номер Макрокоманды
  {
    Itv_var("counter_i")=0;
    Itv_var("counter_k")=0;
    i=0;
    k=0;
//Отображение количества посетителей через Титрователь в Мониторе
      
    DoReactStr("CAM","M","CLEAR_SUBTITLES","title_id<L>"); //M - Номер Камеры  L - Номер Титрователя
    DoReactStr("CAM","M","ADD_SUBTITLES","command<Кол-во посетителей (вх./вых.): "+i+" / "+k+"\r>,page<BEGIN>,title_id<L>"); //M, L - то же
  }

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

Примечание.

При использовании параметров page<BEGIN> и page<END> будут заполняться соответствующие поля в базе титров, что даст возможность производить поиск данных с помощью интерфейсного объекта Поиск по титрам.

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

Для обнуления счетчика посетителей предварительно на вкладе Программирование создается объект Макрокоманда, название которой можно для удобства изменить, например, на «Обнуление счетчика посетителей».

Макрокоманду обнуления можно запускать как вручную через главное меню ПК Интеллект, так и автоматически в любое заданное время (для этого используется таблица События на панели настройки объекта Макрокоманда, где необходимо указать предварительно настроенный объект Временная зона). Подробные сведения об использовании объектов Макрокоманда и Временная зона изложены в документе Руководство Администратора.

Пример 3. Задание текста для отображения на карте

При добавлении объекта на карту имеется возможность выбрать способ отображения Текст (см. Руководство Администратора, раздел Прикрепление объектов к слою интерактивной карты). При этом для изменения отображаемого текста может использоваться скрипт на языке JScript.

Пример. Для объекта Камера 1 выбран способ отображения на карте Текст. Требуется по выполнении Макрокоманды 1 выводить на карте и в отладочном окне значение переменной MyVar, считанной из файла C:\test.ini.

if(Event.SourceType == "MACRO" && Event.Action == "RUN") 
{ 
 var result = parseInt(ReadIni("MyVar","C:\\test.ini"));
 result += 2;
 NotifyEventStr("CAM","1","ANALOG_PARAMS","text<Значение переменной = \n" + result + ">, blink_state<1>");
 DebugLogString(result); 
}

Пример 4. Отображение камеры на мониторе по нажатию кнопки на пульте управления

Приведенный ниже пример работает только для камер, у которых в конфигурации создан пульт управления PTZ. При настройке Монитора видеонаблюдения следует для 10 кнопок джойстика выбрать действие Перейти в пресет с параметрами 1,2,3...,0 (см. Руководство по установке и настройке компонентов охранной системы, раздел  Присваивание клавишам джойстика команд при помощи Монитора видеонаблюдения).

Пример. По нажатию на кнопку пульта отображать соответствующую камеру в активном мониторе. Скрипт должен срабатывать по таймеру с ID = 1.

Примечание.

Необходимо заранее создать и настроить объект Таймер, установив значение Год равным текущему году. Настройка объекта Таймер подробно описана в документе Руководство администратора, в разделе Создание и настройка объекта Таймер.

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

if (Event.SourceType=="TIMER" && Event.SourceId=="1" && Event.Action=="TRIGGER")
{
  mon="1";
  DebugLogString("на монитор "+ Itv_var("cam"));
  DoReactStr("MONITOR",mon,"ACTIVATE_CAM","cam<"+Itv_var("cam")+">");
  Itv_var("cam")="";
}

if (Event.GetParam("source_type")=="TELEMETRY" && Event.GetParam("action")=="GO_PRESET")
{
  DoReactStr("TIMER","1","START","bound<2>");
  var key=Event.GetParam("param4_val");
  DebugLogString("Key:"+key);
  Itv_var("cam")=Itv_var("cam")+key;
  DebugLogString(Itv_var("cam"));
}

Пример 5. Отправка камере команды через HTTPAPI камеры

Пример. IP-адрес камеры 192.168.0.13.

Следующая команда позволяет включить стеклоочиститель на камере:

192.168.10.101/httpapi/SendPTZ?action=sendptz&PTZ_PRESETSET=85

Следующая команда выключает стеклоочиститель на камере:

192.168.10.101/httpapi/SendPTZ?action=sendptz&PTZ_PRESETSET=86

Необходимо отправлять данные команды камере при помощи скрипта на языке JScript.

function DoPreset(preset)
{
    xmlhttp=new ActiveXObject("MSXML2.XMLHTTP");
    if(xmlhttp == null)
	{
           return;
	}
	xmlhttp.open("GET", "http://192.168.0.13/httpapi/SendPTZ?action=sendptz&PTZ_PRESETSET="+preset, false,"admin","1234");

	xmlhttp.send();
	DebugLogString(xmlhttp.status);
}
if (Event.SourceType == "MACRO" && Event.SourceId == "6" && Event.Action == "RUN") 
{
 DoPreset("85");
}

if (Event.SourceType == "MACRO" && Event.SourceId == "7" && Event.Action == "RUN") 
{
 DoPreset("86");
}

Пример 6. Скрипт для выделения оставленных предметов рамкой на живом видео

Если используется функция детекции предметов на видеоизображении (см. Руководство Администратора, раздел Создание и настройка объекта Трекер), то при просмотре архива обнаруженные оставленные предметы будут выделяться на видеоизображении рамкой. Для выделения оставленных предметов рамкой на живом видео необходимо использовать следующий скрипт, который предназначен для рисования рамки вокруг оставленного предмета при получении тревоги по детектору VMDA:

if (Event.SourceType=="CAM_VMDA_DETECTOR")
{
 cam=GetObjectParentId("CAM_VMDA_DETECTOR",Event.SourceId,"CAM");
 if (Event.Action=="ALARM")
 {
   var x1,x2,y1,y2;
   x1=Event.GetParam("x");
   x2=Event.GetParam("w");
   y1=Event.GetParam("y");
   y2=Event.GetParam("h");
   x2=parseInt(x1)+parseInt(x2);
   y2=parseInt(y1)+parseInt(y2);
   DoReactStr("MONITOR","","SET_MARKRECT","cam<"+cam+">,color<255>,id<"+cam+">,x1<"+x1+">,x2<"+x2+">,y1<"+y1+">,y2<"+y2+">");
   DebugLogString("x1:"+x1+" x2:"+x2+" y1:"+y1+" y2:"+y2);
 }
 else
 {
   DoReactStr("MONITOR","","DEL_MARKRECT","cam<"+cam+">,id<"+cam+">");
 }
} 

Пример 7. Использование событий START и STOP для Сервиса отказоустойчивости

Требуется не переносить на резервный Сервер объекты с более чем одного основного Сервера. Для этого при переносе на резервный Сервер объектов с какого-либо основного Сервера необходимо отключать все остальные объекта Сервис отказоустойчивости на данном резервном Сервере.

if (Event.SourceType == "FAILOVER" )
{
if (Event.Action == "START") {action="DISABLE";}
if (Event.Action == "STOP") {action="ENABLE";}
id=Event.SourceId;
msg=CreateMsg();
  msg.StringToMsg(GetObjectIds("FAILOVER"));
  var objCount=msg.GetParam("id.count");
    for (i=0;i<objCount;i++)
    {
     pid=msg.GetParam("id."+i); 
     if (!(id==pid)) { DoReactStr("FAILOVER",pid,action,"");}
  } 
}

Пример 8. Использование встроенного детектора подсчета посетителей IP-камеры Bosch FLEXIDOME IP dynamic 7000 VR

По достижению количества посетителей 20 на встроенном детекторе подсчета посетителей IP-камеры Bosch FLEXIDOME IP dynamic 7000 VR (с идентификатором 1) вызывать макрокоманду 1. 

n=20;
if(Event.SourceType == "CAM_IP_DETECTOR" && Event.SourceId=="1" && Event.Action == "DETECTED")
{
 v=Event.GetParam("param0").split(";")[1];
 if (parseInt(v.split(":")[1])==n)
 {
     DoReactStr("MACRO","1","RUN","");
 } 
}

Пример 9. Отправка сообщения электронной почты с HTML-разметкой

По макрокоманде 1 отправлять сообщение с приложенными файлами detected.png и found.jpg из папки C:\\Pictures\\ на адрес example@gmail.com. Сообщение должно быть отформатировано следующим образом:

Обнаружено лицо

Обнаруженное лицоЛицо в базе данных
файл detected.pngфайл found.jpg
if(Event.SourceType == "MACRO" && Event.SourceId=="1" &&Event.Action=="RUN")
{
var file1 = "detected.png";
var file2 = "found.jpg";
var file_folder = "C:\\Pictures\\";

var test_event = CreateMsg();
test_event.StringToMsg("MAIL_MESSAGE|1|SEND_RAW|cc<>,to<danil@itv.ru>,objname<Почтовое сообщение 1>,subject<>,parent_id<1>,flags<>,pack<>,name<Почтовое сообщение 1>,from<example@gmail.com>,_marker<>");

test_event.SetParam("body","<html><body>\r\n<h3>Face found</h3>\r\n<table><tr>\r\n<td>Detected</td><td>Found in DB</td>\r\n</tr><tr>\r\n<td><img width='200' alt='image1' src='cid:"
+
file1
+
"'/></td>\r\n<td><img width='200' alt='image2' src='cid:"
+
file2
+
"'/></td>\r\n</tr><tr>\r\n<td>Сообщение отправлено из ПК Интеллект</td>\r\n</tr></table>\r\n</body></html>");
test_event.SetParam("attachments",file_folder+file1+";" + file_folder+file2);
test_event.SetParam("is_body_html", 1);
DoReact(test_event);
}
  • No labels