Хотите стать экспертом в области компьютерного зрения и обнаружения объектов?

Подпишитесь на новый практический курс

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

Как всегда, вот полный код этого проекта

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



Итак, этот алгоритм работает в 4 этапа:
1. Получение краев кадра.
2. Размытие их, чтобы получить более заполненную область.
3. Двоичный порог размывает изображение.
4 • Перекрытие порогового изображения с ROI (вы маскируете, где вы подсчитываете) и подсчитываете черные / белые пиксели, что дает вам пропускную способность.

Вы можете увидеть каждый шаг на изображении ниже:

Края

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

Затем мы используем Canny Edge Detector, чтобы получить края изображения. Инвертируем, чтобы получить белый фон (для удобства наглядности)

Размытие

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

Порог

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

Подсчет

И последний простой шаг просто делит количество черных пикселей на количество белых пикселей, чтобы получить пропускную способность.

Проблемы

Из-за некоторого шума камеры и разных внешних условий точность может быть не такой большой ~ 70–85%.
Но это не большая проблема, потому что мы можем установить минимальные / максимальные пределы или использовать дополнительную фильтрацию в зависимости от условий освещения и, например, количества краев в некоторой тестовой области интереса (например, в каком-то белом прямоугольнике).
А также эти данные в основном используются как дополнительные данные, поэтому нужны только относительные значения.

Зачем нужны эти данные?

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

Почему бы не использовать один большой алгоритм, который сделает всю работу?

Главное, что вы должны помнить, работая над проектами Data Science, - они должны быть не только эффективными в предметной области, но и рентабельными для бизнеса, включая скорость, использование памяти, масштабируемость, затраты времени выполнения одного часа для одной задачи и масштаб. < br /> Нет алгоритмов, которые эффективно работают в любых условиях, например, алгоритмы сортировки, которые используются для локальных проектов, никогда не будут использоваться в проектах с большими данными, потому что они будут медленными, а алгоритмы больших данных не будут использоваться для локальных проектов, потому что также будет медленным (потому что они быстрее только на большом количестве данных).
Поэтому вы должны строить свой конвейер, понимая свои проекты и ограничения бизнеса.

Если у вас есть вопросы / идеи, не стесняйтесь размещать их в комментариях.

PS: Также у меня было несколько писем, в которых меня спрашивали, можно ли критиковать мой код / ​​идеи. Так что да, это нормально, и более того, я прошу вас сделать это, чтобы мы все могли извлечь из этого пользу.

Служба поддержки

Станьте покровителем и поддержите наше сообщество, чтобы оно делало больше интересных статей и руководств

Получайте интересные статьи каждый день - Подпишитесь на Telegram Channel