Обнаружение арабских стихов, охватывающих несколько строк


12

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

Я хочу обнаружить стихи, как красные на втором изображении. У меня есть аудио файлы для стихов, поэтому нет необходимости преобразования текста в речь


1
Является ли страница данными изображения или визуализированным текстом Unicode?

Текст в речь ... Но тогда, пожалуйста, покажите нам свое исследование.

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

1
Использовать две строки и просто накладные расходы?

1
Под линией в полторы строки вы подразумеваете, что она занимает ширину экрана, а затем половину следующей строки?

Ответы:


9

Это может быть решено довольно просто с помощью простого сопоставления с шаблоном. Я не знаю точно, как у вас это настроено, поэтому я просто опишу алгоритм в целом и буду использовать иллюстрации.

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

    введите описание изображения здесь

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

    введите описание изображения здесь

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

  • Затем, начиная с координаты X, выполните простое сопоставление с шаблоном (взаимную корреляцию) по этой строке. Первое совпадение (пик в взаимной корреляции) в прямом направлении (влево) будет конечной точкой для стиха. Если совпадений в обратном направлении (вправо) нет, то переместитесь на один стих вверх (что вы можете сделать, потому что вы знаете координату Y центральной линии) и повторите. Первое совпадение с левого конца будет отправной точкой стиха. Точно так же, если в строке нет прямого соответствия, сдвиньтесь на одну строку вниз и повторите.

    Вот короткая иллюстрация идеи. Желтое поле - то, где пользователь касается стиха. Затем вы делаете взаимную корреляцию с вашим шаблоном, и синие круги будут совпадать.

    введите описание изображения здесь

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

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


Более простое решение:

Более простое решение: если вы не хотите проходить через это, это сохранить координаты XY начальных точек стиха (сделайте это простым и использовать центральные точки), и как только вы получите координаты пользовательского ввода, вы можете снова привязать это к центральной линии и затем идите назад, чтобы видеть, где начинается стих. Это может иметь преимущество в том, что быстрее.

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

Если бы я был вами, я бы, наверное, пошел с этим, но решение для обработки изображений может быть интересно попробовать.


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

@xmenus После того, как вы заперли круг (что вы делаете с помощью шаблона, соответствующего отличительной границе), вам придется использовать арабскую библиотеку для распознавания текста / чисел для идентификации содержимого внутри. Я не знаю арабского и поэтому не могу ничего порекомендовать. Вы могли бы попытаться спросить OP ...
Lorem Ipsum

@xmenus Если вам нужна помощь с арабским языком, вы можете спросить меня, но из того, что вы спрашиваете, хотите ли вы просто определить арабское число, вы, вероятно, можете сделать такой же шаблон для них, как вы делаете с кругами.
Спейси
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.