В связи с потребностями проекта мы исследовали некоторые доступные в настоящее время на рынке инструменты OCR с открытым исходным кодом, которые поддерживают локальное развертывание и не вызывают API. В основном они включают PaddleOCR/CnOCR/chinese_lite OCR/EasyOCR/Tesseract/chineseocr/mmocr. В этой статье в основном опробованы четыре продукта: EasyOCR/CnOCR/Tesseract/PaddleOCR.
EasyOCRОфициальный склад:https://github.com/JaidedAI/EasyOCR Установите EasyOCR:
pip install easyocr
программа испытаний
import easyocr
reader = easyocr.Reader(['ch_sim','en']) # this needs to run only once to load the model into memory
result = reader.readtext('chinese.jpg')
Фактическое измерение EasyOCR относительно строго для CUDA. В обычной среде Pytorch после запуска будет сообщено об ошибке:
Could not load symbol cublasGetSmCountTarget from cublas64_11.dll. Error code 127
#833Этот вопрос был упомянут,Говоря о причине, возможно, cuda и cudnn не совпадают.,После замены cudnn,Ошибка до сих пор не исчезла,Поэтому я пока об этом не упоминал.
CnOCRОфициальный склад:https://github.com/breezedeus/CnOCR Установка CnOCR:
pip install cnocr
CnOCR предъявляет строгие экологические требования.,это вrequirements.txt
Написал много номеров версий зависимостей,Поэтому, если вы установите его непосредственно в существующей среде,Он удалит и переустановит зависимости, такие как Pytorch.,Настоящая ловушка,Лучше всего сначала открыть новую среду.
программа испытаний:
from cnocr import CnOcr
img_fp = 'img/output_2.png'
ocr = CnOcr() # Использовать значения по умолчанию для всех параметров
out = ocr.ocr(img_fp)
print(out)
Фактическое измерение: в моем бизнес-сценарии использование модели по умолчанию не работает.
TesseractОфициальный склад:https://github.com/tesseract-ocr/tesseract
TesseractиспользуетсяC++развитый,Итак, если вы хотите использовать его в Python,Требуются сторонние зависимостиpytesseract
Сначала вам нужно установить его на свой компьютерTesseract
Адрес загрузки установочного пакета:https://digi.bib.uni-mannheim.de/tesseract/
Пожалуйста, ознакомьтесь с процессом установки:https://blog.csdn.net/weixin_51571728/article/details/120384909
После завершения настройки,Введите в командной строкеtesseract -v
Распечатка информации о версии означает, что установка прошла успешно.。
Установить послеpytesseract
:
pip install pytesseract
программа испытаний
img_path = 'img/img_1.png'
# Добавьте путь к Тессеракту
pytesseract.pytesseract.tesseract_cmd = r'C:\Users\zxy\AppData\Local\Programs\Tesseract-OCR\tesseract.exe'
"""
image_to_string(): если вы распознаете английский язык или цифры, дополнительные параметры не требуются. Если вы распознаете другие языки, вам необходимо добавить параметр lang.
lang='chi_sim' означает, что следует распознавать упрощенный китайский язык.
Если не распознано, верните пустое значение
"""
text = pytesseract.image_to_string(Image.open(img_path), lang='chi_sim')
print(text)
Согласно фактическим измерениям, в моем сценарии этот эффект средний, а в тессеракте есть разные модели для китайского и английского языков, поэтому его общая применимость не очень хороша.
PaddleOCR — продукт Baidu, обновленный до четвертой версии. PaddleOCRОфициальный склад:https://github.com/PaddlePaddle/PaddleOCR Установка PaddleOCR:
pip install paddleocr
программа испытаний:
import cv2
from paddleocr import PaddleOCR
if __name__ == '__main__':
ocr = PaddleOCR(use_angle_cls=True, lang="ch", ocr_version='PP-OCRv4')
image_input_fullname = 'img/output_5.png'
img = cv2.imread(image_input_fullname)
result = ocr.ocr(img, cls=True)
print(result)
в соответствии сPP-OCRv4вводный документ,PP-OCRv4 обучается по трем различным шкалам: (32 320), (48 320), (64 320) во время обучения.
Фактические измерения показали, что если текстовая область меньше этого диапазона, это повлияет на эффект. Поэтому можно ввести стратегию заполнения, то есть добавить белую рамку вокруг текстовой области, чтобы увеличить разрешение изображения входной модели. .
import cv2
from paddleocr import PaddleOCR
def add_padding_to_image(image, output_size=(640, 640), color=(255, 255, 255)):
h, w = image.shape[:2]
# Рассчитайте размер отступа, который необходимо добавить.
delta_w = max(output_size[0] - w, 0)
delta_h = max(output_size[1] - h, 0)
top, bottom = delta_h // 2, delta_h - (delta_h // 2)
left, right = delta_w // 2, delta_w - (delta_w // 2)
# добавить отступы
padded_image = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)
return padded_image
if __name__ == '__main__':
ocr = PaddleOCR(use_angle_cls=True, lang="ch", ocr_version='PP-OCRv4')
image_input_fullname = 'img/output_5.png'
img = cv2.imread(image_input_fullname)
padded_img = add_padding_to_image(img)
result = ocr.ocr(img, cls=True)
print(result)
В моем бизнес-сценарии,PaddleOCR
Лучшее выступление,По сути, он может достичь точности распознавания более 80%.,Если вам все еще нужно совершенствоваться,Вы также можете тренироваться на основе собственных данных.
Инструмент маркировки: PPOCRLabelv2. Используйте документацию:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/PPOCRLabel/README_ch.md документ об обучении:https://aistudio.baidu.com/modelsdetail/270?modelId=270