Мне нужно создать приложение для Корана, и я хочу прочитать стихи, когда пользователь прикасается к нему. Проблема, с которой я сталкиваюсь, заключается в том, что некоторые стихи могут расширяться до полутора строк (выделенный красным стих) или просто помещаться в четверть строки (выделенный зеленый стих). Таким образом, добавление каждого стиха в текстовое представление или другое представление не будет работать
Я хочу обнаружить стихи, как красные на втором изображении. У меня есть аудио файлы для стихов, поэтому нет необходимости преобразования текста в речь
image-processing
text-recognition
Асвин Ананд
источник
источник
Ответы:
Это может быть решено довольно просто с помощью простого сопоставления с шаблоном. Я не знаю точно, как у вас это настроено, поэтому я просто опишу алгоритм в целом и буду использовать иллюстрации.
Обратите внимание, что номера стихов имеют отличительную границу, которую можно легко использовать для определения начала и конца стиха. Поэтому создайте бинаризованный шаблон для этого шаблона и сохраните его. Что-то вроде этого:
Поскольку количество строк на экране известно заранее (вы форматируете страницу), и каждый стих имеет постоянную высоту, вы можете легко (алгоритмически) определить, где координаты Y для осевых линий стихов должны быть на экране. , Это демонстрирует идею:
Когда пользователь касается стиха, получите координаты XY и привязайте координату Y к ближайшему центру стиха.
Затем, начиная с координаты X, выполните простое сопоставление с шаблоном (взаимную корреляцию) по этой строке. Первое совпадение (пик в взаимной корреляции) в прямом направлении (влево) будет конечной точкой для стиха. Если совпадений в обратном направлении (вправо) нет, то переместитесь на один стих вверх (что вы можете сделать, потому что вы знаете координату Y центральной линии) и повторите. Первое совпадение с левого конца будет отправной точкой стиха. Точно так же, если в строке нет прямого соответствия, сдвиньтесь на одну строку вниз и повторите.
Вот короткая иллюстрация идеи. Желтое поле - то, где пользователь касается стиха. Затем вы делаете взаимную корреляцию с вашим шаблоном, и синие круги будут совпадать.
Я также использую сопоставление с шаблоном в этом ответе , если вам интересно увидеть его в действии.
Как только вы определили начальную точку для стиха, используйте распознаватель арабского текста, чтобы вывести номер стиха внутри этой рамки и воспроизвести соответствующий аудиофайл.
Более простое решение:
Более простое решение: если вы не хотите проходить через это, это сохранить координаты XY начальных точек стиха (сделайте это простым и использовать центральные точки), и как только вы получите координаты пользовательского ввода, вы можете снова привязать это к центральной линии и затем идите назад, чтобы видеть, где начинается стих. Это может иметь преимущество в том, что быстрее.
Я не выдвигал это как первое решение, потому что вы, похоже, отвергли аналогичную идею в комментариях. В конце концов, это зависит от ваших ограничений - вы бы предпочли вычислительную работу (сопоставление с шаблоном - что, кстати, также требует сохранения шаблона) или использование памяти (сохранение координат).
Если бы я был вами, я бы, наверное, пошел с этим, но решение для обработки изображений может быть интересно попробовать.
источник