...

суббота, 3 декабря 2016 г.

Подключение периферийных модулей к MIPSfpga, на примере ультразвуковых датчиков расстояния

[Перевод] Опасности очаровашек в дизайне

Усовершенствование системы видеонаблюдения с использованием OpenCV и Telegram bot

С чего все начиналось


Все началось с того, что я захотел установить у себя «умную» систему видеонаблюдения на Raspberry.
Хочу отдельно отметить, что для этого воспользовался несколькими статьями на Хабре. Спасибо авторам за их посты. Они реально помогли.
В итоге установил на купленном Raspberry Pi3 USB-камеру Logitech, смонтировал Яндекс.Диск и с периодичностью в 30 секунд делал снимки, которые затем копировал в папку на Яндекс.Диске.
Поигравшись с дальнейшем архивированием файлов, монтированием из отдельных снимков видео, забросил новую «игрушку» на несколько месяцев.


Продолжение истории


Пока Raspberry был выведен из продакшен, не давала покоя мысль как избавиться от большого количества снимков, которые будут скапливались на Яндекс.Диске при работе решения. Хотелось оптимизировать реализованное решение…

Идея


Немного погуглив, выработал такое усовершенствование: копировать на Яндекс.Диск только те изображения, на которых будет выявлено присутствие человека или изображение на снимке будет изменено, например, сначала на изображении дверь закрыта, а затем открыта. При этом отправлять при выявлении таких событий уведомление, используя Telegram. Telegram был выбран вместо почты, т.к. обеспечивает доставку сообщений в режиме real-time, плюс, это модно.
Разработку решил выполнять на Python и bash.

Реализация


Для выявления присутствия человека была выбрана библиотека OpenCV, которая в числе прочего, способна определить наличие предмета на снимке, например, лица человека. Так же данная библиотека предлагает реализацию большого количества алгоритмов Machine Learning.
Пример кода на Python ниже. Использовал один из готовых xml для определения лица (haarcascade_frontalface_default.xml).
import cv2
import sys

imagePath = sys.argv[1]
cascPath = sys.argv[2]

faceCascade = cv2.CascadeClassifier(cascPath)

image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.3,
    minNeighbors=5,
    minSize=(30, 30),
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

if(len(faces)>0):
 print("Found {0} faces!".format(len(faces)))
else:
 print("Not found")

Определение изменений на снимке оказалось не совсем тривиальной задачей, к тому же на Raspberry, хочу заметить, что у меня последняя версия – Pi3, выявление разницы (изменения) для двух снимков занимает определенное время. Покопался в Интернете, нашел несколько разных методов.
Сразу оговорюсь, что использовал готовые алгоритмы на Python, лишь немного их дорабатывал, при необходимости. Поэтому приводить коды не стал.

1. Начал с функции subtract из библиотеки OpenCV.

diff=cv2.subtract(img2,img1)

2. Попробовал определять евклидово и манхеттенское расстояние с использованием scipy.
3. Поигрался с библиотекой PIL.
Попробовав эти варианты, остановился на определении разницы в размере файлов между двумя изображениями в процентном отношении. Реализовал этот «подход» в shell-скрипте. Этот метод оказался самым производительным из опробованных, что неудивительно. Разумеется, о высокой точности пока говорить не приходится, но поскольку мой планировщик cron настроен на периодическую съемку, которая выполняется каждые 30 секунд, то позволить себе лишние 7-8 секунд на выявление разницы, счел слишком расточительным. У меня уже определение лица «съедает» около 5 секунд (с учетом невысокого разрешения съемки).
Небольшой кусочек shell-скрипта ниже.
f1=`stat -c%s "$prev_file"`
f2=`stat -c%s "$new_file"`

if [[ $f1 -le $f2 ]];then
 top=$f1
 base=$f2
else
 top=$f2
 base=$f1
fi

percentage=$(( (100-(100*top / base)) ))
echo "Difference is $percentage%"

if(($percentage >= $hurdle));then
 changed=0
 echo "Big change"
else
 echo "Small change"
fi

Интеграция с Telegram


Интеграция с Telegram уже достаточно описана. Я выполнил необходимые шаги, зарегистрировал бота, получил токен.
Затем написал небольшой скрипт на Python, который отправляет мне сообщение от созданного telegram бота. Сообщение — один из параметров скрипта, который указываю при его вызове.
import sys

import telepot
bot = telepot.Bot('###############################')
#bot.getMe()

#from pprint import pprint
#response = bot.getUpdates()
#pprint(response)

#bot.sendMessage(########, 'Alarm from Telegram bot!')
bot.sendMessage(########, sys.argv[1])

Алгоритм решения


Алгоритм решения реализовал на shell-скрипт, который последовательно выполняет съемку, затем анализирует есть ли изменения в полученных изображениям, выявляет лицо на снимке и отправляет сообщение от созданного Telegram бота с определенным сообщением, если выявлено изменение или обнаружено лицо. Если выявлено лицо или изменение, то файл копируется на Яндекс.Диск.

Ниже приведу только часть скрипта, которая отражает вызовы python-скриптов.

#! /bin/bash

#...

face=$(python face_detect.py "$new_file" haarcascade_frontalface_default.xml 2>&1)
echo "$face"
if [[ $face != "Not found" ]];then
 ffound=0
 echo "Faces found"
else
 echo "Faces does not found"
fi
echo "----------"

echo "Changes: $changed"
echo "Faces found: $ffound"
echo "----------"
#=====================Processing=========================================

now=$(date +"%Y-%m-%d_%H%M")
# 1. Copy
if [ $changed == 0 ] || [ $ffound == 0 ];then
 cp "$new_file" "/home/pi/webcam/$now---$new_file" \
 &&  echo "File copied."
else
 echo "All Ok."
fi
# 2. Rename
cd /home/pi \
&& mv "$new_file" previous.jpg \
&& echo "File renamed."
# 3. Send telegram nessage
if [ $changed == 0 ] && [ $ffound == 0 ];then
 python send_telegram.py 'Alarm: Changes & Faces detected!' \
 && echo "Alarm: Changes & Faces detected!"
elif [ $changed == 1 ] && [ $ffound == 0 ];then
 python send_telegram.py 'Alarm: Faces detected!' \
 && echo "Alarm: Faces detected!"
elif [ $changed == 0 ] && [ $ffound == 1 ];then
 python send_telegram.py 'Alarm: Changes detected!' \
 && echo "Alarm: Changes detected!"
else 
 echo "Nothing to send."
fi

#...

exit 0

Результаты

Ниже представлю некоторые результаты работы решения.
1. Результаты определения лиц на фото. Свои фото прикладывать не стал.
image

image
2. Сообщения от Telegram бота.
image
3. Фото на Яндекс.Диске
image

Выводы и дальнейшие шаги

Тестирование нового решения выявило ряд проблем:

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

В общем, осталось совсем немного чтобы запускать идею в продакшен.
1. установить инфракрасную камеру;
2. выбрать надежные методы контроля изменений;
3. и конечно, настроить параметры определения лиц на снимках.

Дальнейшие исследования/тестирование решения будут продолжены…

Комментарии (0)

    Let's block ads! (Why?)

    Обзор СКУД с бесплатным программным обеспечением

    imageОдна из интересных тенденций на российском рынке СКУД это появление компаний производителей, представляющих свое полнофункциональное программное обеспечение абсолютно бесплатно.

    Волшебная притягательность слова «бесплатно» как магнитом притягивает новых клиентов, но у бесплатного всегда есть и обратная сторона, всмотримся в эту темную сторону.

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

    Компания «РусГард»
    Компания была основана в мае 2010 года в Москве. Предлагает самый широкий ассортимент оборудования под брендом RusGuard, в том числе оборудования уникального для российского рынка, например контроллер ACS-102-CE-B (POE) со встроенным POE сплиттером, который позволяет питать не только сам контроллер со считывателями, но и замки, защелки и т.д.

    Или ACS-102-CE-B (WF) имеет встроенный WiFi модуль, который поддерживает все современные протоколы шифрования трафика: 64/128-bit WEP, WPA-PSK TKIP/AES, WPA2-PSK TKIP/AES; и легко настраивается через встроенный WEB интерфейс, встроенный Wi-Fi встречается на российском рынке, но далеко не у всех.

    Всего 11 основных моделей контроллеров и 3 специализированных для перехода с уже установленной системы контроля и управления доступом на базе оборудования Legos

    Кроме контроллеров Русгард предлагает линейку считывателей RDR-202-Multi считывающих все известные науке стандарты — Cotag (Siemens-Bewator), Indala-26, Indala-44, HIDProx Card II, Em-marine, Mifare Classic, Mifare Plus, Mifare Ultralight, Mifare Ultralight C, DESfire EV1, icode SLI, NXP SmartMX JCOP, Infineon Gemalto TOP.

    Компания «Страж»
    Представлены крупнейшим в РФ альянсом компаний «Рубеж», работающим в сфере систем безопасности 25 лет. Предлагают классическую серию из трех контроллеров под брендом Strazh которую в своем ассортименте имеет 80% производителей СКУД.
    И еще целую серию ничем не примечательных товаров под тем же брендом — считыватели, электромеханические, замки, электромагнитные замки, дверные доводчики, кнопки выхода, идентификаторы, которые в своем ассортименте имеет любой более или менее крупный торговый дом.

    Компания «Эра новых технологий»
    В 2011 году представила, классическую линейку контроллеров СКУД под брендом Эра, преимуществами которых являлась, как тогда так и сейчас, низкая цена, самый дешевый контроллер среди рассматриваемых нами производителей, представляют именно они, контроллер Эра 500 — 5 500 рублей.

    Компания «Сторк»
    Российский разработчик и производитель систем контроля и управления доступом из Санкт-Петербурга успешно работает на рынке систем безопасности с 2000 года.
    Предлагают ассортимент и 5 контроллеров, единственный из 4 контроллеры которого поддерживают интерфейс связи RS-485.

    Сравнительная таблица характеристик и цен (Картинка кликабельна)
    image
    * для контроллеров Эра указана емкость памяти ключей и событий для одной точки доступа, для двух точек емкость будет делится пополам.

    Теперь, когда мы точно знаем какой контроллер выбрать и сколько это будет стоить, приступим к софту.

    Программное обеспечение


    Ну вот мы и подошли к самому сладкому — бесплатному программному обеспечению. Кроме рассматриваемых нами, есть еще куча компаний предлагающих тот или иной программный модуль бесплатно, в наш обзор попали только те кто предлагаем бесплатно весь классический функционал СКУД.

    «RusGuard Soft» от компании «RusGuard»

    Скриншоты интерфейса
                           

    «A.C. Tech» от компании «Страж»,
    Скриншоты интерфейса
             

    «ЭНТ Контроль доступа» от компании «Эра новых технологий»,
    Скриншоты интерфейса
                                

    «StorkAccess» от компании Сторк,
    Скриншоты интерфейса
        

    Классический функционал общий для всех — конфигурация контроллеров, наблюдение в режиме реального времени за событиями происходящими в системе, настройка прав пользователей, создание карточек персонала, редактор шаблонов пропусков, учет рабочего времени, графические планы, фотоверификация, sms и е-mail оповещения.

    Интересное отличие RusGuard это наличие сервиса RusGuard Cloud с помощью которого можно настраивать подключения между элементами системы без статического IP адреса, сервис тоже полностью бесплатен.

    Второе отличие RusGuard это — модуль редактор шаблонов пропусков в бесплатной версии позволяет создавать только один шаблон, если вы захотите использовать большее количество шаблонов придется доплачивать от 20 000 до 300 000 рублей.

    Интеграции


    Известные производители программного обеспечения и оборудования достаточно избирательно подходят к интеграции в свой софт. Именно поэтому количество интеграций является значимой метрикой качества.

    Интеграции Русгард
    Несомненный лидер по количеству интеграция как со сторонними производителями софта, так и с производителями оборудования.

    • Интеграции с охранно-пожарными системами Болид
    • Интеграция с системами видеонаблюдения (Macroscop, Panasonic, ISS, ITV, Ivideon)
    • Интеграция с 1С
    • Интеграция Alphalogic PSIM — системой для мониторинга и управления системами безопасности и инженерными системами зданий
    • Интеграция с системой регистрации посетителей VisitorControl
    • Интеграция с Abbyy PassportReader
    • Интеграция с биометрией ZKTeco

    Большинство модулей интеграции в Русгарге платные, в среднем от 20 000 рублей.

    Интеграции Эры новых технологий

    • С биометрией ZKTeco
    • С видеонаблюдением Линия

    Интеграции Сторк
    • С видеонаблюдением Линия

    Интеграция Страж
    • С видеонаблюдением RVi

    Типы баз данных


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

    Microsoft SQL Server
    «RusGuard Soft» и «A.C. Tech» используют Microsoft SQL Server, который бесплатен в выпуске Express, имеющим определенные ограничения.

    Основное ограничение SQL Server Express это максимальный размер базы данных — 10 ГБ.

    Быстро ли можно наполнить базу данных СКУД до 10 ГБ? Средняя цифра полученная экспертным путем это 3 — 4 года.
    Конечно сильно зависит от количества сотрудников и интенсивности использования, основной объем будут давать фотографии и сканы паспортов, при использовании такого функционала.

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

    Если этого делать категорически не хочется, то нужно внимательно следить за объемом базы данных, и начинать ее чистить до как она достигнет объема в 10 ГБ.

    Firebird
    «ЭНТ Контроль доступа» и «StorkAccess» используют Firebird который как известно полностью бесплатен.
    Даже неискушенный в базах данных человек, в этот момент начинает закрадываться вопрос, почему кто то использует платные базы данных, а кто то бесплатные.

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

    Из документации Сторк

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

    Из документации Эры новых технологий

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

    Безопасность баз данных
    Не могу не упомянуть исследование безопасности баз данных производителей СКУД, в котором из рассматриваемых нами уязвимым оказалось «ЭНТ Контроль доступа», A.C. Tech не исследовался. В StorkAccess и RusGuard Soft уязвимости обнаружены не были.

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

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

    А с учетом того что многие производители СКУД с платным софтом используют схему лицензирования при которой, оплачивается только серверное программное обеспечение, а клиентские рабочие места предоставляются бесплатно, преимущества компаний с бесплатным софтом сводятся к минимуму.

    Для средних и малых компаний в которых небольшое количество персонала, и они вряд ли смогут, на себе ощутить проблемы быстродействия и безопасности базы данных, да и с проблемой переполнения базы они впервые могут столкнутся через 5-7 лет.

    Для них будет важна первоначальная стоимость СКУД, стоимость в целом, с контроллерами, считывателями услугами по монтажу и т.д.

    А с учетом того что самый популярный, он же самый дешевый контроллер для СКУД в России Z-5R стоит всего 590 рублей, напрашивается тот же вывод вопрос бесплатности софта не будет основным.

    Если просуммировать все вышесказанное, получается что бесплатный софт скорее маркетинговый инструмент, нежели серьезный критерий для выбора СКУД.

    Подтверждает этот вывод и выявленный нами лидер — компания Русгард, лидер по программной части, по аппаратной, и лидер по количеству и стоимости платных модулей.

    Если вас заинтересовали СКУД с бесплатным программным обеспечением, или вы хотите сравнить возможности бесплатного и платного софта — мы всегда на связи.

    Комментарии (0)

      Let's block ads! (Why?)