Python распознает текст на картинках
Введение
Я не знаю, сталкивались ли вы с такой проблемой, то есть есть статья в определенной программе или на определенной веб-странице, она вам очень нравится, но вы не можете ее скопировать. Или, как Baidu Docs, только часть может быть скопирована, в это время мы выберем скриншоты для сохранения. Но когда мы хотим использовать текст внутри, нам все равно приходится набирать его слово за словом. Так можем ли мы сразу распознать текст на картинке? Ответ положительный.
2. Тессеракт
Распознавание текста является частью ORC, ORC означает оптическое распознавание символов, которое широко известно как распознавание текста. Tesseract — это инструмент для распознавания текста, который можно использовать в сочетании с Python для быстрой реализации распознавания текста. Но перед этим нам нужно проделать кропотливую работу.
(1) Установка и настройка Tesseract
Установку Tesseract мы можем переместить на этот URL https://digi.bib.uni-mannheim.de/tesseract/, мы можем увидеть следующий интерфейс:
Есть много версий для вас на выбор, вы можете выбрать в соответствии с вашими потребностями. Где w32 означает 32-битную систему, w64 означает 64-битную систему, вы можете выбрать соответствующую версию, скорость загрузки может быть медленной, вы можете выбрать ссылку:Disk.Baidu.com/Yes/1JK Z Oh_ACL…Код извлечения: скачать ayel. При установке нам нужно знать местоположение нашей установки и настроить каталог установки в системной переменной пути.D:\CodeField\Tesseract-OCR
.
нас右击我的电脑/此电脑->属性->高级系统设置->环境变量->Path->编辑->新建
Затем скопируйте в него наш путь. После добавления системных переменных нам нужно по очереди нажать ОК, чтобы он был настроен.
(2) Скачать языковой пакет
Tesseract не поддерживает китайский язык по умолчанию. Если вы хотите распознавать китайский или другие языки, вам необходимо загрузить соответствующий языковой пакет. Адрес для загрузки: https://tesseract-ocr.github.io/tessdoc/Data-Files , после входа на сайт прокручиваем вниз:
Есть два китайских языковых пакета, один китайский-упрощенный и китайский-традиционный, они соответственно упрощенный китайский и традиционный китайский, мы можем выбрать нужную загрузку. После завершения загрузки нам нужно поместить его в каталог tessdata по пути Tesseract.Наш путьD:\CodeField\Tesseract-OCR\tessdata
.
(3) Скачать другие модули
В дополнение к шагам, описанным выше, нам также необходимо загрузить два модуля:
pip install pytesseract
pip install pillow
Первый предназначен для распознавания текста, а второй — для чтения изображений. Далее мы можем выполнить распознавание текста.
3. Распознавание символов
(1) Распознавание одного изображения
Следующая операция намного проще, вот картинка, которую мы хотим идентифицировать:
Далее наш код распознавания текста:
import pytesseract
from PIL import Image
# 读取图片
im = Image.open('sentence.jpg')
# 识别文字
string = pytesseract.image_to_string(im)
print(string)
Результаты идентификации следующие:
Do not go gentle into that good night!
Поскольку английский язык поддерживается по умолчанию, мы можем распознавать его напрямую, но если мы хотим распознавать китайский или другие языки, нам нужно внести некоторые изменения:
import pytesseract
from PIL import Image
# 读取图片
im = Image.open('sentence.png')
# 识别文字,并指定语言
string = pytesseract.image_to_string(im, lang='chi_sim')
print(string)
При идентификации мы устанавливаемlang='chi_sim'
, то есть установите язык на упрощенный китайский.Эта настройка вступит в силу только в том случае, если в вашем каталоге tessdata есть пакет упрощенного китайского языка. Вот изображение, которое мы использовали для идентификации:
Результаты идентификации следующие:
不 要 温 顺 的 走 进 那 个 良 夜
Содержание картины точно определено. Нам нужно знать одну вещь: после того, как мы установим язык на упрощенный китайский или другие языки, Tesseract все еще может распознавать английские символы.
(2) Пакетное распознавание изображений
Поскольку мы перечислили распознавание одиночного изображения, должна быть функция пакетного распознавания изображений, которая требует от нас подготовкиtxt
файл, например, у меня естьtext.txt
файл со следующим содержимым:
sentence1.jpg
sentence2.jpg
Модифицируем код следующим образом:
import pytesseract
# 识别文字
string = pytesseract.image_to_string('text.txt', lang='chi_sim')
print(string)
Но написать текстовый файл самостоятельно немного проблематично, поэтому мы можем внести следующие изменения:
import os
import pytesseract
# 文字图片的路径
path = 'text_img/'
# 获取图片路径列表
imgs = [path + i for i in os.listdir(path)]
# 打开文件
f = open('text.txt', 'w+', encoding='utf-8')
# 将各个图片的路径写入text.txt文件当中
for img in imgs:
f.write(img + '\n')
# 关闭文件
f.close()
# 文字识别
string = pytesseract.image_to_string('text.txt', lang='chi_sim')
print(string)
Таким образом, нам нужно только передать корневой каталог текстового изображения для идентификации в пакетах. В ходе тестирования было обнаружено, что Tesseract неточно распознает элегантные шрифты, такие как рукописный шрифт и линейный шрифт, а также необходимо улучшить распознавание некоторых сложных символов. Однако точность распознавания шрифтов со строгими штрихами, таких как Song и print, очень высока. Кроме того, если наклон картинки больше определенного угла, результаты распознавания также будут сильно отличаться.
Для большего количества контента вы можете обратить внимание на официальный аккаунт: создайте новую папку X.