Семинар “Разработка автопилота для своего автомобиля”

30.11.2017 в 17:00 на базе компьютерной академии «ШАГ», по адресу г. Липецк, Советская, 35 состоится семинар на тему “Разработка автопилота для своего автомобиля”

На семинаре вы узнаете:

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

 

Кому необходимо участвовать? Владельцам среднего и малого бизнеса, директорам по развитию, IT–директорам, программистам.

Семинар «Моделирование фрезерных ЧПУ станков»

22.11.2017 в 17:00 на базе компьютерной академии «ШАГ», по адресу г. Липецк, Советская, 35 состоится семинар на тему “Моделирование фрезерных ЧПУ станков”

На семинаре вы узнаете:

  • Методика расчета характеристик шаговых двигателей;
  • Методика расчета характеристик драйверов шаговых двигателей;
  • Методика расчета размеров портала;
  • Топ 10 настольных станков с ЧПУ

Кому необходимо участвовать? Владельцам среднего и малого бизнеса, директорам по развитию, техническим директорам, операторам ЧПУ станков.

Семинар “Детектирование пешеходов на пешеходном переходе для управления светофорным объектом ”

25.11.2017 в 17:00 на базе компьютерной академии «ШАГ», по адресу г. Липецк, Советская, 35 состоится семинар на тему “Детектирование пешеходов на пешеходном переходе для управления светофорным объектом ”

На семинаре вы узнаете, как:

  • обнаружить пешехода в кадре видеопотока ;
  • отслеживать траекторию пешеходов;
  • программировать микроконтроллеры;
  • подобрать аппаратное обеспечение.

 

Кому необходимо участвовать? Владельцам среднего и малого бизнеса, директорам по развитию, IT–директорам, программистам.

Семинар “Распознавание лиц в Web проектах”

20.11.2017 в 17:00 на базе компьютерной академии «ШАГ», по адресу г. Липецк, Советская, 35 состоится семинар на тему “Распознавание лиц в Web проектах”
На семинаре вы узнаете о таких возможностях, как:

  • Face-трекер: автоматический подсчет посетителей в офисах, магазинах, гостиницах, клиниках, салонах и т. д.;
  • быстрый поиск профиля клиента по фотографии «ВКонтакте»;
  • визит-трекер: фиксация каждой личной встречи в CRM, всех договорённостей, аудиозапись разговора;
  • автоматизированная настройка и запуск персонализированной рекламы для контактов и лидов в Яндекс, Google, Facebook, Instagram и «ВКонтакте».

Кому необходимо участвовать? Владельцам среднего и малого бизнеса, директорам по развитию, IT–директорам, разработчикам Web проетов.

Монтаж систем пневмопочты

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

Решения для медицины

пневмопочта в больнице
пневматическая почта в больнице

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

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

Решения для промышленности

пневмопочта в промышленности
пневматическая почта в промышленности

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

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

Решения для торговли

пневмопочта в торговле
пневматическая почта в торговле

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

МКМ-1904 Autopilot

Мы взялись за еще один интересный проект “Автоматизация рабочего места машиниста коммунальной машины”.

МКМ-1904 Autopilot
МКМ-1904 Autopilot

В нашем городе, Липецким заводом малых коммунальных машин производятся высокоманевренные коммунальные машины “Чистик”. Применяются для круглогодичного содержания дорог и придворовой территории. Руководство завода, стремясь идти в ногу со временем, постоянно ищет новые пути совершенствования, производимой на заводе, техники. Которые, в свою очередь, позволят удерживать завод на лидирующих позициях среди производителей коммунальной техники. Это и заставило руководство ЛЗМКМ обратились к нам с просьбой разработать “систему помощи” машинисту коммунальной машины МКМ-1904.

На данный момент обсуждается следующий функционал “системы помощи”:

  • Система рулевого управления с электроприводом. Блок управления, установленный на коммунальной машине МКМ-1904, анализируя информацию с датчиков, камер и маршрута, должен своевременно подавать сигнал на актуаторы управления педалями и поворотный рычаг ступиц. (Коробкой управлять не придется. Автомобиль на электротяге.)
  • Система предотвращения столкновения с пешеходом. У нас есть огромный опыт в детектировании пешеходов. Разработано большое число алгоритмов детектирования пешеходов в различных условиях. Тут мы впереди планеты всей.
  • Предупреждение о пересечение собственной траектории движения с траекториями движения других участников дорожного движения. Тут поможет алгоритм Лукаса-Канаде.
  • Система экстренного торможения. На скоростях выше 10 км/ч. Если система экстренного торможения обнаруживает, что расстояние до другого участника дорожного движения (транспортного средства, пешехода, велосипедиста, объектом инфраструктуры города) становится критически коротким, то первым делом она должна предупредить машиниста, если человек не предпримет никаких действий, то снизить скорость за счет рекуперации энергии, и при необходимости заблокировать колеса подав сигнал на блок ABS.
  • Интеллектуальное управление фарой с учетом освещенности, скорости движения, направления движения, положения установленного навесного оборудования, наличие транспортных средств движущихся во встречном направлении.
  • Движение по заданному маршруту. Маршрут передается с центрального сервера по беспроводному интернету. Обратно на сервер передается координаты машины Глонасс/GPS. Центральный сервер хранит историю перемещения машины, расхода топлива.
  • Предотвращение сбоев с помощью интеллектуальной диагностики.
    • Мониторинг. Состояние датчиков периодически передается на центральный сервер.
    • Анализ и оценка. На центральном сервер анализируются данные с датчиков машины, сравниваются с данными аналогичных машин.
    • Прогноз. Специальный алгоритм рассчитывает вероятность выхода из строя различных узлов.
    • Уведомления о вероятных поломках или приближающемся ТО рассылаются утвержденному списку лиц (например: водителю, механику, менеджеру завода изготовителя, представителю дилера)
  • Техническая помощь. Интерфейс для мгновенной связи с представителем дилера или заводом изготовителем. Интерфейс позволяет :
    • записать на обучающие курсы на нового машиниста (водителя);
    • записать на обучающие курсы инженера-механика (водителя);
    • запросить квалифицированную консультацию по настройке оборудования;
    • возможны другие услуги дилера и/или завода изготовителя
  • Обновления «системы помощи» должно происходить по беспроводному каналу интернета с центрального сервера.

Оборудования которое планируется использовать при реализации этого проекта:

  • стереокамеры
  • MRR радар
  • датчик угловой скорости колеса
  • датчики положения навесного оборудования
  • шаговые двигатели
  • платформа для разработки Jetson TX1

Детектирование пешеходов с движущегося погрузчика

В прошлом месяце обратился к нам заказчик со следующей проблемой. На территории его складов работает много вилочных погрузчиков и еще больше грузчиков и другого персонала у которых напрочь отсутствует инстинкт самосохранения. Идут, не то что под ноги не смотрят, но даже не видят движущиеся погрузчики. Как минимум раз за смену кто-нибудь обязательно пободается с погрузчиком. Операторы погрузчиков — ребята вроде толковые, но надеется только на их внимание опасно.  Надпись “не стой под стрелой” не всем понятна из-за того что не все умеют читать, тем более еще и по русски. Несчастных случаев пока не было, но дожидаться руководство их не собиралось.

Для решения вышеизложенной проблемы нами было предложено следующее:

  • оборудовать вилочные погрузчики видеокамерами;
  • по видеопотоку контролировать приближение пешеходов к погрузчику;
  • при приближении пешехода к погрузчику ближе чем на 5 метров подавать оператору погрузчика свето-звуковой сигнал опасности.
  • весь персонал прибывающий на складе снабдить жилетами с нанесением идентификационных данных в виде баркода. Это позволит не только информировать оператора погрузчика об опасном сближении с пешеходом но и хранить информацию о нарушителях.

Видеопоток с камер принимает одноплатный компьютер nanopi fire3 с установленной на нем UbuntuCore16.04 with Qt5.9 and OpenGL. Алгоритм распознавания пешеходом в режиме реального времени отслеживает опасное сближение и подает свето-звуковой сигнал оператору погрузчика.

Ниже пример кода отслеживания пешеходов.

#include "opencv2\highgui.hpp"
#include "opencv2\imgproc.hpp"
#include "opencv2\objdetect\objdetect.hpp"
#include "opencv2/video/tracking.hpp"
#include <vector>
#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <time.h>
#include <ctime>

using namespace cv;
using namespace std;

int main(int argc, const char** argv)
{

 VideoCapture cap("input.mov");
 VideoWriter outputVideo;

outputVideo.open("video4.wmv", CV_FOURCC('W', 'M', 'V', '2'), cap.get(CV_CAP_PROP_FPS), Size(640, 480), true);

 CascadeClassifier detectorBody;
 CascadeClassifier detectorUpper;

 string cascadeName1 = "cascadeName.xml";
 string cascadeName2 = "cascadeName.xml";

 bool loaded1 = detectorBody.load(cascadeName1);
 bool loaded3 = detectorUpper.load(cascadeName2);

 for (;;)
 {

  bool Is = cap.grab();
  if (Is == false) {

   cout << "Ошибка захвата видео" << endl;
   break;
  }
  else {
                           
   const clock_t begin_time = clock();

   vector<Rect> human;
   vector<Rect> upperBody;

   Mat img;
   Mat original;

   cap.retrieve(img, CV_CAP_OPENNI_BGR_IMAGE);
   resize(img, img, Size(640, 480));
   img.copyTo(original);
   cvtColor(img, img, CV_BGR2GRAY);

detectorBody.detectMultiScale(img, human, 1.1, 2, 0 | 1, Size(40,70), Size(80, 300));
detectorUpper.detectMultiScale(img, upperBody, 1.1, 2, 0 | 1, Size(40, 70), Size(80, 300));
  
colored image
   if (human.size() > 0) {
    for (int gg = 0; gg < human.size(); gg++) {

    rectangle(original, human[gg].tl(), human[gg].br(), Scalar(0,0,255), 2, 8, 0);

    }
   }

colored image
   if (upperBody.size() > 0) {
    for (int gg = 0; gg < upperBody.size(); gg++) {

         rectangle(original, upperBody[gg].tl(), upperBody[gg].br(),  Scalar(255,0,0), 2, 8, 0);

    }
   }
          clock_t diff = clock() - begin_time;
          char buffer[126];
          sprintf(buffer, "%d",diff);
           putText(original, buffer, Point(100, 20), 1, 2, Scalar(255, 255, 255), 2, 8, 0);
           putText(original, "ms" , Point(150, 20), 1, 2, Scalar(255, 255, 255), 2, 8, 0);
    namedWindow("prew", WINDOW_AUTOSIZE);
    imshow("prew", original);
    outputVideo << original; 
    int key1 = waitKey(20);
  }
 }
}

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

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

Замок с распознаванием лиц на Orange Pi с OpenCV и Python

Требуется взять видео поток с камеры, идентифицировать человека по лицу, открыть замок если этому человеку предоставлен доступ. Видео поток будем брать с вебки, распознавать лицо с помощью OpenCV. Системник на дверь вешать не будем. Orange Pi вполне справиться.

Устанавливаем OpenCV на Orange Pi

Приведенные ниже инструкции, думаю, будут работать на Raspberry Pi, но в ответственный момент его под рукой не оказалось, поэтому все ниже описанное я тестировал на Orange Pi. Что касается программного обеспечения, мы будем использовать OpenCV, который представляет собой компьютерное зрение и компьютерное обучение в режиме реального времени. Это позволит нам захватывать изображения с веб-камеры, манипулировать ими и применять модели распознавания лиц.

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

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

Затем получите OpenCV и дополнительные модули, содержащие библиотеки распознавания лиц:

wget -O opencv-3.3.0.zip https://github.com/opencv/opencv/archive/3.3.0.zip
git clone https://github.com/opencv/opencv_contrib.git
unzip opencv-3.3.0.zip
cd opencv-3.3.0

Создайте каталог сборки:

mkdir build
cd build

Команду для сборки, я брал из руководства для Raspberry Pi, к которой добавил вариант включения дополнительных модулей с функциями распознавания лиц:

cmake -D WITH_FFMPEG=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib/modules/> -D BUILD_NEW_PYTHON_SUPPORT=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON ..

компилируем

make -j4

Этот шаг, на моем устройстве, занял около 1 часа. Если вы получите какую-либо ошибку из дополнительных модулей, просто удалите их. Вам нужен только модуль лица. Далее ставим OpenCV:

sudo make install

Готово. Теперь у вас есть OpenCV в Python на Orange Pi с библиотеками распознавания лиц. Вы можете протестировать его, запустив Python и импортировав cv2.

Захват видео потока с веб-камеры и распознавание лиц

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

Чтобы прочитать поток веб-камеры и сохранить лица, соответствующие человеку, используйте приведенный ниже код. Убедитесь, что у вас есть каскадный файл обнаружения лица XML. Эти каскадные файлы XML обычно лежат в opencv /data/haarcascades/. Скопируйте нужный файл в ту же папку, что и скрипт, или поместите весь put в функцию cv2.CascadeClassifier().

import os
import numpy as np
import cv2
 
# create folder to save pictures of a person
name=raw_input('Enter your name:')
if not os.path.exists('faces'):
    os.mkdir('faces' )
os.mkdir('faces/'+name )
print name+' folder created!'
path='faces/'+name
 
# import face detection cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 
# create capture object
cap = cv2.VideoCapture(0)
 
# take 10 pictures
for i in range(1,11):
    print ('Take picture '+str(i) + ' and press space') 
    while(True):
        # capture frame-by-frame
        ret, img = cap.read()
 
        # convert image to grayscale
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 
        # detect face
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
 
        # for each face draw a rectangle around and copy the face
        for (x,y,w,h) in faces:
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
            roi_color = img[y:y+h, x:x+w]
            roi_gray = gray[y:y+h, x:x+w]
 
        # display the resulting frame
        cv2.imshow('frame',img)   
 
        # when pressing space resize face image and save it
        if cv2.waitKey(1) & 0xFF == ord(' '):
            roi_gray=cv2.resize(roi_gray,(100,100))
            cv2.imwrite(path+'/'+str(i)+'.jpg',roi_gray)
            break
     
# when everything done, release the capture
cap.release()
cv2.destroyAllWindows()

Сохраните код выше в сценарии Python input.py. Подключите веб-камеру к Orange Pi и запустите сценарий. Введите свое имя и посмотрите на камеру, нажимая пробел каждый раз, когда вокруг вашего лица появляется прямоугольник. Вы должны сделать 10 снимков, которые будут сохранены в faces/folder.

Чтобы проверить модель, сохраните код ниже в файл output.py. Код создает список лиц (объектов изображений) и ярлыков, что и требует учебная модель. Это делается путем просмотра папок и файлов в каталоге faces/, созданных предыдущим скриптом. Затем мы обучаем модель.

import cv2
import numpy as np
import os
 
faces = []
labels = []
 
path_data='faces/'
 
names=os.listdir(path_data)
i=-1
 
# read each image in the faces folder
for root, dirs, files in os.walk(path_data):
    i=i+1
    # for the recognizer we need an array of images and corresponding labels
    for name in files:
        faces.append(cv2.imread(root+'/'+name,cv2.IMREAD_GRAYSCALE))
        labels.append(i)
 
# create our LBPH face recognizer 
face_recognizer = cv2.face.LBPHFaceRecognizer_create()
 
# import face detection cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 
# train model
face_recognizer.train(faces, np.array(labels))
 
cap = cv2.VideoCapture(0)
while(True):
    # capture frame-by-frame
    ret, img = cap.read()
 
    # put a rectangle and a label for each recognized face
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_color = img[y:y+h, x:x+w]
        roi_gray = gray[y:y+h, x:x+w]
        label= face_recognizer.predict(roi_gray)
        cv2.putText(img, names[label[0]-1]+' ts:'+str(label[1]), (x, y), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 255, 0), 2)
    # display the resulting frame
    cv2.imshow('frame',img)   
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
     
# when everything done, release the capture
cap.release()
cv2.destroyAllWindows()

Чтобы закрыть поток, нажмите клавишу q

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

Распознавания лиц с использованием каскадных классификаторов Хаара

Теория

Обнаружение объектов с использованием каскадных классификаторов Хаара — эффективный метод обнаружения объектов, работающий в реальном времени. Это подход, основанный на механизме обучения. Каскадная функция обучается из множества положительных и отрицательных изображений.

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

Функции применяются на всех обучающих изображениях. Для каждой функции находится лучший порог, который будет относить лица к положительным и отрицательным. Очевидно, что будут ошибки. Мы выбираем функции с минимальной частотой ошибок, которые лучше всего классифицируют изображения лица. Процесс не так прост, как это кажется. Каждому изображению присваивается одинаковый вес в начале. После каждой классификации увеличивается количество ошибочных изображений. Затем снова выполняется тот же процесс, рассчитываются новые коэффициенты ошибок, а также новые веса. Процесс продолжается до тех пор, пока не будет достигнута требуемая точность или частота ошибок.

Конечный классификатор представляет собой взвешенную сумму слабых классификаторов. Слабым классификатор называется, потому что он сам по себе не может классифицировать изображение, но вместе с другими образует сильный классификатор. 200 функций обеспечивают обнаружение с точностью до 95%. Окончательная настройка имеет около 6000 функций.

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

Каскада Хаара в OpenCV

Обучить классификатор можно не только на распознование лиц но и других объектов, таких как автомобиль, самолет и т.д. Для этого Вы можете использовать OpenCV.

OpenCV уже содержит много предварительно подготовленных классификаторов для лица, глаз, улыбки и т.д. Эти файлы XML хранятся в opencv/data/haarcascades/. Давайте создадим детектор лица и глаза с OpenCV.

Сначала нам нужно загрузить требуемые классификаторы XML. Затем загрузите наше входное изображение (или видео).

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

img = cv2.imread(lico.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Теперь мы находим грани в изображении. Если грани найдены, они возвращают позиции обнаруженных лиц как Rect (x, y, w, h). Так как на лице всегда есть глаза, будем искать глаза. Как только мы получим регионы лиц, мы можем создать ROI для лица и применить обнаружение глаз в этой ROI.

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
   img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
   roi_gray = gray[y:y+h, x:x+w]
   roi_color = img[y:y+h, x:x+w]
   eyes = eye_cascade.detectMultiScale(roi_gray)
   for (ex,ey,ew,eh) in eyes:
       cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Результат выглядит так:

Детектирование пешеходов

Одно дело, когда программа на компьютере с хорошим процом, 8 Гигиами ОЗУ обнаруживают людей в коридоре, где работают разработчики,  другое дело, когда тот же алгоритм должен распознать пешехода, работая на одноплатнике (например nanopi fire3) беря видео поток с камеры закрепленной на лобовом стекле Вашего автомобиля. Причем этому алгоритму нужно детектировать пешехода в реальном времени, чтобы вовремя этого пешехода и избежать избежать столкновения.

Наши исследования показали, что чтобы добиться конечной цели (избежать столкновения) алгоритм исполняемый на железе с малой производительностью должен не только детектировать пешехода но и анализировать траекторию его движения. Это позволяет избежать столкновения “предвидя его”. А использование патернов поведения позволяет обнаружить пешеходов намного быстрее и точнее других алгоритмов. Также наш алгоритм, совершать вдвое меньше ошибок, чем существующие системы. Что, в свою очередь, приводит к изящной остановкой, а не к внезапным страшным торможениям.

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