Как считать время с записанного видео с камеры наблюдения? - PullRequest
9 голосов
/ 21 декабря 2010

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

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

alt text http://i55.tinypic.com/2j5gca8.png

Пожалуйста, укажите мне, как решить эту проблему.Я программист на Java, поэтому предпочел бы подход через Java.

РЕДАКТИРОВАТЬ: Спасибо за комментарий.Я посмотрел на библиотеку Ron Cemer OCR, и ее производительность намного ниже наших требований.

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

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

Ответы [ 4 ]

6 голосов
/ 27 декабря 2010

Похоже, вам здесь не нужен полноценный OCR.
Я предполагаю, что числа всегда находятся на одной и той же позиции на изображении.Вы ожидаете только цифры 0-9 в каждой из известных позиций (черного или белого цвета).
Простой шаблон, сопоставляемый в каждой позиции с каждой из цифр (у вас будет 20 шаблонов для 10 цифр в каждом цвете) очень быстро (в режиме реального времени) и должен давать очень точные результаты.

1 голос
/ 27 сентября 2011

Java OCR отлично подойдет для вашей ситуации (Рон Семер здесь).Все, что вам нужно сделать, это удалить фоновое изображение или сделать его всегда менее 50% белого, чтобы белые символы были белыми, а фон - черным при преобразовании изображения в монохромный.

Обучите JavaOCR шрифту, извлеките эту прямоугольную область из изображения, удалите фон, и все готово.

Я предлагаю алгоритм, который смотрит на r, g, b и устанавливает все в черный цвет, где r, g, b не совсем одинаковые значения.Это оставит только пиксели, которые являются идеальными оттенками серого.Поскольку изображение является цветным, а цифры - монохромными, это оставляет цифры и некоторую пыль.

JavaOCR хочет видеть черные символы на белом фоне, поэтому, как только вы сделали вышеописанное, вы такженужно инвертировать монохромное изображение (белое = черное и наоборот).Затем выполните это через библиотеку JavaOCR, передав ей образцы ссылок всех символов, которые вы ожидаете, что она распознает, и ваша проблема должна быть (по крайней мере в основном) решена.

1 голос
/ 23 декабря 2010

В каком формате находится источник (vhs, dvd, stills)?Возможно, что отметка времени закодирована в данных.

Обновление с более подробной информацией

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

Что я буду делать (если не получится простое, очень быстрое в реализации, сверхточное OCR-решение, которое, я не верю, существует):

Создать пару таблиц базы данныхНапример,

video           video_group
-------         -----------
id              id
filename        title
start_time      date_created
group_id        date_modified
date_created    date_deleted
date_modified
date_deleted

video_group может содержать

id| title
-----------
1 | Unassigned
2 | 711 Mockingbird @ 75
3 | Kroger storage room

video будет предварительно заполнен именами видеофайлов с помощью сценария импорта.Изначально присвойте всем group_id из 1 (Неназначенный)

Создайте простое приложение Winforms или WPF (простите меня за искусство ASCII):

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|  Group: [=========]\/ [New group...]                            |
|                                                                 |
|  File:  [=========]\/                                           |
|                                                                 |
|  Preview                                                        |
|  |--------------------------------------| [Next Video]          |
|  | (first frame of selected video here) | [Prev]                |
|  |                                      |                       |
|  |                                      |                       |
|  |                                      |                       |
|  |--------------------------------------|                       |
|  Start Time                                                     |
|  [(enter start time value here as displayed on preview frame)]  |
|                                                                 |
|  [Update]                                                       |
-------------------------------------------------------------------

Пользователь (любой может сделать это - секретарь), уборщик, даже недавний выпускник CS).Все, что им нужно сделать, это прочитать время из фрейма предварительного просмотра, ввести его в поле Start Time и нажать «обновить» или «Далее», чтобы обновить базу данных и перейти к следующей.Сохраняйте выбор группы от одного видео к следующему, если пользователь не изменяет его.

Предполагается, что пользователю требуется 30 секунд для чтения, ввода и нажатия кнопки «Далее». Они могут завершить 100-150 видеороликов в час (Позвоните75 для более реалистичной оценки).Кроме того, стажеры намного дешевле, чем время разработчиков.

Если у вас действительно есть «сотни» видеороликов, все равно будет быстрее сделать это, чем использовать OCR.Если OCR работает по большей части, вам, скорее всего, понадобится, чтобы кто-то вручную все осмотрел, чтобы убедиться, что результаты верны.Возникает вопрос: зачем беспокоиться об оптическом распознавании символов?

0 голосов
/ 23 декабря 2010

Попробуйте Tesseract от Google, там есть пара упаковщиков JNI. Обязательно прочитайте FAQ, чтобы вытащить только цифры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...