Jump to content
Compvision.ru

2expres

Пользователи
  • Content count

    83
  • Joined

  • Last visited

  • Days Won

    3

2expres last won the day on December 12 2017

2expres had the most liked content!

Community Reputation

6 Новичек

About 2expres

  • Rank
    Эксперт
  • Birthday 06/19/1983

Contact Methods

  • Website URL
    http://esm.ho.ua

Profile Information

  • Пол
    Мужской
  • Расположение
    Днепр Украина
  • Интересы
    Ищу интересную работу в области компьютерного зрения удаленно или постоянную. Бинаризация, сегментация изображений, контурный анализ в RealTime.

Recent Profile Visitors

591 profile views
  1. Основная проблема у Вас - неравномерное освещение. Вам нужно использовать бестеневую лампу, чтобы на изображении не было бликов. Далее нужно бинаризировать изображение с помощью адаптивного порога (я использовал 17х17 -8). После удаления мелких сегментов можно по вертикальным линиям определить масштаб (сколько пикселей в одном мм) изображения. Зная масштаб можно определить размеры измеряемой детали. Результат после бинаризации.:
  2. Nuzhny спасибо!!! Для получения motion vectors нужно использовать av_frame_get_side_data. Работает ли фильтр, если кадры декодированы аппаратно с dxva2? Я подключил dxva2 для декодирования h.264 (Загрузка процессора близка к 0). Но копирование из памяти dxva2 в память процессора av_hwframe_transfer_data занимает много процессорного времени (до 70% INTEL ATOM Z8350 на Full HD). Занимает ли этот фильтр много времени? Для меня основной смысл в применения motion vectors - это высокое быстродействие детектора движения. Я хочу применить его для обнаружения движущегося автомобиля в кадре. P.S. Можно из dxva2 переписывать не весь кадр, а часть кадра?
  3. Для создания потока h.264 внутри камеры работает кодер на основе детектора движения, который отлавливает изменения между кадрами. Декодер восстанавливает кадры. Как можно получить информацию с декодера об изменениях в кадре?
  4. Мне для аппаратного декодирования нужен qsv (Intel Quick Sync Video). Но на сайте ffmpeg читаю: Ensure the target machine has a supported CPU. Current versions only support gen8/gen9 graphics on expensive CPUs ("Xeon"/"Core i" branding). The same graphics cores on cheaper CPUs ("Pentium"/"Celeron"/"Atom" branding) are explicitly disabled, presumably for commercial reasons. Т.е. для Pentium и процессоров ниже отключена аппаратная поддержка по коммерческим причинам. cv::CAP_MSMF - не работает с rtsp потоком (Хотя Microsoft Media Foundation вроде ж должна поддерживать). Что применить???
  5. У меня процессор Intel Pentium n3710 с графическим ядром INTEL HD GRAPHICS. Если верить данной таблице https://www.wikizero.com/en/Intel_Graphics_Technology, то данное графическое ядро позволяет декодировать 2k 30 кадров в секунду. Открываю файл 1080p, кодек h264 с принудительно заданным backend ffmpeg: cv::VideoCapture cam( "2.mp4", cv::CAP_FFMPEG); Загрузка процессора от 25 до 60%. Открываю данный файл, используя Microsoft Media Foundation: cv::VideoCapture cam( "2.mp4", cv::CAP_MSMF); Загрузка процессора от 10 до 25%. Почему так происходит?! Насколько я читал ffmpeg использует аппаратное декодирование.
  6. Я понимаю, что сейчас в моде применение нейронных сетей и обучение. Но любой метод имеет свои плюсы и недостатки. Так же и мой подход (сегментация+контурный анализ) имеет свои плюсы и минусы. Мне требуются качественные кадры не хуже чем в папке Короля. Но я на этой папке тестировал https://www.openalpr.com/cloud-api.html Это современная программа на нейронных сетях. Очень классно определяет едва видимые номера (высота символов до 6 пикселей). Но на папке Короля, она хватило сил проверить только по букве А (~634 фото) она правильно определила 87%. Со средним временем определения 600 мс на их сервере. Создалось впечатление, что она может видеть едва различимые номера и пропустить явный номер. Применение своего метода вижу в 3-х вариантах: 1) Дополнение к "серьезной" программе для улучшения показателей. 2) Распознавание номера внутри камеры (Смарт-камера), например, на Intel Atom Z8350. 3) Недорогое решение для парковок, моек, стоянок с камерой за 50 баксов и сервером за 80 баксов https://ru.aliexpress.com/item/Z83II-Mini-PC-Windows-10-Intel-Atom-X5-Z8350-Quad-Core-2-4G-5-8G-WiFi/32843080625.html?spm=a2g0v.search0302.3.10.3dc52b62XmAJcN&ws_ab_test=searchweb0_0,searchweb201602_0_10084_10083_10887_10307_321_453_322_454_10902_10618_536_10065_317_537_10068_319_10059_10103_10884_10696,searchweb201603_0,ppcSwitch_0&algo_pvid=fb3d334a-aa48-40f5-a05c-df0e49103814&algo_expid=fb3d334a-aa48-40f5-a05c-df0e49103814-1
  7. Решил применить векторный контурный анализ на практике. Распознавание текста для меня пока сложно, т.к. в реальном тексте символы сливаются друг с другом, и мне тогда все равно какой текст распознавать-печатный или рукописный. Распознавание авто номеров для меня более простая задача, потому что: 1. Не ищу пластину авто номера. 2. Не вырезаю пластину из изображения. 3. Не выравниваю табличку вместе с символами, если она под углом. 4. Не вырезаю каждый символ. 5. Не масштабирую символы в растре. 6. Не применяю OpenCV и нейронные сети, только свои алгоритмы исключительно на ассемблере. Мои алгоритмы: 1. Бинаризация изображения. Применяю адаптивный порог. 2. 4-х связная сегментация изображения. 3. Векторизация изображения. 4. Апроксимация векторов. 5. Векторный контурный анализ и сравнение сегментов с базой данных. Выше перечисленные алгоритмы универсальны и мне остается написать небольшую программку, находящую последовательность символов определенных размеров. Используется только таблица сегментов, поэтому это не занимает время. Основное время уходит на бинаризацию, сегментацию, векторизацию изображения. Хорошей бинаризации я не получил, за один раз получаю 3 размывки окнами 9x9,17x9 и 17x17, затем бинаризирую 7 раз с разными порогами и окнами размывки, и 7 раз выше перечисленные алгоритмы, пока не определяю номер. Определение номеров можно посмотреть в моем фото редакторе lubok.exe (150 кб вместе с базами данных). Ограничения: процессор с поддержкой SSE2, lubok.exe только в отдельной папке с базами данных, путь папки с lubok.exe не должен содержать кириллицы - руки не дошли исправить, для изображений таких ограничений нет. Переключая Вперед Назад переходим к следующему фото. Как сегментировался символ можно посмотреть, нажав- Сегментация - Выбор сегмента. Для бинаризации выбрать: Эффекты - Гравюра. Работает Помощь. Для получения статистики можно запустить определение номеров в папке. Если в папке очень много фото, процесс займет продолжительное время (1,5 минуты на 1000 изображений 600х800, пока не организовал многопоточный режим, все выполняется одним ядром). Для отладки программы очень помогла подборка фото, предоставленная Авто номера совпадают с названием файла, поэтому легко сделать авто статистику. Процент правильного определения 95,4%, не видит номер 0,15%, один "глюк" на 5472 фото. Буду рад замечаниям и конструктивной критике, т.к. работа еще не завершена, хочу получить 98% на этой папке. Так же у кого есть свои подборки фото с автомобилями прошу поделиться. Папка с фото автомобилей. Новая версия программы Лубок с функцией определения российских автономеров.
  8. Распознавание номеров. Практическое пособие. Часть 1 Статья на хабре. Нейросети GPU 500 мс, а CPU 5 сек. Определяет 80% номеров.
  9. Закончил программу контурного анализа. Перепробовал множество вариантов. Применял дескрипторы Фурье - получил не очень хороший результат. Оказалось, что примитивные методы работают значительно лучше. Результат меня порадовал. Удалось получить быстрое распознавание любых замкнутых контуров. В качестве базы данных загружаются изображения в виде силуэта эталонных символов. Программа создает базу данных. Один силуэт это 512 байт в базе данных. Силуэты могут быть любые шрифты (Если буква "В", то без двух белых отверстий), предметы, дорожные знаки, силуэты самолетов и т.д. Тренировался на шрифте. Распознает любой шрифт повернутый до углов 45 градусов при условии совпадения начальных точек. Проблему начальной точки решил за счет того что в базу данных загружаю 2 символа один повернут влево на 20, другой вправо на 20 градусов. Теоретически возможно распознавание под любым углом, но при этом будет увеличиваться время обработки. Пример базы цифр ниже: Есть определенные проблемы. Я проверяю на похожесть, а не на абсолютное сравнение. Поэтому если я проверяю, какая это цифра, а на проверяемом изображении "каракатица", то программа все равно показывает какую нибудь цифру. Я не знаю, как решить данную проблему. Но зато распознает символы повернутые ,искаженные, с большой изометрией и немного смещенной начальной точкой.
  10. Для меня распознавание номеров представляет чисто академический интерес для проверки своих алгоритмов. Я применяю свой механизм: 1) сегментация 2) векторизация 3) логический и контурный анализ полученных сегментов в векторном виде.для любого распознавания (без применения нейронных сетей). Я просто хочу сравнить подходы, быстродействие. Это в одном потоке или у вас производится распараллеливание на несколько ядер?
  11. Добрый день! Заинтересовался темой распознавания автомобильных номеров. Пользовался вашей программой показывает на мой взгляд хорошие результаты. Чем отличается ваша бесплатная программа от коммерческого продукта? Сколько времени обрабатывается один кадр (какого разрешения и какой процессор) в коммерческом продукте?
  12. Пример использования выделения краев (Соболя): Осталось найти вертикальные и горизонтальные линии, которых не так уж и много. Могу выполнить данную задачу под ключ.
  13. Альтернативное предложение не использовать нейронные сети. Выполнить на фотографии поиск прямых линий. Прямая линия не должна превышать некую длину N, равную длине полки уголка. Ищем пересекаются эти линии или они могут пересекаться не превышая длинны N. Производить дополнительную проверку найденных объектов. Для того чтобы найти на этом изображении линии нужна хорошая сегментация изображения, выделение краев.
  14. Думаю, в вашем случае, только платный продукт. Вот, например, http://www.mallenom.ru/demo/avtomarshal/
  15. Дескрипторы можно сравнивать 2 способами: 1) находим погрешность каждого из дескрипторов, погрешности складываем и сравниваем с порогом. Возможно погрешности возводим в квадрат и суммируем. 2) сравниваем с порогом каждую погрешность и если один из дескрипторов превышает порог, то сравнения нет. Какой из двух способов верный?
×