Нужна помощь в объединении отдельных строк текста, извлеченного из изображения в Python

Вопрос или проблема

Я пишу программу, которая использует Microsoft Computer Vision для считывания текста с изображений. Строка текста затем сохраняется в строковой переменной для дальнейшего использования.

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

Однако ПОРОЙ текст на изображении располагается в нескольких отдельных строках – здесь начинаются мои проблемы.

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

Вот мой код:

if read_result.status == OperationStatusCodes.succeeded:
                  for text_result in read_result.analyze_result.read_results:
                      for line in text_result.lines:
                        line_str = line.text
                        print(f"Строка: ", line_str)  
                            
                      upload_title_str = line_str
                      print(f"Строка заголовка для загрузки: {(upload_title_str)}")

Вывод:

Вот мои распечатанные строки вывода

Я хочу, чтобы все строки находились в ОДНОЙ строке, а моя upload_title_str была – line_str1+line_str2+line_str3.

Я пробовал разные методы .join и append, оператор += и т. д.

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

Есть ли какие-нибудь предложения?

Мне удалось решить эту проблему следующим образом:

for line in text_result.lines:
                        line_str = line_str + line.text

Затем я переместил «уровень», на котором я выводил свою upload_title_str, на уровень внешнего цикла.

Иногда просто нужно немного отложить взгляд, чтобы увидеть что-то очевидное!

Ответ или решение

Ваше решение проблемы с обработкой многострочного текста из изображений с помощью Microsoft Computer Vision выглядит обоснованным. Однако, я хотел бы предложить более оптимальный и лаконичный способ реализации вашего кода.

Основная проблема, с которой вы сталкивались, заключалась в том, что переменная upload_title_str обновлялась в каждом цикле, и, следовательно, сохранялась только последняя строка. Вместо этого вы можете использовать список для хранения всех строк, а затем объединить их в одну строку в конце.

Вот обновленный и оптимизированный код:

if read_result.status == OperationStatusCodes.succeeded:
    upload_title_list = []  # Список для хранения строк текста
    for text_result in read_result.analyze_result.read_results:
        for line in text_result.lines:
            line_str = line.text
            print(f"Line string: {line_str}")
            upload_title_list.append(line_str)  # Добавляем строку в список

    # Объединяем все строки из списка в одну строку с пробелом между ними
    upload_title_str = ' '.join(upload_title_list)
    print(f"Upload Title String: {upload_title_str}")

Объяснение кода:

  1. Создание списка: Мы создаем пустой список upload_title_list, в который будем добавлять каждую строку текста, полученную из изображения.

  2. Добавление строк в список: Вместо обновления переменной upload_title_str в цикле, мы добавляем каждую строку в upload_title_list с помощью метода .append().

  3. Объединение строк: После того как все строки будут добавлены в список, мы объединяем их в одну строку с помощью метода join(), используя пробел в качестве разделителя.

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

Если у вас есть дополнительные вопросы или захотите улучшить ваш код, не стесняйтесь обращаться за помощью!

Оцените материал
Добавить комментарий

Капча загружается...