Meefik's Blog

Freedom and Open Source

Обучение модели для детекции точек лица в OpenCV

19 Sep 2018 | opencv

Относительно недавно в OpenCV появился API для обнаружения антропометрических точек лица. По использованию Facemark API есть неплохая статья на Learn OpenCV. Хорошая реализация поиска таких точек есть в библиотеке dlib, однако иногда хочется ограничиться одной библиотекой, особенно если речь идет о портировании кода на мобильные устройства или браузер (кстати, OpenCV поддерживает компиляцию в WebAssembly). К сожалению, в алгоритмах поиска точек лица используются модели достаточно большого размера (68 точек ~ 54 МБ), а размер загружаемого кода на клиент может быть ограничен. В библиотеке dlib есть предобученная модель на 5 точек (5.44 MB), однако для OpenCV такой модели нет, причем нет даже поддержки такой модели, на данный момент поддерживаются модели на 68 и 29 точек. Модель на 5 точек может использоваться для нормализации лиц на клиенте. Ниже я опишу процесс обучения собственной модели небольшого размера на 5 точек.

Детекция лиц с инвариантностью к повороту

27 Aug 2018 | javascript

Не так давно наткнулся на публикацию Object Detection with Pixel Intensity Comparisons Organized in Decision Trees, авторы которой предлагают модификацию метода детекции лиц Виолы-Джонса. Основное отличие метода состоит в том, что вместо признаков Хаара используются простые пиксельные тесты без необходимости рассчитывать интегральное изображение. Это позволяет повысить скорость вычислений и сэкономить память.

Авторы статьи приводят пример реализации данного алгоритма на C с предобученным классификатором для детекции лиц. Недавно появилась реализация алгоритма PICO на JS, однако в ней нет реализации инвариантности к повороту изображения (или наклона головы влево/вправо). Эту недоработку я и решил исправить.

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

В доработку вошло:

Генерация и распознавание DTMF на JavaScript

26 Apr 2018 | javascript

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

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

  1209 Гц 1336 Гц 1477 Гц 1633 Гц
697 Гц 1 2 3 A
770 Гц 4 5 6 B
852 Гц 7 8 9 C
941 Гц * 0 # D

Есть множество примеров реализации DTMF, один из наиболее известных алгоритмов детекции DTMF является алгоритм Герцеля. Есть даже его реализация на JavaScript.

Распознавание кода происходит по частотной характеристики, а по временной характеристике можно реализовать фильтрацию от шумов.

OpenWRT с OpenVPN на роутере TL-WR841N

21 Apr 2018 | openwrt

Проблема роутера TL-WR841N (v9 в моем случае) в том, что там всего 4 МБ flash-памяти и после прошивки OpenWRT остается всего около 300 КБ для личного пользования, чего не хватает для установки OpenVPN. Решение этой проблемы есть в посте OpenWrt + VPNclient для роутера с 4mb ROM, но прошло несколько лет и скрипты требуют изменений.

Выравнивание изображений лиц на JavaScript

01 Oct 2017 | javascript

В задачах автоматической обработки изображений лиц часто встает вопрос о нахождении и нормализации (выравнивании) изображения лица на фотографии или в видеопотоке. Выравнивание обычно включает в себя поворот, масштабирование и обрезку интересующей части фотографии. В сети можно найти примеры для реализации данной функции на Python или C/C++ с помощью библиотеки компьютерного зрения OpenCV. Здесь я приведу два примера реализации данной функции на JavaScript для NodeJS и для запуска в браузере на чистом JS.

Видеоролик Linux Deploy 2.0

25 Feb 2017 | linuxdeploy

Демонстрационный ролик установки и запуска Debian на Android телефоне с помощью Linux Deploy.

Релиз Linux Deploy 2.0

14 Oct 2016 | android linuxdeploy

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

linuxdeploy

Окружение рабочего стола в Linux Deploy

14 Sep 2016 | linuxdeploy

Linux Deploy поддерживает автоматическую установку и настройку нескольких наиболее распространенных окружений рабочего стола. В версии LD 2.0 оставлена поддержка окружений XTerm (терминал на весь экран), LXDE, Xfce и MATE. Эти окружения есть почти во всех поддерживаемых LD дистрибутивах, они не сильно требовательны к ресурсам и могут работать без графического ускорения. Однако запустить другие окружения рабочего стола можно вручную. Для этого нужно в настройках LD выбрать окружение рабочего стола “Другое” и выполнить команду “Конфигурировать”. После этого нужно подключиться к контейнеру, установить пакеты нужного окружения рабочего стола, и под пользователем (по умолчанию - android) отредактировать файл ~/.xsession, прописав команду запуска рабочего окружения.

Реализация WebSocket-сервера на bash

04 Aug 2016 | bash

Websocket.sh - кроссплатформенная реализация WebSocket сервера на bash. Для работы требуется только busybox, вместо bash можно использовать ash. Может использоваться во встраиваемых системах.

websocket.sh

Применение Linux Deploy CLI на десктопах

26 Jan 2016 | linuxdeploy

Несмотря на то, что изначально Linux Deploy (сокращенно LD) задумывался как приложение для Android, со временем появляются и другие варианты его применения. С появлением Linux Deploy CLI стал доступен ряд новых возможностей, открывающие новые сферы применения этого инструмента.

Linux Deploy CLI - это приложение с интерфейсом для командной строки, предназначенное для автоматизации процесса установки, конфигурирования и запуска GNU/Linux дистрибутивов внутри контейнера chroot. Приложение может работать как в обычных десктопных Linux-дистрибутивах, так и на мобильных платформах, основанных на ядре Linux, при условии соблюдения необходимых зависимостей (все зависимости могут быть собраны статически). Приложения из Linux-дистрибутива запускаются в chroot окружении, работают параллельно с основной системой и сопоставимы с ней по скорости. Поскольку работа Linux Deploy базируется на системном вызове ядра Linux, то в роли “гостевых” систем могут выступать только дистрибутивы Linux.