
!!!NOTE: readme_eng.txt IS MORE UP-TO-DATE

Что позволяет на текущий момент:
автоматически создавать тайминг к видео и некоторые выше описанные фишки :).

Как использовать без глубокого разбора возможностей:
1) File->Open Video (любой вариант)
1) нажать "Run Search" на первой панели (если вам нужно получить только тайминг и оригинальные изображения с возможными субтитрами то после этого идём на последнею панель и нажимаем "Create Empty Sub")
2) нажать "Create Cleared TXT Images" на последней панели (для отделения текста от изображения если вы планируете в дальнейшем их распознавать в других программах с поддержкой OCR)

Как использовать в деталях:
1) Запускаете VideoSubFinder.exe

2) В меню выбираете File->Open Video, выбирете тот видео файл в котором
   необходимо найти сабы (avi, mpeg, mpg, asf, asx, wmv, ...),
   в Video Box появится изображение текущего видео.

3) Можно сразу нажать Run (поумолчанию на данный момент вы должны находиться в
   закладке Search), в Video Box будет отображаться только текущее время
   обрабатываемого кадра (с частотой 1 раз в секунду), если на данный момент
   будет обнаружен хоть один саб, то его изображение будет отображено в Image 
   Box, результаты поиска скидываются в папки RGBImages (исходные скрины из
   видео) и ISAImages (Intersected Subtitles Areas (by multiframe usage)), позаботьтесь о том, чтобы
   у вас было хотя бы 100 mb свободного места на диске.

4) Можно установить время начала и конца поиска сабов, для этого используйте
   ключевые клавиши ctrl+z и ctrl+x (или через меню Edit->...),
   используйте ползунок в Video Box для перемещения по video :),
   для пофреймового перемещения по видео (используйте стрелки <-, ->, Up, Down
   или колёсико мыши).

5) Можно снизить область детектирования перемещая вертикальные и горизонтальные
   разделительные линии в VideoBox с помощью мышки.

5) Можно проверить частично текущие настройки:
   перейдите на закладку Settings, переместитесь на любой кадр видео (где есть
   или отсутствует текст), нажмите клавишу Test (если на кадре есть текст то в
   Image Box должен появиться не пустой результат обработки изображения, иначе
   чёрный экран (но не обязательно)) Если результат обработки изображения с 
   текстом пуст то имеет смысл ослабить настройки (а именно скорее всего будет
   достаточно снизить Sum Color Difference и Sum Multiple Color Difference оба
   на 600 или 500 или 400). Результатом нажатия кнопки Test являются три
   изображения After First Filtration, After Second Filtration,VEdgesPointsImage 
   их можно просмотреть, путем нажатия кнопок в лево и в право над кнопкой Test,
   а также в папке TSTImages. 
   
   "After First Filtration" является получаемое изображение в результате
   первичной обработки кадра, на результат обработки влияют все "Настройки Для
   Операторов Собеля" кроме одной H-Vertical Threshold, все "Настройки Для
   Цветовой Фильтрацыи" кроме одной Sum Multiple Color Diff.
   
   "After Second Filtration" явлется получаемое изображение в результате
   вторичной обработки изображения (обработки применяемой к изображению
   полученному в результате "After First Filtration"), на результат обработки
   влияют все "Настройки Для Линейной Фильтрации", все "Настройки Для Точек
   Цветовых Границ", все "Настройки Для Цветовой Фильтрацыи" кроме одной 
   Sum Color Diff.
 
   "VEdgesPointsImage" переводится как изображение получаемое из точек
   вертикальных цветовых границ. Это изобрадение получается путем конвертации
   исходного кадра в черно-белое изображение, потом применения горизонтального
   оператора Собеля для определения силы перепада цвета. Затем путем пороговой
   фильтрации (все точки сила которых ниже установленного в настройках порога
   "H-Vertical Threshold" заменяются черными иначе белыми). Эти изображения
   используются при проверки являются ли соседние кадры с идентичным текстом или
   нет)


6) По окончанию поиска сабов желательно перейти в папку RGBImages и удалить все
   те кадры которые окажутся пустышками, далее по этим изображениям можно
   создать пустой саб с таймингом, для этого перейдите на закладку OCR и нажмите
   на Create Empty Sub, при этом существует возможность удлинения саба путем
   установки значения "Min Sub Duration" минимальной длительности саба в
   секундах, причем будет производиться логическая попытка удлинения саба
   путем изменения времени его окончания.

Подробнее о настройках:

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

H-Vertical Threshold - описано в пункте 5-ть "VEdgesPointsImage".

Line Height - применяется в алгоритмах снижении области детектировании, а также
   линейной фильтрации. Все изображение разбивается на горизонтальные строчки
   толщины(высоты) "Line Height". Затем каждая из этих строчек анализируется в
   отдельности.

Between Text Distance - используется при вторичной обработке изображения. Как вы
   уже должны были понять врезультате первичной обработки мы получаем бинарное
   изображение (говоря более простыми словами состоящее из точек с только двумя
   возможными цветами black and white ). Это полученное изображение разбивается
   на линии толщины "Line Height". В каждой из этих линий ищутся блоки
   (предположительно текстовые), по принципу если в следующем столбце высоты
   "Line Height" есть хоть одна белая точка то блок еще не закончился. Затем
   смотрится расстояние между всеми найденными блоками, оно не должно превышать
   ширины видео кадра умноженной на "Between Text Distance". Если больше то
   удаляется тот блок центр которого наиболее удален от центра кадра.

Text Centre Offset -в результате вышеописанных опираций("Between Text Distance")
   в каждой строчке остается некоторое возможно нулевое число блоков. Для этих
   блоков (предположительно текстовая строка) находится их (её) центр. Если
   центр смещён более чем на "Text Centre Offset"*("ширины видео кадра"/2) от
   центра кадра то удаляется блок наиболее смещенный от центра и так до тех пор
   пока условие не выполнится. Важным моментом является еще то, что проверяется
   расположение блоков в обоих половинах изображения иначе все блоки удаляются.

Min Points Number - во всех оставшихся блоках в строке (читайте выше)
   подсчитывается число белых точек, если их число меньше "Min Points Number" то
   все блоки в строчке удаляются.

Min Points Density - подсчитывается суммарная площадь оставшихся блоков в строке
   (=SS)(читайте выше), а также суммарное число белых точек в них (=S).
   Проверяется что S/SS >= "Min Points Density", если не выполнено то все эти
   блоки удаляются.

Segment Width - используется в алгоритмах снижения области детектирования, а
   также в цветовой фильтрации во вторичной обработке. Каждая линия делится на
   блоки равной длины "Segment Width" (не путать с теми что выше описаны).

Min Segments Count - используется в алгоритмах снижения области детектирования, 
   а также в цветовой фильтрации во вторичной обработке. Минимальное число 
   соседних блоков с достаточно высокими цветовыми перепадами при котором
   строчка их содержащая остается (будет) считаться предположительно текстовой
   (текстосодержащей).

Sum Color Difference - используется в самом начале первичной обработки для
   снижения области детектирования. Исходный видео кадр разбивается на линии
   толщиной 1, каждая линия разбивается на блоки равной ширины "Segment Width".
   В каждом блоке подсчитывается суммарный цветовой перепад соседних точек, если
   в лини находятся "Min Segments Count" соседних блоков с "перепадами" >= "Sum
   Color Difference", то линия считается предположительно текстосодержащей.

Sum Multiple Color Diff - используется в конце вторичной обработки. Как вы
   должны еще помнить в конце вторичной обработки у нас возможно в какой либо из
   строчек толщиной "Line Height" 	все еще остались некоторые блоки
   (потенциально текстосодержащие блоки). Вся область от их начала до конца
   разбивается на блоки шириной "Segment Width". В каждой линии(таких линий
   будет "Line Height") каждого такого блока подсчитывается сумарный цветовой
   перепад. Если в каждой линии какогонибуть блока "перепад" >= "Sum Multiple
   Color Diff", то такой блок считается потенциально тексто содержащим.
   Если в результате в этой области находятся "Min Segments Count" таких
   соседних блоков, то вся линия считается предположительно текстосодержащей.

Sub Frames Length - минимальная длительность саба. 

Sub Square Error - на самом деле первое обнаружение саба идет следующим образом,
   нашли первый кадр потенциально содержащий текст, далее если не менее "Sub
   Frames Length" включая его кадров также являются потенциально
   текстосодержащими и площади их потенциально текстовых областей не отличается
   более чем на "Sub Square Error" то считается что найден саб (далее идет тест
   на наличие текствой строки, если тест не провалился то идет поиск конца саба,
   сшивка идентичных сабов).

VEdgesPoints line error - используется для сшивки сабов, а также обнаружения
   конца саба. Соседние кадры сравниваются по площади точек вертикальных
   цветовых границ в потенциально текстовых областях. Если площади различаются
   не более чем на "VEdgesPoints line error" то считается что конец саба еще не
   найден.

Text Procent - используется в тесте на наличие текстовой строки. Ищет хотя бы
   одну линию толщины "Line Height" в которой сумма всех длин потенциально
   текстовых блоков по отношению к протяженности области на которой они
   распологаются >= "Text Procent". Также проверяет что эта сумма должна быть >=
   "Min Text Length"*"Ширина видео кадра".

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

1) "A NEW APPROACH FOR VIDEO TEXT DETECTION" 2002г.
   Min Cai, Jiqiang Song, and Michael R. Lyu, 
   Department of Computer Science & Engineering 
   The Chinese University of Hong Kong Hong Kong SAR, China 

2) Automatic Image Segmentation by Integrating Color-Edge Extraction 
   and Seeded Region Growing 2001г.
   Jianping Fan, David. K. Y. Yau, Member, IEEE, Ahmed. K. Elmagarmid, 
   Senior Member, IEEE, and Walid G. Aref, Member, IEEE
 
3) Automatic Location of Text in Video Frames 2001г.
   Xian-Sheng Hua, Xiang-Rong Chen, Liu Wenyin, Hong-Jiang Zhang 
   Microsoft Research China

4) EFFICIENT VIDEO TEXT RECOGNITION USING MULTIPLE FRAME INTEGRATION
   Xian-Sheng Hua, Pei Yin, Hong-Jiang Zhang
   Microsoft Research Asia, Dept. of Computer Science and Technology, 
   Tsinghua Univ.

Также был частично использован принцип придуманный Shalcker'ом с целью
уменьшения области обработки видео на каждом кадре.

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

-----------------------------------------------------------------------------------------------------------------------

Использование программы с применением сторонних платных программ:

Использовать с применением FineReader 8.0 с целью получения полноценных сабов:

1) Сперва найти все картинки с сабами (Search->Run Search)
2) Затем создать картинки текста очищенного от фона (OCR->Create Cleared TXT Images)
3) Открываете FineReader 8.0 ---File->Open PDF/Image... и открываете все файлы из папки TXTImages.
4) Далее возможно имеет смысл нажать по первой картинке слева правой кнопкой мыши и
выбрать Correct Image Resolution... выбрать 300 dpi, выбрать All images in the batch и нажать OK
5) Нажать Read All (некоторые из ошибочных кадров иногда имеет смысл удалять в связи с тем что FineReader 
иногда на них падает, но слава богу после падения он позволяет востановить то, что он успел сделать до этого)
6) Далее думаю стоит зайти в Check Spelling->Options.. убрать первую галочку с Stop at words with uncertain characers и
запустить Check Spelling.
7) Затем сохранить результаты следующим способом: File->Save Result->... В Save Wizard выбираем 
первый вариант (Save Pages) и ставим галочку на All Pages, жмем OK... Далее лезим в папку TXTResults,
выставляем File options: Name files as source images и сохраняем как Text Document ('s).
8) Впрограмме VideoSubFinder... Жмем OCR->Create Sub From TXT Results.
9) Сам созданный саб будет находиться в корневом каталоге Sub.srt
