АЛГОРИТМ АВТОМАТИЧЕСКОГО ПОДСЧЕТА ПАССАЖИРОПОТОКА В ОБЩЕСТВЕННОМ ТРАНСПОРТЕ - Студенческий научный форум

XII Международная студенческая научная конференция Студенческий научный форум - 2020

АЛГОРИТМ АВТОМАТИЧЕСКОГО ПОДСЧЕТА ПАССАЖИРОПОТОКА В ОБЩЕСТВЕННОМ ТРАНСПОРТЕ

Головкин М.В. 1, Бондарь А.С. 1, Боровской А.Е. 1
1БГТУ им. В.Г.Шухова
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

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

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

Для реализации данной системы на языке Python было разработано программное обеспечение, позволяющее подсчитывать количество входящих и выходящих пассажиров [1]. Для работы данной системы в верхней части дверного проема автобуса необходимо установить видеокамеру, направленную вниз. Данные, полученные с этой камеры обрабатываются на стационарном компьютере.

Принцип работы алгоритма подсчета пассажиропотока. Программа для обработки видеозаписи и подсчета пассажиров состоит из двух частей. В первой части видео считываются, изменяется масштаб, так как используемая нейронная сеть работает с разрешением видео 300х300 с целью обеспечения оптимальной производительности. Далее видео подается на обработку нейронной сети [2], которая возвращает список детектированных объектов [3]. Каждый объектов представлен в виде прямоугольной рамки и вероятности нахождения этого объекта внутри этой рамки.

Координаты рамок сохраняются лишь в том случае, если вероятность определения больше, чем 0,2. Данное значение установлено по умолчанию, его можно изменять. Если установить значение слишком большое, то часть детектированных пассажиров будет проигнорирована. А если установить значение слишком маленькое, то возможно ошибочное детектирование случайных областей изображения. Координаты рамок сохраняются с привязкой к конкретному кадру и далее создается файл с форматом ".json".

Вторая часть считывает этот файл с сохраненными данными. На основе этих данных с помощью центроидного метода отслеживания [4] формируются траектории движения пассажиров. Проанализировав эти траектории, можно посчитать количество вошедших и вышедших пассажиров. В алгоритме центроидного отслеживания используется библиотека OpenCV [5]. Центроид- это центр прямоугольной рамки, которая визуализируется по видеопотоку при детектировании пассажиров. Центроиды одного и того же объекта в разных кадрах формируют траекторию движения. Далее траектории визуализируются, сохраняются и происходит процесс их анализа. Суть анализа заключается в считывании вектора, направленного из начальной точки траектории в конечную. Если составляющая координаты X вектора отрицательная, то увеличивается количество вошедших пассажиров, если положительная, то количество вышедших. Если траектория состоит менее чем из двух точек, то она не учитывается в подсчете. На видеозаписи с разрешением 300х300 отображается два счетчика: "input" и "output", то есть вошедшие и вышедшие пассажиры из автобуса, ID- это уникальный идентификатор каждого объекта. Таким образом на выходе получается два значения, по которым можно оценивать загруженность общественного транспорта.

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

Далее происходит процесс чтения первого кадра и вычисляются координаты для правильной обрезки кадра.

В ветвлении if происходит проверка, успешно ли прочитан файл. Далее создается словарь для описания конкретного кадра:

1. frame_dict = {"id": frame_id, "coord": []}

После этого запускается процесс обработки всех детектированных объектов в цикле. Если вероятность больше указанной в аргументе "confidence" (по умолчанию 0.2) и индекс класса соответствует классу "person"(человек), то координаты рамок записываются в созданный ранее словарь:

1. for i in np.arange(0, detections.shape[2]):

2. confidence = detections[0, 0, i, 2]

3. idx = int(detections[0, 0, i, 1])

4. if confidence > args["confidence"] and idx == 15:

5. coord = (detections[0, 0, i, 3:7] * 100).astype("int")

6. frame_dict["coord"].append(coord.tolist())

7. data["data"].append(frame_dict)

В последней строчке записывается в словарь "data" описание текущего кадра. Идет проверка на совпадение количества кадров. Как только номер текущего кадра равен количеству кадров цикл заканчивается и выводится сообщение, что файл обработан.

Далее создается файл с форматом ".json", в который записывается словарь "data".

При запуске второй части программы подключаются все необходимые библиотеки. Создается объект класса "CentroidTracker". Загружаются файлы, созданные первым алгоритмом и преобразуются из формата ".json" в словарь. Создается список для передачи рамок в трекер и в цикле идет процесс обработки. Рамки преобразуются в формат "numpy".

Далее добавляется преобразованная рамка в список "rects" и она визуализируется. Обновляется трекер, который возвращает список объектов. Если номер объекта больше количества траекторий, то в список"trajectory" добавляется новая траектория. В противном случае добавляется к существующей траектории новая точка(centroid).

В новом цикле создаются два счетчика:"output" и "input". После обработки траектории из списка "trajectory" программа получает количество точек траектории.Если траектория состоит менее чем из 2-х точек, то она игнорируется и начинается следующая итерация. В цикле обрабатываются все отрезки траектории, приходят координаты первой точки, второй точки, рисуется отрезок по траектории движения пассажира.

Определяется Х составляющая суммарного вектора траектории:

1. x = (tr[length - 1] - tr[0])[0]

Если X больше нуля, то увеличивается счетчик "output" на единицу, иначе увеличивается счетчик "input" на единицу. Выполняются команды:

1. ifx > 0:

2. output += 1

3. else:

4. input += 1

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

Таблица 1-Анализ подсчета количества людей

 

Автоматический подсчет

Ручной подсчет

Счетчик "input"(вошедшие)

76

76

Счетчик "output"(вышедшие)

76

81

Всего, чел.

152

157

Общая точность подсчета, %

96,82

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

Заключение. Преимущество данной системы подсчета пассажиров перед другими заключается в простоте использования и минимальных затратах на оборудование. Система проводит слежение за каждым пассажиром с момента его входа/выхода до его исчезновения из поля зрения камеры, что выгодно отличает ее от классических систем учета пассажиропотока, фиксирующими только момент пересечения некоторой границы (инфракрасный луч, ступенька на входе), в которых человек может пересечь эту границу несколько раз, например, когда пассажир находится в дверях автобуса. Также данная система помогает отслеживать размеры выручки автотранспортного предприятия. Имея данные по каждому автобусу о количестве пассажиров за какой-либо промежуток времени можно оптимизировать работу подвижного состава маршрутных транспортных средств.

Список литературы.

1.Python: официальный сайт [Электронный ресурс]. – URL: https://www.python.org/ (дата обращения: 01.12.2019).

2.Как работает нейронная сеть: алгоритмы, обучение, функции активации и потери: сайт [Электронный ресурс]. – URL:https://neurohive.io/ru/osnovy-data-science/osnovy-nejronnyh-setej-algoritmy-obuchenie-funkcii-aktivacii-i-poteri/ (дата обращения: 05.12.2019).

3.Рохит Ганди. R-CNN, Fast R-CNN, Faster R-CNN, YOLO - Алгоритмы обнаружения объектов [Электронный ресурс].-URL:https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e (дата обращения:10.12.2019).

4.Adrian Rosebrock. Simple object tracking with OpenCV [Электронный ресурс].- URL: https://www.pyimagesearch.com/2018/07/23/simple-object-tracking-with-opencv/ (date of the application: 12.12.2019).

5.OpenCV: официальный сайт [Электронный ресурс]. – URL: https://opencv.org/releases/ (дата обращения: 15.12.2019).

Просмотров работы: 58