Вернуться к разделу "Создание книг в электронном виде из бумажных книг".


Проект BookScanLib

Создание библиотеки алгоритмов для обработки сканов бумажных книг

(Раздел будет постоянно дорабатываться)


Обратите внимание: Общий ход реализации проекта и его конкретные этапы будут освещаться на странице:

Реализация проекта BookScanLib

Это - самая важная страница проекта. Там будет выкладываться вся текущая информация.


Введение

Обработка сканов страниц бумажных книг - один из этапов создания электронной DjVu-книги. В настоящее время для этого применяется главным образом программа СканКромсатор (см. Пособие по Кромсатору). Другие программы - RasterID, BookRestorer - не обладают в полной мере нужной функциональностью.

Программа СканКромсатор, обладая массой достоинств, имеет, тем не менее, ряд недостатков (см. статью О возможности альтернативы СканКромсатору). Эти недостатки и привели к появлению данного проекта.

Цели и задачи проекта

Для того, чтобы радикально упростить процедуру обработки сканов книг (сейчас это самое узкое место во всей технологии создания эл. книг), необходимо появление более совершенной и удобной программы пакетной сканобработки. Скорее всего, коммерческая программа такого плана не появится никогда. Поэтому возникла идея - сделать такую программу своими силами.

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

Как показывает даже краткий поиск, в Интернете есть достаточно немало исходников нужных алгоритмов, статей, электронных книг и прочих материалов по теме. Также в Интернете есть отдельные люди, разрабатывающие и занимающиеся всем этим. Поэтому многое сведётся в значительной степени просто к переработке разрозненных материалов и объединению разработчиков - что делает цель проекта ещё более реальной и достижимой.

Данный проект задуман как коллективный и со свободным участием. Принять участие в нём смогут все желающие. Для участия в проекте необходимо иметь (помимо простого желания) минимальные навыки программирования. Конечным продуктом проекта должен стать набор специфических алгоритмов, реализованных программно на единой платформе.

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

Соглашения проекта

Для успешной реализации проекта предлагаются следующие соглашения:

1. Открытость исходного кода - все программные реализации алгоритмов (программы), созданные участниками проекта, должны предоставляться всем желающим в том числе и в виде исходных кодов. Желательно использование лицензии GPL (или аналогичной).

2. Единая платформа - для того, чтобы все участники проекта могли напрямую пользоваться результатами работы друг друга, предлагается с самого начала выбрать единую программную платформу, на базе которой и создавать свои реализации алгоритмов. Конкретно предлагается платформа с такими параметрами:

- ОС Windows (как наиболее распространённая на постсоветском пространстве и удобная).
- Свободно-бесплатная графическая библиотека FreeImage (наиболее распространена, хорошо отлажена, регулярно поддерживается/обновляется, проста в применении).
- Язык программирования С/С++ (широко распространён, удобен, и т.д.)
- Компилятор MS Visual C++ v6.0 (широко распространён, удобен и понятен программистам-любителям)
- Вопрос о применении библиотеки STL пока остаётся открытым.

Важный момент: Данная единая платформа изначально принимается как обязательная. Проект с благодарностью примет любые присланные исходники алгоритмов, но они будут при этом переработаны с целью приведения их к единой платформе (если это получится чисто технически).

3. Простота реализации - поскольку цель состоит в том, чтобы сделать программные реализации алгоритмов, а не готовые программы, то предлагается реализовывать алгоритмы в наиболее простом и понятном (для будущих пользователей алгоритма) виде - консольные Win32-приложения на базе FreeImage. Также приветствуется хороший стиль программирования (такой, чтобы в Вашем коде могли разобраться другие), документированность исходного кода.

4. Любительский характер - проект рассчитан на программистов-любителей, а не на профессионалов. К любителям относятся люди с простыми навыками программирования, студенты-программисты, программисты, работающие не по специальности и т.д. - все те, кто умеет программировать, но зарабатывает на жизнь не программированием.

Именно любительский характер проекта и обуславливает конкретный выбор единой платформы (см. п.2) - как наиболее простой, понятной, и доступной для любителей (профессионалам этот выбор, скорее всего, не понравится - но это любительский проект).

Проект принципиально не может одновременно удовлетворить интересы как любителей, так и профессионалов. Профессионалам предлагается создать параллельный проект, или же адаптироваться под любителей.

Любительский характер проекта предполагает свободные требования к участникам. Желающие могут присылать любые материалы по теме - ссылки, алгоритмы, и т.п. Только не присылайте коммерческие продукты (программы, SDK, ссылки на всё это), а также не присылайте большие файлы без предварительного согласования (Интернет-трафик проекта не безграничен).

Задача проекта в идеале - привлечь всех, кто интересуется данной тематикой. Для этого проект будет постоянно стремиться быть как можно проще, пытаться сводить сложное к простому, и т.п.

Организационная структура проекта

Успешность проекта будет зависеть практически только от правильности его организации. В этом плане предлагаются следующие подходы:

- Разработка проекта будет происходить на каком-либо форуме.
- Участвовать смогут все желающие и в любой степени - хотя бы даже и в минимально-эпизодической форме.
- Все разработчики будут постоянно чувствовать, что они не одиноки в своей деятельности - решение проблемы, из-за которой распались все предыдущие попытки подобных проектов.

Для удобства предлагается следующее логическое структурирование участников проекта:

1. Группа А - "Консультанты". Это те, кто осуществляет информационную поддержку проекта - разрабатывает общие концепции, делает обзоры литературы, читает иноязычные статьи, держит в голове цельную картину текущего состояния общей проблематики, и, творчески перерабатывая все эти материалы, излагает их доступным языком в собственных статьях, адресованных ко всем прочим участникам. Консультантом может быть любой человек с минимальными навыками программирования.

2. Группа Б - "Разработчики". Это те, кто используя продукцию группы А, станет, собственно, создавать программные реализации алгоритмов. Эта группа участников станет ядром проекта и по возможности им будут оказаны наибольшие забота/внимание. Разработчики смогут заказывать консультатам обзорные работы, не тратя на это своё время. Продукцией разработчиков станут алгоритмы в виде консольных Win32-программ с открытыми кодами. Конкретно разработчики будут заниматься следующим:

- Брать уже существующие программные реализации алгоритмов и "перебивать" их под единую платформу (см. выше) проекта.
- Разрабатывать свои реализации алгоритмов на базе статей с описаниями алгоритмов.
- Разрабатывать свои реализации алгоритмов с нуля.

Разработчикам потребуются лишь самые минимальные технические навыки программирования - знание языка С/С++ (а значит, и умение писать на нём консольные программы). Разработчикам будут нужны в основном знания по высшей математике и физике.

3. Группа В - "Программисты". Это будущая группа, которая возникнет после завершения первоначального этапа развития данного проекта (ориентировочно через 2-3 года), когда библиотека алгоритмов будет составлена в черновом виде. Программисты будут брать продукцию группы Б и делать на её базе программы для конечного пользователя.
При этом цели и задачи группы Б будут во многом "безразличны" участникам группы В (и наоборот) - что позволит достичь серьёзной экономии сил участников проекта - за счёт разделения труда. Программисты должны будут обладать лишь техническими навыками программирования - им можно будет и не знать сути алгоритмов.

Разумеется, подобное разделение участников условно и служит лишь для понимания сути и работы проекта.

Читайте также статью:  Гуманитарные задачи проекта BookScanLib.


Крупные проекты по теме:

1. Leptonica - This site contains well-tested C code for some basic image processing operations, along with a description of the functions and some design methods. A full set of affine transformations (translation, shear, rotation, scaling) on images of all depths is included, with the exception that some of the scaling methods do not work at all depths. There are also implementations of binary morphology, grayscale morphology, convolution and rank order filters, and applications such as jbig2 image processing and color quantization.

Это основной и наиболее известный проект по данной тематике. Содержит много необходимых алгоритмов. Однако, это - учебный проект, и было мнение, что эффективность этих алгоритмов невысокая. Вопрос будет изучаться.

 

2. Проект Санкт-Петербургского Государственного Университета:

Проект по разработке OCR-программы с открытыми исходниками. В зачаточном состоянии.

OCR Проект "Открытый код"  (описание проекта)

Character Recognition Online - Алгоритмы и методы распознавания текста  (реализация проекта)

 

3. Проект IUPR Research Group:

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

Layout Analysis  (Демо 1)

Document Dewarping  (Демо 2)

Статьи IUPR  (Статьи с описаниями алгоритмов)

 

4. CuneiForm:

Российская OCR-программа с открытыми исходными кодами

 

5. OCRopus:

OCR-программа от Google с открытыми исходными кодами


Небольшие любительские проекты по обработке сканов книг:

1. unpaper 0.2 - Немецкий проект. Самый серьёзный из всех аналогичных. Работает под Linux и на базе формата PBM (используя штатные средства Linux по работе с PBM).

2. durendal TWiki.Deskew - Англоязычный проект. Содержит в основном исследования по алгоритму deskew (очень ценные).

3. Page Layout Detection Tools - Российский проект. Заброшен. Пока там есть только алгоритм deskew. Автор неизвестен и не откликается.

4. POST: Processor of Scanned Text - Российский проект. Заброшен. Нет ни исходников, ни экзешников. Автор известен, но не откликается.

5. Scan Tailor - кроссплатформенная программа для сканобработки


Частные материалы по теме проекта:

В этом подразделе - частные материалы, полученные от разных людей (или присланные ими).

1. Алгоритм deskew (ОС Linux)  (5 КБ)     Источник: snake4d  (2004 год).   Лицензия: GPL.

2. Статья  Measuring document image skew and orientation  (174 КБ)    Источник: Cptn_Cook    Формат - PDF.     Язык - английский.

Авторы:  Dan S. Bloomberg, Gary E. Kopec and Lakshmi Dasari.
Presented at IS&T/SPIE EI’95, Conference 2422: Document Recognition II pp. 302-316, Feb 6-7, 1995, San Jose, CA.

3. Image Clear Border v.0.0 alpha  (233 КБ)     Источник: U235  (12.06.06).   Лицензия: GPL.

Программа читает данные из файла tif, выполняет выравнивание неравномерности освещения, и удаление черных полей. Работает со СЖАТЫМИ серыми изображениями. Написана на Delphi. Внутри архива - исходники, программа и dll-библиотеки из LibTiff. Вещь ещё сырая, но более-менее работает.

4. Image Processing Toolbox (for MathLab)  (382 КБ)     Источник: U235    Copyright 1993-2002 The MathWorks, Inc.

Примеры на языке Матлаба для обработки изображений - похоже это с диска к какой-то неизвестной книге.

5. Скрипты на Матлабе для резки страниц  (5 КБ)     Источник: U235

6. Учебник "Диалоговые окна" (В формате CHM).    Источник - "Диалоговые окна" на www.firststeps.ru.

Скачать  (1,5 МБ)     (Спасибо AlexanderAG за CHM-сборку!).

Полезные ссылки по теме проекта:

(Эти ссылки ещё будут упорядочены).

How to Deskew an Image - хорошая статья с исходниками.

Gimp Despeckle Plug-In - описание плагина для Gimp, с исходниками.

Сode for despeckling images - учебный пример для Gimp, с исходниками.

http://lists.alioth.debian.org/pipermail/sane-devel/2002-April/002822.html - упоминание об ещё одном проекте, содержащем deskew.

http://cvs.pld.org.pl/pocr/ - какие-то материалы, вроде бы по теме - но где там исходники?

The Source Studio v1.020  (451 КБ) - Эта программа конвертирует файлы с программным кодом на языках C, C++, Pascal, Delphi, Assembler, Basic, Java, Perl в формат HTML (то есть мы получаем HTML-представление программного кода). Сохраняет подсветку программного кода (с настраиваемым цветовым оформлением). Может быть использована для документирования открытых проектов. Очень проста в использовании ("нажал кнопку - получил результат") - в отличие от аналогичных продуктов - Doxygen, Doc-o-matic. Недостаток: использует HTML-тег PRE для оформления программного кода (лучше бы DIV использовала хотя бы). Официальный сайт программы давно умер.

C and C++ Language and Run-Time Reference  (1,07 МБ) - Крайне удобный гиперссылочный справочник в формате HLP на английском языке. Помимо прочего, содержит описание функций из стандартной Си-библиотеки (MS-реализация). Незаменим для любителей писать консольные не-WinAPI Си-программы.

ImageEn v2.0.7 for Delphi34567   (11.34 МБ) - Коммерческая Delphi-библиотека для работы с растровой графикой.

ImageLib Corporate Suite 6.0  (9.20 МБ) - Коммерческая Delphi-библиотека для работы с растровой графикой. Используется в СканКромсаторе. Официальный сайт: http://skylinetools.com/imagelib/index.html .

Test BW - (46 КБ) - тестовое изображение отсканированной страницы текста в чёрно-белом формате Tif CCIT Fax G4. Я предлагаю использовать его для оценивания качества отображения разных просмотрщиков графических файлов.

Interpolating Bitmap Resampler for Delphi

http://opencvlibrary.sourceforge.net/ - Это библиотека компьютерного зрения от Intel.

http://www.graphicsgems.org/ - Исходные коды к 5-томнику Graphic Gems.

http://tifftool.sourceforge.net/ - TiffTool

http://alexrey036.narod.ru/ - Сайт U235.


Проекты близкой тематики:

The FreeImage Project - FreeImage is an Open Source library project for developers who would like to support popular graphics image formats like PNG, BMP, JPEG, TIFF and others as needed by today's multimedia applications. FreeImage is easy to use, fast, multithreading safe, compatible with all 32-bit versions of Windows, and cross-platform (works both with Linux and Mac OS X). (Свободно-бесплатная графическая библиотека, считается самой лучшей из всех аналогичных).

SIP - Scilab Image Processing Homepage - SIP stands for Scilab Image Processing toolbox. SIP intends to do imaging tasks such as filtering, blurring, edge detection, thresholding, histogram manipulation, segmentation, mathematical morphology, color image processing, etc. These operations are useful for problem solving in real-world applications ranging from car motion planning to automatic diagnosis of medical images. SIP is meant to be a complete, useful, and FREE digital image processing toolbox for Scilab.

Filters - is a library implementing image filters and image processing functions. Contains many algorithms (filter sobel, convolution, morphology, vectorization, segmentation, blob, blur, anisotropic diffusion, histogram, susan, threshold, texture, contrast, standard deviation, canny, distance map, polygonalisation by douglas-peuker or sklansky-gonzales, contour, edge, adust contrast/brightness, extract part image with a powerfull cutter (grid based or blob based), rotation, median, logPolar, correlation, repositioning, stack, co-occurrence matrix...). Image functions (draw line, drawRect, drawDisk, RGB channel manipulation, ...) (Крайне полезная библиотека на базе FreeImage; лицензия - LGPL).

GOCR - GOCR is an OCR (Optical Character Recognition) program, developed under the GNU Public License. It converts scanned images of text back to text files. Joerg Schulenburg started the program, and now leads a team of developers. GOCR can be used with different front-ends, which makes it very easy to port to different OSes and architectures. It can open many different image formats, and its quality have been improving in a daily basis.

Tesseract OCR - free OCR system.

restoreInpaint - restoreInpaint is a state of the art project about making 8 or 16bit depth images "better".

GIMP is the GNU Image Manipulation Program. It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.

CxImage - Another free C++ image processing and conversion library. (Не рекомендована к использованию, но зато содержит немало готовых алгоритмов.)

efg's Computer Lab and Reference Library - Полезный сайт по работе с графикой. Вроде бы есть исходники там.

AutoTrace - Проект по конвертации растр->вектор. Содержит много полезных ссылок для нашей тематики.


Просмотрщики растровой графики под Windows с открытыми исходниками:

http://en.wikipedia.org/wiki/List_of_open_source_software_packages#Image_viewers

(Open Source image viewers for Windows)

http://imgv.sourceforge.net/

http://gqview-win.sourceforge.net/

http://mtpaint.sourceforge.net/

http://uvviewsoft.com/free_and_pro-ru.htm (Delphi)

http://www.codeproject.com/KB/graphics/cximage.aspx

http://www.codeproject.com/KB/graphics/ImageStone.aspx

http://www.codeproject.com/KB/applications/imageviewer.aspx   (GDI+)

http://www.imgseek.net/

http://sourceforge.net/projects/jpegview

http://mapivi.sourceforge.net/mapivi.shtml

http://wxglade.sourceforge.net/extra/cornice.html     Скачать:  Portable Cornice v0.6.1  (3,84 МБ)


Основные ссылки по теме "Искусственный интеллект":

Для изучения подходов к автоматической сегментации сканов страниц предполагается со временем ознакомиться с методами искусственного интеллекта. Для этого были собраны следующие ссылки:

Ссылки на русскоязычные ресурсы по нейросетевой тематике

Алгоритмы распознавания изображений. Список ссылок.

Распознавание образов и искусственный интеллект

Курсовая работа Смирнова Евгения "Распознавание растровых образов (цифр) персептроном"

Нейронные сети - BaseGroup Labs

XPLAB - A graphical tool for pattern matching using GTK 2.

Избранные лекции по Нейрокомпьютингу. С. А. Шумский.


Материалы по STL

STL - Standart Template Library. Стандартная библиотека шаблонов языка С++. Представляет из себя большой набор структур данных и базовых алгоритмов.

Возможно, в этом проекте будет использована библиотека STL (в силу самой специфики проекта - разработка алгоритмов, работающих со структурами данных). Однако большим минусом библиотеки STL является то, что далеко не все программисты-любители её знают.

Для быстрого освоения библиотеки STL (если Вы, конечно, уже знаете языки С/С++) предлагаются специально подобранные материалы:

1. Методичка "STL по шагам". (В формате CHM).    Источник - www.firststeps.ru.

Скачать  (51 КБ)     (Спасибо xitsa за CHM-сборку!).

Именно с этой методички, пожалуй, следует начинать самое первое знакомство с библиотекой STL.

2. Учебник по STL:

Аннотация, взятая из источника:

stl_book_ammeral.jpg (6645 bytes) Леен Аммерааль. STL для программистов на C++.

...Познакомившись с STL, я был в восторге от её возможностей. Учился я именно по этой книге, и несмотря на то, что она 1999 года выпуска, до сих пор ничего лучше по данной тематике я не нашёл. Обязательно надо прочесть и использовать...

Скачать  (1,68 МБ)    Формат - DjVu.     Язык - Русский.

(Эл. книга была взята отсюда (1,12 МБ) и слегка доработана - вставлено OCR + гиперссылочное оглавление).

Эта книга может быть вторым шагом в изучении STL.

3. Руководство по STL. (В формате CHM).     Авторы - Александр Степанов, Менг Ли.

Перевод на русский язык: Алексей Суханов, Андрей Кутырин. Москва, 1999.

Скачать  (158 КБ)    Зеркало

Это руководство - сжатый конспект по STL, не содержащий примеров кода. Поэтому может быть хорош на третьем этапе изучения STL - как справочник-подсказка для тех, кто уже знаком с STL.


Прочие полезные ссылки (не по теме проекта, но близкие):

Список бесплатного графического софта

Using MATLAB Engine API to control MATLAB

Спецификации формата DjVu

Теория и практика вейвлет-преобразования

Цифровая обработка сигналов

Учебник по HTML (очень хороший и толковый - для самых начинающих). Автор - Дмитрий Колесников.

MS FrontPage 98  (24,5 МБ) (очень удобный HTML-редактор)

MS FrontPage 98 Portable  (21,5 МБ) Автор: NickOnToluca


Автор: monday2000.

19 октября 2006 г.

E-Mail  (monday2000 [at] yandex.ru)

Hosted by uCoz