Вопрос или проблема
Я пишу программу, которая использует 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}")
Объяснение кода:
-
Создание списка: Мы создаем пустой список
upload_title_list
, в который будем добавлять каждую строку текста, полученную из изображения. -
Добавление строк в список: Вместо обновления переменной
upload_title_str
в цикле, мы добавляем каждую строку вupload_title_list
с помощью метода.append()
. -
Объединение строк: После того как все строки будут добавлены в список, мы объединяем их в одну строку с помощью метода
join()
, используя пробел в качестве разделителя.
Теперь, даже если изображение содержит несколько строк текста, вы получите их все в одной строке, что решит вашу проблему.
Если у вас есть дополнительные вопросы или захотите улучшить ваш код, не стесняйтесь обращаться за помощью!