вторник, 5 марта 2013 г.

Распознавание капчи

Основной смысл "капчи" предложить пользователю такую задачу, которую с лёгкостью может решить человек, но которую несоизмеримо сложнее решить компьютеру(Wikipedia). Для пользователя это лишний ввод в поле, а для программиста интересная задачка.

При написание программы пришлось столкнуться с тем что все входы и заходы для сбора данных с определенного сервиса были сделаны через ввод капчи. Для начала попробовал разобраться с простенькой капчей. Разумеется ни каких явок и паролей не будет указано.

Пример капчи достаточно простой у которой процент распознавания где то около 99.99%.
Несколько тонкостей по поводу самой капчи.

Символы расположены на одном и том же месте, имеют одинаковый размер.









Алгоритм действия

+ переводим изображение в черно-белое.






+ применяем фильтр отсечения по гистограмме (отсечем яркие пиксели)

удачное отсечение
фильтр надо регулировать

+ символы имеют одну и ту же геометрию, то дальнейшие наши действия в создании базовых масок (маска обычный массив с высотой и размером максимального символа (9x13) элементов)









Позиции символов нам известны, маски для сравнения у нас имеются.

+ cравниваем каждый элемент из преобразованого изображения последовательно с масками (отношение колличества совпавших элементов к колличеству элементов в маске и будет та самая характеристика по которой мы оцениваем совпадение).

По поводу данной капчи можно сказать, что она не представляет особой сложности. Но как пример в понимании от чего можно от толкнуться и в какую сторону двигаться. Следующие варианты с которыми пришлось столкнуться: в капче используется несколько наборов; cимволы расположены на разных позициях. Алгоритм распознавания чуть более громоздкий получается.

суббота, 19 января 2013 г.

Sandbox для mac приложений

Все хорошее когда то заканчивается...

При очередном обновлении приложения в MAS, было получено в отказе на публикацию. Требования для полноценных обновлений стали весьма просты, программа должна полностью работать в песочнице. Пройдет только апдейт с исправлением баги. Цели компании Apple полностью весьма прозаичны - контролировать инфраструктуру приложений сторонних разработчиков. Такие вещи как Gatekeeper и Sandbox помогают увеличить безопасность и надежность для конечных пользователей. Особенного накала разработчиков именно от такого введения в MAS нету. Изначально было ограничение на запуск программ в root mode. Поэтому в магазин валом пошли игры и утилиты казуального характера. Опыт в сфере мобильных технологий логично переходит в сторону десктопов.

Более или менее песочница нормально стала работать начиная с 10.7.3+. Появились интерфейсы для  сохранения и доступа к ранее открытым ресурсам (Security-Scoped Bookmarks). Этот механизм актуален для программ на подобии вьюверов файлов или редакторов. Если у вас программа представляет из себя игрушку или клиент в web-service, это не настолько актуально.

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

Работы с безопасными ссылками достаточно проста. Первое что надо понять, только пользователь может инициировать создание такой ссылки через диалог выбора файла, директории или с помощью drag&drop операции. Пользователь выбирает файл-директорию на жестком диске. Мы получаем ссылку на этот файл-директорию и по ней создаем некий объект, который мы в дальнейшем можем использовать без нужды последующего открытия диалогов. Разумеется все entitlements должны быть проставлены в настройках проекта.

com.apple.security.files.bookmarks.app-scope
com.apple.security.files.bookmarks.document-scope
com.apple.security.files.user-selected.read-write.
com.apple.security.files.user-selected.read-only

Немного кода пошарил на гитхабе. Частично то как можно работать с букмарками. сохранять загружать и создавать.

https://github.com/osx84/SandboxBookmark

Самое главное приложение должно быть подписано сертификатом для MAS. Иначе все будет работать криво и большое количество подозрительных падений в неожиданных местах  вам обеспечено.