EasyOCR 是一个开源的、支持多语言(28+种)和多文档格式(PDF/PNG/JPG/TIFF等)的 OCR(光学字符识别)工具库,由 Hugging Face 团队维护。其目标是简化 OCR 的开发流程,提供易用、高性能的文本识别能力,适用于工业、教育、医疗等多个领域。
技术模型:ResNet(残差网络)、VGG
功能:
关键优势:
技术模型:LSTM(长短期记忆网络)
功能:
基于特征序列建模时间依赖关系,完成文本模式识别与结构化解析。
LSTM 设计:
核心作用:
技术模型:CTC(连接主义时间分类)
功能:
将序列标注结果映射为可变长度的实际文本,解决输入与输出不对齐问题。
技术原理:
典型场景:
deep-text-recognition-benchmark
框架,提供标准化训练流程。首先确保已经安装了Pytorch,它是EasyOCR的核心依赖包。
pip3 install torch torchvision torchaudio
安装EasyOCR,命令如下:
pip install easyocr
# 安装简体中文
pip install easyocr[ch_sim]
EasyOCR支持多种语言,您可以为您需要的特定语言安装语言模型。默认情况下,安装英语(en)。您可以使用- model_dir添加其他语言,或者在初始化EasyOCR阅读器时在代码中指定它们。EasyOCR目前支持80多种语言,更多的语言正在开发中。代码名称支持的语言如下:
Abaza (abq), Adyghe (ady), Afrikaans (af), Angika (ang), Arabic (ar), Assamese (as), Avar (ava), Azerbaijani (az), Belarusian (be), Bulgarian (bg) , Bihari (bh), Bhojpuri (bho), Bengali (bn), Bosnian (bs), Simplified Chinese (ch_sim), Traditional Chinese (ch_tra), Chechen (che), Czech (cs), Welsh (cy), Danish (da), German (de), English (en), Spanish (es), Estonian (et), Persian (fa), Finnish (fi), French (fr), Irish (ga), Goan Konkani (gom), Hindi (hi), Croatian (hr), Hungarian (hu), Indonesian (id), Ingush (inh), Icelandic (is), Italian (it), Japanese (ja), Kabardian (kbd), Kannada (kn), Korean (ko), Kurdish (ku), Latin (la), Lak (lbe), Lezghian (lez), Lithuanian (lt), Latvian (lv), Magahi (mah), Maithili (mai), Maori (mi), Mongolian (mn), Marathi (mr), Malay (ms), Maltese (mt), Nepali (ne), Newari (new), Dutch (nl), Norwegian (no), Occitan (oc), Pali (pi), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Serbian (cyrillic) (rs_cyrillic), Serbian(latin) (rs_latin), Nagpuri (sck), Slovak (sk), Slovenian (sl), Albanian (sq), Swedish (sv), Swahili (sw), Tamil (ta), Tabassaran (tab), Telugu (te), Thai (th), Tajik (tjk), Tagalog (tl), Turkish (tr), Uyghur (ug), Ukranian (uk), Urdu (ur), Uzbek (uz), Vietnamese (vi)
简体中文:Simplified Chinese (ch_sim)
你也可以同时使用多种语言,只要它们彼此兼容。例如,如果你想使用英语和简体中文,你可以这样写:
reader = easyocr.Reader(['en', 'ch_sim'])
下面是如何使用EasyOCR读取图像和提取文本的简单示例:
导入EasyOCR并创建阅读器对象。您需要指定要使用的语言作为语言代码列表。
加载图像文件并对其执行OCR。您可以使用阅读器对象的readtext方法从图像中获取文本及其坐标。
readtext方法返回一个结果列表,其中每个结果包含有关已识别文本、其边界框和准确性概率的信息。您可以遍历结果并访问以下信息:
import easyocr
reader = easyocr.Reader(['en']) # specify the language
result = reader.readtext('image.jpg')
for (bbox, text, prob) in result:
print(f'Text: {text}, Probability: {prob}')
输出结果示例:
Text: 姓名, Probability: 0.9750918540041094
Text: 王林, Probability: 0.7283910545488811
Text: 性别, Probability: 0.99506228162414
Text: 民族 汉, Probability: 0.11635302390479253
....
EasyOCR提供了几个高级功能,如检测多种语言,从视频中检测文本,自动填写表单等等。以下是一些如何使用EasyOCR的高级用例:
多语言识别:EasyOCR支持80多种语言。您可以在创建阅读器对象时指定语言。例如,要从图像中识别英语和印地语文本:
import easyocr
reader = easyocr.Reader(['en','ch_sim'])
result = reader.readtext('image.jpg')
for (bbox, text, prob) in result:
print(f'Text: {text}, Probability: {prob}')
车牌识别:EasyOCR在识别车牌上的文字方面表现得非常出色,这是一项对许多应用至关重要的任务,包括安全和交通控制。该库是车牌识别的绝佳选择,因为它具有内置功能、多语言支持和复杂的识别方法。车牌识别:EasyOCR在识别车牌上的文字方面表现得非常出色,这是一项对许多应用至关重要的任务,包括安全和交通控制。该库是车牌识别的绝佳选择,因为它具有内置功能、多语言支持和复杂的识别方法。使用相机或智能手机拍摄清晰的车牌图像后,可以使用EasyOCR对车牌图像进行光学字符识别(OCR)。
import easyocr
reader = easyocr.Reader(['en','ch_sim'])
result = reader.readtext('image.jpg')
for (bbox, text, prob) in result:
(top_left, top_right, bottom_right, bottom_left) = bbox
print(f'Text: {text}, Probability: {prob}')
从灰度图像中读取文本:EasyOCR也可以从灰度图像中读取文本。您只需要在将图像传递给readtext方法之前将其转换为灰度。
from PIL import Image
import easyocr
reader = easyocr.Reader(['en'])
img = Image.open('image.jpg').convert('L')
result = reader.readtext(img)
for (bbox, text, prob) in result:
print(f'Text: {text}, Probability: {prob}')
由此可见,EasyOCR也能够从灰度图像中读取,首先将简单的文本图像转换为灰度,然后传递给EasyOCR阅读器进行识别。
处理噪声图像:如果图像有很多噪声,可以在将图像传递给EasyOCR之前使用图像处理技术来降低噪声。这里使用cv2库来降低噪声,然后将图像传递给EasyOCR阅读器进行识别。
import cv2
import easyocr
img = cv2.imread('noisy_image.jpg', 0)
blur = cv2.GaussianBlur(img,(5,5),0)
reader = easyocr.Reader(['en'])
result = reader.readtext(blur)
for (bbox, text, prob) in result:
print(f'Text: {text}, Probability: {prob}')
批处理:如果您有多个图像,并且希望一次处理所有图像,则可以在循环中使用readtext方法。
import easyocr
reader = easyocr.Reader(['en'])
images = ['image1.jpg', 'image2.jpg', 'image3.jpg']
for img in images:
result = reader.readtext(img)
print(result)
获取边界框:readtext方法返回已识别的文本以及边界框坐标。您可以使用这些坐标进行进一步处理。
import easyocr
reader = easyocr.Reader(['en'])
result = reader.readtext('image.jpg')
for res in result:
print(f"Text: {res[1]}, Coordinates: {res[0]}")
本文解释了如何使用EasyOCR,这是一个强大而平易近人的OCR库,可以从各种图像格式中识别和提取文本。我们已经看到EasyOCR可以批量分析大量照片,处理噪声和灰度图像,支持80多种语言,并为已识别的文本返回边界框和置信度分数。EasyOCR以其简单有效的方法从照片中提取文本,具有高度的准确性,是图像文本识别的伟大工具。该库强大的算法和用户友好的界面使其成为需要快速处理大量文档和图像的公司和组织的完美选择。