Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Каждый из нас сталкивается с технологией распознавания лиц ежедневно. Ее применяют в первую очередь в сферах безопасности, медицины, ритейла, образования и в банковском секторе. Такие системы должны обрабатывать внушительный поток данных на круглосуточной основе. Но как проверить, что они справятся с нагрузкой?
Привет, Хабр! Меня зовут Алексей Мищенко, и я работаю старшим инженером-тестировщиком в IBS. Хочу поделиться с вами своим опытом автоматизированного нагрузочного тестирования системы распознавания лиц. В этой статье мы оценим главные рабочие инструменты (FFmpeg и PowerShell), разберемся в деталях процесса запуска видеотрансляции по протоколу RTSP, эмулирующему видеокамеры, а также рассмотрим создание файла конфигурации для ffserver.
Как устроена система распознавания лиц
В основе этой технологии лежат две нейросети, которые умеют считывать и анализировать уникальные черты человеческого лица, а затем сверять их с базой:
нейросеть-«выравниватель» (aligner): она берет исходное изображение (например, картинку, которая поступает с камеры наблюдения), детектирует на ней все лица, которые сможет найти, «вырезает» и «выравнивает» их;
нейросеть-«распознаватель» (recognizer): она принимает на входе выровненное изображение, которое передала первая нейросеть, а на выходе выдает вектор лица, то есть набор чисел фиксированной длины. У разных сетей эти векторы могут отличаться, но чаще всего это некая степень двойки.
В России есть четыре крупных игрока на рынке распознавания лиц: NTechLab, VisionLabs, Sensemaking Lab и группа ЦРТ.
Не секрет, что, несмотря на большое распространение по всему миру, технология распознавания лица пока несовершенна. Нейросети могут допускать ошибки в распознавании, а также демонстрировать дискриминацию и расизм по причине машинного обучения преимущественно на базе белых мужских лиц. Как и любая другая технологическая система, система распознавания лиц подвержена взломам и утечкам данных. Кроме того, использование технологии распознавания лиц поднимает много этических вопросов — от проблемы ее применения без согласия граждан до случаев прямой манипуляции людьми (шантажа информацией о месте пребывания человека или круге его общения).
Тестирование системы распознавания лиц
В зависимости от целей тестирования тестировщики могут моделировать самые разные ситуации. Наиболее распространенные из них — это:
количество активных камер растет плавно, но каждую минуту;
количество активных камер растет резко и непредсказуемо;
количество лиц в кадре увеличивается;
качество картинки с камеры ухудшается.
Наша цель — автоматизация запуска трансляции видео по RTSP-протоколу.
RTSP расшифровывается как Real Time Streaming Protocol (потоковый протокол реального времени), по сути, это протокол управления вещанием, который позволяет выполнять несколько команд, таких как «старт», «стоп» и «переход на определенное время».
Инструменты для автоматизации
Утилита FFmpeg
FFmpeg — мультимедийная платформа с открытым исходным кодом, способная декодировать, кодировать, перекодировать, мультиплексировать (создавать из нескольких отдельных видеопотоков общий агрегированный поток, передаваемый по одному физическому каналу связи), демультиплексировать (разделять суммарный агрегированный поток на несколько составляющих его потоков), транслировать, фильтровать и воспроизводить практически любые видеозаписи.
Инструменты FFmpeg:
ffmpeg: инструмент командной строки для преобразования мультимедийных файлов между форматами;
ffserver: выполняет роль медиасервера — получает видеопоток от ffmpeg, который может быть запущен на другой машине, и раздает его пользователям.
FFmpeg — очень мощная утилита; большинство проигрывателей, видеоредакторов используют под капотом именно ее, поэтому другие варианты в данном проекте я даже не рассматривал.
Инструмент PowerShell
PowerShell — это кроссплатформенное решение для автоматизации задач, которое включает в себя современную оболочку командной строки, скриптовый язык и платформу управления конфигурацией. Решение поддерживается в Windows, Linux и macOS.
PowerShell принимает и возвращает объекты .NET. Это решение позволяет считывать информацию о файлах и объединяет в себе лучшие возможности других популярных оболочек, такие как:
надежный журнал командной строки;
заполнение нажатием клавиши Tab и подстановка команд;
поддержка псевдонимов команд и параметров;
создание конвейера для объединения команд;
система справки в консоли, похожая на страницы man в Unix.
Сразу скажу, что у PowerShell есть много альтернатив. В моем случае выбор именно этого инструмента был обусловлен возможностью считать продолжительность видеофайла, чтобы использовать эту цифру для завершения проигрываемого потока по окончанию видео. Изначально код был написан с помощью *.bat файлов, с вызовом PowerShell; было решено использовать один инструмент, поэтому я переписал код на PowerShell. В целом все это можно было переписать на любой язык программирования (Python, Java, C# и т. д.). Но у заказчика было требование по запуску программы на Windows Server. И это возвращает нас к PowerShell, которая уже встроена в Windows Server.
Автоматизация запуска трансляции видео
Важные моменты, которые стоит учесть при нагрузочном тестировании системы распознавания лиц:
посмотреть расход памяти и нагрузку процессора;
измерить количество обрабатываемых кадров;
проверить, не перегреется ли сервер, если будет большой видеопоток;
проверить время отклика базы данных при постоянном росте количества запросов;
посмотреть, сколько лиц будет пропущено, если в кадре находится большое количество людей.
Как выглядит сам процесс:
PowerShell сканирует указанную папку на наличие видеофайлов, затем генерирует конфигурационный файл (указывается номер порта, на котором будет идти трансляция, качество файла и прочие настройки) для трансляции с помощью ffserver. Второй PowerShell-скрипт считывает длительность видеофайла и автоматически запускает FFmpeg для трансляции файла в RTSP-протокол. Когда проходит считаное время, процесс автоматически завершается,это нужно для того, чтобы у нас не висели бесконечные видеопотоки и не было множества запущенных сервисов, которые забирают оперативную память и создают нагрузку на сервере трансляции.
Все то же самое схематично:
Результаты нагрузочного тестирования
Переходим от теории к практике. Ниже — реальные показатели тестирования, которые я снимал лично для одного из заказчиков. На скриншотах мы видим, что по снимаемым метрикам нагрузка на систему остается в пределах нормы. Каждая цветная линия — это отдельная метрика:
Выводы:
используемые инструменты позволили преобразовать видеофайлы по RTSP-протоколу, эмулировав таким образом видеокамеры;
записанные видеофайлы можно будет повторно использовать для тестирования;
количество видеопотоков можно регулировать с помощью количества видеофайлов в папке;система показала хорошую оптимизацию, поэтому в данном кейсе нам ничего не пришлось изменять;
при этом удалось расширить функциональность системы распознавания лиц за счет появления возможности транслировать старые записи, сохраненные в видеофайле;
рассмотренные инструменты делают нагрузочное тестирование более эффективным и удобным.