Александр Федотов
Александр Федотов

Программист-исследователь, кандидат технических наук по специальности 05.11.13 "Приборы и методы контроля природной среды, веществ, материалов и изделий"

Интересы: машинное обучение | цифровая обработка и распознавание сигналов, изображений | разработка веб-сервисов на Python | создание программно-аппаратных комплексов | выполнение научно-исследовательских работ

Языки и технологии: Python / Web: Keras / Tensorflow, OpenCV, Flask, HTML, CSS, JS | C#: WinForms, WPF, Unity 3D | Arduino: модули, датчики, работа с АЦП | Неразрушающий контроль: патенты на изобретение 2676386, 2463590, 2490153, 2687177

(C#) Прототип программно-аппаратного комплекса для распознавания состояния трубопровода анализом зондирующих акустических сигналов (патент на изобретение №2676386 с добавлением работы нейронной сети)
(С#) DLL библиотека с демонстрационным приложением для создания, тренировки, валидации моделей нейронных сетей
    Project Project
    Тест распознавания символов и цифр
    Project
    Аппроксимация произвольного сигнала многослойным персептроном
    Создание и обучение сети + быстрый тест на распознавание 5 цифр MNIST
    Создание и обучение сети + тест на распознавание 25 зашумленных синусоидальных сигналов
    Построение и обучение двух сетей: для распознавания цифр и символов + сохранение моделей и загрузка из файлов с валидацией
    Описание
  • Построение нейронных сетей различной структуры на основе ООП-методологии
  • Обучение нейронных сетей с заданной скоростью обучения, итерациями, эпохами, обучающими выборками
  • Пользовательский интерфейс для построения многослойного персептрона с любым количеством слоев и нейронов
  • Функция активации - сигмоида
  • Законы распределения начальных значений весов: нормальный и равномерный
  • Валидация модели с построением в реальном времени графиков ошибок, значений весов, входных и выходных сигналов
  • Сохранение модели в файл на любом этапе обучения, загрузка из файла с просмотром конфигурации сети
  • DLL для применения нейронных сетей в проектах
  • Расчет производительности обучения с индикацией оставшегося времени до завершения
  • Функционал демонстрационного проекта
  • Обучение модели распознавать изображения. Протестирован набор MNIST в png формате. Точность 95.5% для 10 цифр. Тренировка выполнялась за 5 эпох по 50000 картинок, валидация - 5000)
  • Обучение модели распознавать зашумленные синусоидальные сигналы
  • Рисование мышью для обучения нейронной сети распознавать произвольные изображения пользователя
  • Аппроксимация сигналов с помощью нейронной сети
(Python / Flask / OpenCV­ / cuDNN / Linux) Онлайн редактор видеофайлов/изображений/потока с Youtube и IP-камер с задействованием моделей нейронных сетей: YOLO, Mask R-CNN, Caffe, DAIN, EDSR, LapSRN, FSRCNN, ESRGAN
Мануал по компиляции OpenCV в Linux для Nvidia GPU Галерея с результатами обработки
    Главная страница / Распознавание и скачивание объектов YOLO zip-архивом / Отрисовка ASCII символами (видеофайл, Youtube, IP-камера)
    Колоризация черно-белого видео на Youtube / Повышение разрешения с помощью моделей: EDSR, LapSRN, FSRCNN, ESRGAN, PSNR / Шумоподавление
    Mask R-CNN: Распознавание объектов и сегментация / Редактирование фона / Замена фона анимацией / работа с оператором Canny
    Аниме-стилизация / Карандаш / Фильтр Собеля / Кластеризация k-means до двух цветов
    Project
    Веб-страница редактора: повышение разрешения загруженного изображения нейронной сетью ESRGAN с GPU-ускорением на Linux-сервере
    Project
    Веб-страница редактора: стилизация под Аниме
    Project
    Стилизация под Аниме
    Отображение объектов YOLO и их подсчет в классах
    Сегментация изображения с помощью Mask R-CNN
    Повышение частоты кадров в 8 раз с Depth-Aware Video Frame Interpolation
    Колоризация видео 1920 года
    Описание
  • Linux / Python / Flask / OpenCV­ / cuDNN онлайн редактор видеофайлов/изображений/потока с Youtube и IP-камер с предпросмотром кадра на веб-странице в реальном времени для распознавания объектов и их скачивания, сегментации, повышения разрешения, колоризации, стилизации, интерполяции кадров, с задействованием средств OpenCV и моделей нейронных сетей: YOLO, Mask R-CNN, Caffe, DAIN, EDSR, LapSRN, FSRCNN, ESRGAN
  • Интерфейс пользователя состоит из двух страниц: главная и редактор. Главная - для выбора режима, загрузки файла или указания источника видео (Youtube, IP-камера), а также запуска редактора
  • Одновременная работа пользователей на различных устройствах и вкладках браузера реализована предоставлением каждому пользователю уникального порта. При старте редактора для каждого пользователя на сервере запускается отдельный процесс
  • Для работы некоторых режимов потребуется Linux и компиляция OpenCV с GPU-ускорением и библиотекой cuDNN, мануал тут: github.com/alexfcoding/OpenCV­-cuDNN-manual
  • Рендеры, созданные в редакторе можно посмотреть здесь: alexfcoding.github.io/Py­CameraServer
  • Протестированная конфигурация
  • OS: Ubuntu 20.04 LTS
  • GPU: NVIDIA RTX 2060
  • NVIDIA driver: 440
  • OpenCV 4.3
  • CUDA 10.0
  • cuDNN 7.6.4
  • Python 3.8
  • Flask 1.1.2
  • PyTorch 1.4.0
  • Поддерживаемые форматы и источники
  • Файлы изображений: png, jpg, gif
  • Видеофайлы: mp4, avi, m4v, webm, mkv
  • Youtube: URL-ссылка на видео или стрим
  • IP камеры: URL-ссылка на MJPEG-камеру без логина и пароля
  • Режимы обработки
  • С применением нейронных сетей:
    • (GPU/CPU) YOLO: Распознавание объектов в кадре, их подсчет в классах с возможностью скачивания объектов в zip-архив
    • (GPU/CPU) YOLO: Размытие распознанных объектов и стилизация ASCII-символами
    • (GPU/CPU) Mask R-CNN: Распознавание объектов и сегментация, подсчет в классах
    • (GPU/CPU) Mask R-CNN: Преобразование фона за распознанными объектами в черно-белый цвет
    • (GPU/CPU) Mask R-CNN: Гауссово размытие фона за распознанными объектами
    • (GPU/CPU) Mask R-CNN: Замена фона анимацией из видеофайла
    • (GPU) Caffe: Колоризация черно-белого видео нейронной сетью
    • (CPU) EDSR / LapSRN / FSRCNN: повышение разрешения в 4 раза
    • (GPU) ESRGAN / RRDB_PSNR: повышение разрешения в 4 раза с помощью обученных моделей: "FALCOON", "MANGA109", интерполяция "ESRGAN/RRDB_PSNR" с коэффициентами 0.2, 0.4, 0.6, 0.8). Модели можно выбирать на странице и добавлять новые (пока только правками в коде)
    • (GPU) Depth-Aware Video Frame Interpolation: повышение плавности видео созданием новых промежуточных кадров (повышение fps x2, x4, x8)
  • Средствами OpenCV без применения нейронных сетей:
    • (CPU) Повышение резкости в сочетании с шумоподавлением
    • (CPU) Рендер ASCII-символами
    • (CPU) Стилизация под мультфильм
    • (CPU) Стилизация "рисование карандашом"
    • (CPU) Фильтр Собеля
    • (CPU) Двухцветный режим с применением кластеризации k-means
    Главная страница
  • Содержит видео-превью для каждого режима
  • Запуск редактора с выбранным режимом обработки и источником
  • Страница редактора
  • Предпросмотр загруженного видео, файла изображения или источника на веб-странице в реальном времени
  • Обработка кадров с выбранным режимом и настройками, скачивание файла с рендером
  • Создание скриншотов.
  • Перемотка видеофайла или Youtube-видео с помощью слайдера
  • Переключение оригинала/обработанного кадра кнопкой на странице
  • Смена режима обработки и позиций слайдеров настроек без перезагрузки страницы или остановки видео (AJAX)
  • Просмотр свойств источника, прогресса обработки и статистики работы сервера в реальном времени (RAM, CPU, FPS, разрешение кадра)
  • Остановка обработки на сервере по таймеру в случае, если пользователь закрыл вкладку в браузере
(С++ / OpenCV) Обнаружение дефектов зубчатого колеса колесной пары с помощью цифровой видеокамеры и магнитопорошковой индикации
    Project
    Project
    Project
    Описание
  • Решение базируется на основах математической статистики и HSV-преобразовании
  • Режим работы с цифровой видеокамерой для обнаружения дефектов в реальном времени в процессе вращения зубчатого колеса
  • Режим загрузки файлов изображений для анализа и настройки программы
  • График распределения значений информативного признака дефекта по зубьям
  • Просмотр фотографий из интерфейса программы
  • Автоматический вывод номера зуба с обнаруженным дефектом во время сканирования
(Python / OpenCV) Фильтрация похожих изображений применением перцептивного хеширования
    Project
    Генерация хеша
    Project
    Поиск похожих изображений
    Project
    Перемещение похожих изображений в другую папку (правая колонка), оставлены только уникальные (левая)
    Project
    Порог чувствительности 2% (перемещены почти идентичные изображения)
    Project
    Порог чувствительности 33% (175 изображений из 186 были перемещены, остались только уникальные)
    Описание
  • Небольшой скрипт на Python + OpenCV с предпросмотром процесса фильтрации изображений
  • Перемещает все похожие изображения или их дубликаты из выбранной директории
  • Пользователь задает путь к папке с изображениями, папку для перемещения, размер хеша и коэффициент чувствительности (от 0 до 100, где 0 - абсолютная схожесть изображений, только дубликаты будут перемещены)
  • Алгоритм
  • Сжатие изображения до размера NxN пикселей
  • Конвертация пикселей в черно-белый
  • Расчет среднего значения цвета всех пикселей
  • Создание нового изображения (хеш): если значение цвета пикселя превышает среднее, то делаем его белым, в противном случае - черным
  • Сравнение хешей всех изображений используя расстояние Хэмминга
  • Изображения считаются схожими и перемещаются из указанной папки, если разница между количеством одинаковых пикселей не превышает порог чувствительности, заданный пользователем
(Matlab) Моделирование акустического сигнала упругих колебаний, формируемых в трубопроводе точечным воздействием на его поверхность
(С# / Arduino) Биометрическая аутентификация пользователя по клавиатурному почерку с учетом силы нажатия на клавиши, параметров вибрации и движения рук
Проект на сайте aiconstructor.ru
(C#) Отрисовка изображений ASCII-символами и египетскими глифами
    Project
    Project
    Project
    Project
    Project
    Описание
  • Реализация на C# WPF
  • Преобразует выбранные изображения в символьный вид
  • Режим отрисовки египетскими глифами
  • Режим отрисовки ASCII-символами
  • Опции наложения символов на исходное изображение, либо на черный фон
  • Выбор библиотек для рендера: GDI+, System.Windows.Media или Python-скрипт
  • Настройка размера символов и размера сетки с помощью слайдеров
  • Просмотр изображений в галерее до и после обработки
  • Сохранение изображений в файл
(C# / Unity 3D) RTS Sandbox: набор классов для создания аркадных/стратегических игр со строительством, экономикой, добычей ресурсов и противоборством сторон
    Пример разработанной игры с применением бесплатных ассетов моделей и текстур (Игрок / ИИ / ИИ)
    Тест на 600 юнитах (ИИ против ИИ)
    Пять противоборствующих фракций (ИИ против ИИ)
    Описание
  • Реализация на C# в Unity 3D
  • Представляет собой набор скриптов (24 класса) для создания аркадных/стратегических игр со строительством, простой экономикой и добычей ресурсов
  • Вся логика работы и классы написаны с нуля, из сторонних ассетов только бесплатные 3d-модели, текстуры, звуки и некоторые эффекты
  • Два режима работы: с игроком и автономно (ИИ против ИИ)
  • Все объекты могут быть разрушаемыми
  • Мир создается процедурно, без расстановки объектов на карте в редакторе
  • Юниты, ракеты, бомбы, ресурсы и корабль игрока - твердые тела, подчиняющиеся внешним силам (перемещение, взрывы, столкновения)
  • Производительность более 30fps в демонстрационном проекте обеспечивается при размещении до 1200 объектов в кадре на i7 9750h + RTX 2060
  • Логика
  • Принцип "все против всех"
  • На карту помещается произвольное количество баз и ресурсы
  • Объекты каждой фракции имеют свою уникальную подсветку для опознавания
  • Противники воюют между своими базами и игроком
  • Корабли-сборщики находят ресурсы и отвозят на свои базы
  • Объекты ресурсов после сбора кораблем приобретают цвет его фракции
  • На полученные ресурсы противники строят заводы для производства пехоты, кораблей, турелей
  • С заданной вероятностью противники отправляют юниты атаковать корабль игрока
  • Игрок управляет небольшим кораблем, может атаковать противников и их базы
  • Игрок строит здания, юниты, добывает ресурсы и отвозит на базу
  • Игрок групирует юниты и отдает приказы (следовать в любую точку карты, за объектом, либо атаковать)
  • После уничтожения базы возможность строительства у фракции прекращается
  • Любой юнит, включая игрока, может подбирать оружие (пулеметы, ракеты, бомбы)
  • У каждого юнита есть уровень развития, который повышается при уничтожении противника
  • Ресурс - физический объект, который надо подобрать, либо выбить из противника