Получение скриншота (фото) с камеры из 1С. Управляемые формы

20.04.18

Интеграция - Периферийные устройства

Получение и вывод на управляемую форму фото с IP камер видео наблюдения.

Скачать файлы

Наименование Файл Версия Размер
: ФотоСКамер
.epf 10,07Kb
70
.epf 1.0.0 10,07Kb 70 Скачать

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

В данной обработке присутствует пример получения фото с камер Hikvision , Dahua и получение фото с ПО TRASSIR (по их словам любую камеру можно к ним подключить).

Камеры Dahua используют Дайджест-аутентификация (Digest), в обработке показано, как с ней работать из 1С.

Ниже привожу пример для TRASSIR 

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt"); //для получения Джейсона
    Соединение = Неопределено;
    Попытка
        ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
        Соединение = Новый HTTPСоединение(ИПТрассир,ПортТрассир,,,,,ssl); //ИП и Порт Вашей камеры
    Исключение
        Соединение = Неопределено;    
    КонецПопытки;
    Результат =  Соединение.Получить("/login?password="+ПарольТрассир,ИмяВременногоФайла); //необходимо передать ТОЛЬКО пароль от камеры в ответ прийдет джейсон
    //в котором будет наш ид на текущую сессию
    ЧтениеДжейсон = Новый ЧтениеJSON();
    ЧтениеДжейсон.ОткрытьФайл(ИмяВременногоФайла,"UTF8");
    Текст = ПрочитатьJSON(ЧтениеДжейсон,Истина);
    
    Для Каждого Стр Из Текст Цикл
        
        Если Стр.Ключ = "sid" Тогда
            ИДСессии = Стр.Значение;
            Прервать;
        КонецЕсли;
        
    КонецЦикла;   
    
    ЧтениеДжейсон.Закрыть();    
    УдалитьФайлы(ИмяВременногоФайла); //удалим файл что бы не захламлять

      ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt"); 
        
        Результат =  Соединение.Получить("/objects/?sid=" + ИДСессии,ИмяВременногоФайла);  //нам прийдет имена всех подключенных камер 
        
        ЧтениеДжейсон = Новый ЧтениеJSON();
        ЧтениеДжейсон.ОткрытьФайл(ИмяВременногоФайла,"UTF8");
        Текст = ПрочитатьJSON(ЧтениеДжейсон,Истина);
        
        Для Каждого Стр Из Текст Цикл
            НоваяСтрока = ТаблицаКамер.Добавить();//ТаблицаКамер ТЧ на форме
            НоваяСтрока.ИмяКамеры = Стр.Получить("guid");
            НоваяСтрока.НазваниеКамеры = Стр.Получить("name");     
        КонецЦикла;  
        
        ЧтениеДжейсон.Закрыть();
        УдалитьФайлы(ИмяВременногоФайла);

///////

//После получения выбираем наше имя камеры

        ИмяВременногоФайлаКартини = ПолучитьИмяВременногоФайла("jpeg");
        
        Результат =  Соединение.Получить("/screenshot/" + Элементы.ТаблицаКамер.ТекущиеДанные.ИмяКамеры + "?timestamp=0&sid=" + ИДСессии ,ИмяВременногоФайлаКартини);  
        
        // и размещение ее на форме:
        Описание = Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайлаКартини, "");
        ПомещаемыеФайлы = Новый Массив;
        ПомещенныеФайлы = Новый Массив;
        
        ПомещаемыеФайлы.Добавить(Описание);    
        ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы,,Ложь);
        ЭтаФорма.КартинкаТрассер = ПомещенныеФайлы[0].Хранение;
        
        УдалитьФайлы(ИмяВременногоФайлаКартини);

 

Интерфейс обработки интуитивно понятен. Присутствуют 3 вкладки для каждой камеры. Необходимо заполнить параметрами и нажать кнопку "Выполнить запрос".

Особенность камер ХикВизион: если камера находится с Вами в одной сети, порт указывать необязательно.

Разработка проводилась на платформе 1С:Предприятие 8.3 (8.3.11.2867).

Работоспособность проверено на конфигурации 1С:CRM для Украины, редакция 2.0 (2.0.13.3).

фото камеры скриншот фото с камеры как получить фото скриншот из 1С камеры и 1С  Дайджест-аутентификация Digest Digest

См. также

Распознавание номеров автомашин с ip - камер, видео, фото

Распознавание документов и образов Периферийные устройства Автомобили, автосервисы Россия Платные (руб)

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

20400 руб.

31.05.2023    3724    2    1    

3

Прямая печать на принтерах TSC из 1С

Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Прямая печать на принтерах TSC из 1С при вызове с сервера позволяет печатать из тонкого клиента, мобильного клиента и веб-клиента. Потребуется установка драйвера и библиотеки для отправки команд на этот драйвер.

1 стартмани

19.02.2024    475    3    realslavyan    0    

5

HotKeys на Python для 1С

Периферийные устройства Конфигурации 1cv8 Бесплатно (free)

Недавно прочитал статью на Инфостарте о KeyPad и вначале захотел себе такой, но через какое-то время я понял, что дополнительная даже маленькая клавиатура занимает место, и нужно все время держать ее под рукой. Это все создает дополнительные неудобства.

20.12.2023    4818    John_d    25    

70

Очистка очереди печати конкретного принтера

Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Очистка очереди печати выбранного принтера, перезапуск службы печати, вывод списка системных принтеров, открытие свойств принтера из 1С.

1 стартмани

07.11.2023    1234    1    vsnazarov    1    

26

Печать этикеток на DYMO LabelManager 280 через DYMO Connect Web Service

Периферийные устройства WEB-интеграция Этикетки, ценники Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

На сайте производителя принтера DYMO LabelManager 280 вместе с драйвером поставляется пакет DYMO Connect, который предлагает функционал вёрстки этикеток в фирменном формате и отправки их напрямую на принтер. Так же в этом пакете есть веб-сервис для взаимодействия с принтером через HTTP-запросы, о котором и пойдет речь в этой статье.

29.08.2023    1415    GeraltSnow    0    

3

Второй монитор в качестве дисплея покупателя

Розничная торговля Периферийные устройства Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Использование второго монитора в качестве дисплея покупателя. Выполнено в качестве расширения.

1 стартмани

02.02.2023    3135    25    windsurf    4    

5

Космическая Одиссея 2020 года

Мониторинг Периферийные устройства Языки и среды Бесплатно (free)

Организация потокового обмена системы 1С с большим количеством разнородных устройств – нетривиальная задача. О том, как организовать архитектуру такого решения с учетом возможного масштабирования хранимых данных и поддерживаемых интерфейсов, на конференции Infostart Event 2021 Post-Apocalypse рассказал TeamLead и специалист по внедрению компании ИнфоСофт Григорий Шатров.

11.11.2022    3404    G.Shatrov    2    

25
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 21.04.18 01:17
Сообщение было скрыто модератором.
...
2. androgin 21.04.18 16:28 Сейчас в теме
Уже можно не использовать временные файлы для получения ответа от соединения.
Пример:
Запрос = Новый HTTPЗапрос;
Запрос.АдресРесурса = Настройка_АдресСкрипта;
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
simuljakr; Hexed; +2 Ответить
3. harvester_sorrow 24 21.04.18 17:00 Сейчас в теме
(2) Спасибо за информацию, на момент написания обработки, к сожалению не знал об этом, в будущем учту

(2)
5. androgin 22.04.18 02:31 Сейчас в теме
(3)
Текст = ПрочитатьJSON(ЧтениеДжейсон,Истина);
Для Каждого Стр Из Текст Цикл
......


какой объект в Текст?
7. harvester_sorrow 24 22.04.18 09:44 Сейчас в теме
(5) Насколько я помню структуру,но более точно смогу в понедельник сказать если интересно.
9. androgin 22.04.18 14:59 Сейчас в теме
(7) да, интересно ))
хочу узнать зачем вы циклом ключ ищете)))
10. harvester_sorrow 24 23.04.18 09:05 Сейчас в теме
(9)Прошу прощения, запамятовал, там приходит соответствие, а внутри еще ряд соответствий, в которых хранятся значения.
6. androgin 22.04.18 02:48 Сейчас в теме
(3)
Описание = Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайлаКартини, "");
ПомещаемыеФайлы = Новый Массив;
ПомещенныеФайлы = Новый Массив;
        
ПомещаемыеФайлы.Добавить(Описание);    
ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы,,Ложь);

ЭтаФорма.КартинкаТрассер = ПомещенныеФайлы[0].Хранение;
Показать

Это можно заменить этим:
Хранение = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайлаКартини), Новый УникальныйИдентификатор);
ЭтаФорма.КартинкаТрассер = Хранение;
8. harvester_sorrow 24 22.04.18 09:47 Сейчас в теме
(6) можно,не спорю.Также сразу можно избавиться от модальности используя НачатьПомещенияФайла.
В данном примере показан пример работы с камерой, но за критику спасибо,всегда полезно узнать что то новое)
оggghhhiiu; +1 Ответить
4. пользователь 22.04.18 00:43
Сообщение было скрыто модератором.
...
11. Realnt 22.07.18 08:26 Сейчас в теме
Добрый день, для каких моделей видеорегистраторов написана эта обработка?
12. пользователь 21.10.19 18:16
Сообщение было скрыто модератором.
...
13. adeptis 10 05.11.19 12:48 Сейчас в теме
Здравствуйте. Подскажите, какой вы порт указывали для камер Dahua?
14. harvester_sorrow 24 05.11.19 13:23 Сейчас в теме
(13) Добрый день. У нас она висела на 80, но это у админа вашего (или того кто устанавливал/настраивал) нужно узнать на каком порту висит камера.
15. adeptis 10 13.11.19 17:30 Сейчас в теме
Здравствуйте. Не могу понять, откуда берутся эти значения в коде:
nc=00000001
cnonce=""4d705c8aa158ff60""

	ОтветМД5 = НРЕг(MD5(НРег(A1)+":"+Нонс2+":00000001:4d705c8aa158ff60:auth:"+НРег(А2)));	
		fg.Заголовки.Вставить("Authorization","Digest username="+Пользователь+", realm="+realm+", nonce="""+Нонс2+""", uri="+URI+", algorithm=MD5, response="""+ОтветМД5+""", qop=auth, nc=00000001, cnonce=""4d705c8aa158ff60""");	
	


Как вы их получили?
16. harvester_sorrow 24 13.11.19 17:49 Сейчас в теме
(15)
00000001:4d705c8aa158ff60:auth
Данная конструкция была честно стырена к какого то американского сайта, она была на питоне.
17. harvester_sorrow 24 13.11.19 17:49 Сейчас в теме
(15) откуда они взялись, не скажу к сожалению.
18. Logarifm_Andre 13 16.06.21 15:04 Сейчас в теме
добрый день.
Имеется камера ХикВизион.
Скачали обработку, указали параметры.
Выдало сообщение: Не удалось подключится к сайту, по заданным параметрам

Подскажите, что сделали не так?
19. adeptis 10 16.06.21 15:17 Сейчас в теме
(18) рекомендую в коде найти строку http(s)-запроса и попытаться с подставленными значениями (IP, порт и т.д.) открыть эту фотку в браузере. Если в браузере открывается - вы на правильном пути, дальше разбираться надо.

Не знаю как по ХикВиженам, но часто бывает, что у разных камер одного и того же (!!!) производителя разные модели камер требуют разной строки http-запроса. А бывает такое, что камера просто не умеет делать снепшоты. В этом случае можно купить софтовую систему типа Трассир (эта обработка её теоретически поддерживает) или DevLine. Эти системы работают не со снепшотами, а с потоками видео. И уже из потоков могут выдернуть фотку и передать её по http-запросу в 1С.
20. Logarifm_Andre 13 16.06.21 15:42 Сейчас в теме
(19)
Не знаю как по ХикВиженам, но часто бывает, что у разных камер одного и того же (!!!) производителя разные модели камер требуют разной строки http-запроса. А бывает такое, что камера просто не умеет делать снепшоты. В этом случае можно купить софтовую систему типа Трассир (эта обработка её теоретически поддерживает) или DevLine. Эти системы работают не со снепшотами, а с потоками видео. И уже из потоков могут выдернуть фотку и передать её по http-запросу в 1С.


Спасибо за быстрый отклик.

Соединение проходит без ошибок.
Но вот после Соединение.Получить(....) ошибка:

по причине:
Файл не обнаружен '/Streaming/channels/101/picture?snapShotImageType=JPEG'
по причине:
Ошибка работы с Интернет: ресурс не найден (404). <!DOCTYPE html>
<html><head><title>Document Error: Not Found</title></head>
<body><h2>Access Error: 404 -- Not Found</h2>
<p>Request Refuse: cgi integrate function is disabled.</p>
</body>
</html>

по причине:
Ошибка работы с Интернет: ресурс не найден (404)


Может параметры поменялись процедуры Соединение.Получить(....)

ЗЫ: простите за глупые вопросы, не занимался такими http-запроса
21. Logarifm_Andre 13 16.06.21 16:01 Сейчас в теме
Параметры Соединение.Получить(....) не изменялись, по крайней мере в СП
22. Logarifm_Andre 13 16.06.21 16:12 Сейчас в теме
Нашел в инструкции к ХикВижен:
получить JPEG-снимок основного потока камеры:


Удалось, указав свои параметры, получить фото с камеры на Google Chrome, а вот в Internet Explorer отказывается этаже команда работать.

Возможно настройки Internet Explorer играют роль, но какие?
23. Logarifm_Andre 13 16.06.21 17:42 Сейчас в теме
Пытаемся получить JPEG-снимок основного потока камеры (на сайте разработчика ХитВижн имеется ниже описанная инструкция):


При вставке данной ссылки в браузер Google Chrome картинку получаем.
При вставке в Internet Explorer появляется ошибка

Возможно сталкивались с таким?

Спасибо
Прикрепленные файлы:
25. adeptis 10 17.06.21 09:32 Сейчас в теме
(23) По всей видимости приводимые вами инструкции в комментах не отображаются. Не вижу то, что вы после двоеточия приводите.

Вопрос: при попытке в Хроме открыть эту строку, возникает ли диалоговое окно с дополнительным запросом логина-пароля? Если да, то вполне возможно есть какая-нибудь дополнительная аутентификация, которая в этой же обработке описана для камер Dahua. Впрочем, для Dahua она тоже у нас не завелась - пришлось нам переписывать :).

Еще такой момент: строка запроса в Хроме получается http или https??? Скопируйте её из Хрома и вставьте в блокнот. Там несколько по-разному код 1С выглядит для http и https, насколько помню.

P.S. Я не разработчик, я тоже эту обработку купил :)
26. Logarifm_Andre 13 17.06.21 09:42 Сейчас в теме
(25) Спасибо, все получилось.
У нас параллельно с вами шли комментарии тут)))

Вопрос: при попытке в Хроме открыть эту строку, возникает ли диалоговое окно с дополнительным запросом логина-пароля? Если да, то вполне возможно есть какая-нибудь дополнительная аутентификация

Да такое было.

Вообщем, выше я описал что необходимо сделать для работоспособности.....но вот этого сообщения пока не вижу.
Лучше всего приложить скрин настроек из ХикВижн
Прикрепленные файлы:
24. Logarifm_Andre 13 17.06.21 09:31 Сейчас в теме
Решение нашлось.
В 1С получаем http-запросом. Спасибо автору за обработку, она рабочая
Получаем JPEG-снимок основного потока камеры (информация от разработчика по ссылке My Webpage в разделе "RTSP ссылки"):
http://admin:passwd@ip-cam/ISAPI/Streaming/channels/101/picture?snapShotImageType=JPEG


Изменить настройки IP камеры в веб интерфейсе:
1. Сеть - Доп.настройки - Протокол интеграции
1.1. Установить галочку "Включить-Hikv..."
1.2. "Аутентификация Hikvision-CGI" - указать "digest/basic"
2. Система - Безопасность - Авторизация - указать "digest/basic"
27. erutan 103 15.08.21 21:22 Сейчас в теме
Здравствуйте, коллеги.
Спасибо, помогло! Но есть уточнение по Трассиру

на форме порт- это строка, а для поднятия соединения пришлось переделать число

	Попытка
		ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
		Соединение = Новый HTTPСоединение(ИПТрассир,число(ПортТрассир),,,,,ssl);
	Исключение
		Соединение = Неопределено;	
	КонецПопытки;
28. adeptis 10 16.08.21 09:27 Сейчас в теме
(27) вот-вот. Вообще непонятно, как оно изначально работало с этой ошибкой.

А всё остальное по трассиру прямо таки заработало? Помню, пришлось ещё что-то переделывать по дайджест-аутентификации. Впрочем, может, конечно, от конкретной модели камеры зависит.
29. erutan 103 16.08.21 13:48 Сейчас в теме
(28) да, остальное у нас взлетело.
30. slider_rk 12.01.22 12:57 Сейчас в теме
31. slider_rk 12.01.22 18:53 Сейчас в теме
пришлось допиливать
32. Batman1978 21.09.22 14:31 Сейчас в теме
(31)
Не затруднит поделиться ?
33. slider_rk 28.09.22 13:40 Сейчас в теме
не затруднит. куда?
34. slider_rk 28.09.22 14:47 Сейчас в теме
&НаКлиенте
перем Авторизация;
&НаКлиенте
Процедура ПолучитьИСохранитьФото( ЗаписатьВФайл = ложь )
	//ip порт логин пароль область(узнается отдельно)
	Логин = "admin";
	Пароль = ""; 
	Ресурс = "cgi-bin/snapshot.cgi";
	Соединение = Неопределено;
	Попытка
		Соединение = Новый HTTPСоединение("192.168.1.100", 80);
	Исключение
		Соединение = Неопределено;	
		возврат;
	КонецПопытки;
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Authorization",Авторизация);	
	Запрос = Новый HTTPЗапрос(Ресурс,Заголовки);
	Результат = неопределено;
	РезультатЗапроса = Общий.ВыполнитьHTTPЗапрос(Соединение, Ресурс, Заголовки, Результат);	
	Если РезультатЗапроса тогда
		 Картинка = СоздатьКартинку(Результат);
		 Если ЗаписатьВФайл тогда
			 ИмяФайла = ПолучитьИмяВременногоФайла("*.jpg");
			 Картинка.Записать( ИмяФайла );
		 конецесли;
		 //ФотоСнимок - реквизит формы "строка"
		 ФотоСнимок = ПоместитьВоВременноеХранилище(Картинка, ЭтаФорма.УникальныйИдентификатор);
		 возврат;
	 Иначе
		 Если Результат = неопределено тогда
			  возврат;
		КонецЕсли;
	КонецЕсли;
	Ответ = Результат.Заголовки.Получить("WWW-Authenticate");
	ОтветСтруктура =  ОтветВСтруктуру(Ответ);
	//Digest realm="Login to c3a2a9416508ed3f90c6ed772e86ec4d", qop="auth", nonce="139864845", opaque="361774fbda64eb3229464463d6bc745e71c66032"
	realm = "";
	Если ОтветСтруктура.Свойство("Digest_realm",realm) Тогда
	КонецЕсли; 
	nonce = "";
	Если ОтветСтруктура.Свойство("nonce",nonce) Тогда
	КонецЕсли; 
	
	
	cnonce = стрзаменить(""+новый УникальныйИдентификатор,"-","");
	      
	
	A1 = MD5(Логин + ":" + realm + ":" + Пароль);
	А2 = MD5("GET:"+Ресурс);

	ОтветМД5 = НРЕг(MD5(НРег(A1)+":"+nonce+":00000001:"+cnonce+":auth:"+НРег(А2)));	
	
	Авторизация = "Digest username="""+Логин+""", realm="""+realm+""", nonce="""+nonce+""", uri="""+Ресурс+""", algorithm=""MD5"", response="""+ОтветМД5+""", qop=""auth"", nc=""00000001"", cnonce="""+cnonce+"""";
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Authorization",Авторизация);	
	
	Результат = неопределено;
	РезультатЗапроса = Общий.ВыполнитьHTTPЗапрос(Соединение, Ресурс, Заголовки, Результат);	
	
	Если РезультатЗапроса тогда
		 Картинка = СоздатьКартинку(Результат);
		 Если ЗаписатьВФайл тогда
			 ИмяФайла = ПолучитьИмяВременногоФайла("*.jpg");
			 Картинка.Записать( ИмяФайла );
		 конецесли;
		 
		 ФотоСнимок = ПоместитьВоВременноеХранилище(Картинка, ЭтаФорма.УникальныйИдентификатор);
		 
		 возврат;
	 Иначе
		// Если Результат = неопределено тогда
		//	  возврат;
		//КонецЕсли;
	КонецЕсли;

КонецПроцедуры

Функция ОтветВСтруктуру(СтрокаОтвет)
	//Digest realm="Login to c3a2a9416508ed3f90c6ed772e86ec4d", qop="auth", nonce="139864845", opaque="361774fbda64eb3229464463d6bc745e71c66032"
	
	Строки = СтрРазделить(СтрокаОтвет,",");
	Результат = новый Структура;
	Для каждого Подстрока Из Строки Цикл
		мКлючИЗначение = СтрРазделить(Подстрока, "=");
		сКлюч = сокрЛП( мКлючИЗначение[0] );
		сКлюч = СтрЗаменить(сКлюч," ","_");
		
		сЗначение = сокрЛП( мКлючИЗначение[1] );
		сЗначение = СтрЗаменить(сЗначение,"""","");
		Результат.Вставить(сКлюч, сЗначение );
	КонецЦикла;
	возврат Результат;
КонецФункции // ОтветВСтруктуру()


&НаСервере
Функция MD5(СтрокаДляХеширования)
  
  Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
  Хеш.Добавить(СтрокаДляХеширования);
  Возврат СтрЗаменить(Строка(Хеш.ХешСумма), " ", "");
    
КонецФункции

/////////////////////////////

Авторизация = "";
Показать
Aili; оggghhhiiu; zvp111; Andy.Shel; +4 Ответить
35. marat055 26.09.23 16:03 Сейчас в теме
Добрый день. Можно ли ее доработать под мобильное приложение?
Оставьте свое сообщение