Здравствуйте. Начал свой проект программы обработки сканов - http://code.google.com/p/artscan/ . Хочу выслушать мнения/замечания/пожелания знающих людей. Пишу на Scala (статический объектно-функциональный язык, работает на JVM). Выбрал его из-за кросс-платформенности, краткости (за счет вывода типов и функциональщины объем текста практически такой же как на Питоне/Руби), по скорости не сильно проигрывает С++, доступности всех средств JRE - богатые возможности по работе с графикой, наличие граф.библиотек, скриптование на Bsh/JS/Python/Groovy/Ruby. Вот скрин гравного окна : http://img233.imageshack.us/img233/737/screenshot1h.png . Справа - панель плагинов. Сверху вниз : дерево доступных плагинов, параметры выбранного плагина, редактор скрипта, консоль вывода скрипта. Плагин пишется в самой Scala (там где нужна быстая обработка), или на одном из скриптовых языков. В тексте в комментарии описываются параметры, которые нужно задать перед запуском плагина (скорее всего в XML). Когда пользователь выбирает плагин из списка, список этих параметров отображается в удобном для редактирования виде под списком плагинов (что-то типа property editor). То есть для непродвинутых пользователей это не сложно. Продвинутые пользователи могут создавать свои плагины - в редакторе набирается текст, можно сразу запустить и увидеть результат. Из скриптов доступны любые операции над документами и страницами - от простых манипуляций над страницами (удаление, вставка и т.д.) до работы с зонами и изображениями. Для обработки изображений доступны средства самой AWT/Swing и библиотеки ImageMagick / ImageJ ( http://rsbweb.nih.gov/ij/ , http://rsbweb.nih.gov/ij/plugins/index.html ). Далее планирую подключить свободные OCR библиотеки Tesseract/OCRopus и др. С помощью скриптов-плагинов и готовых библиотек можно очень быстро нарастить библиотеку граф.фильтров. Реализация алгоритмов обработки сканов - более сложная, но вполне подъемная задача. В документе реализую работу с зонами/слоями. Как - пока вопрос открытый. Скорее всего каждому объекту (документу, странице, слою, зоне) можно будет присвоить текстовые теги/проперти - так можно быстро фильтровать/назначать объекты для обработки. |