AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


【开源】基于训练好的 Deep Learning 模型开发的,模型包含功能:文本检测、文本识别,目前斩获21.9K star
发布日期:2024-05-08 08:04:36 浏览次数: 1841


文本检测

文本检测是计算机视觉领域的一项技术,它旨在从图像或视频中检测并定位文本内容。这项技术对于许多应用都至关重要,例如:

1. 光学字符识别(OCR):将图像中的文字转换为机器可读的文本格式,以便进一步处理和分析。

2. 内容审核:自动识别并过滤不当或敏感的文字内容。

3. 场景理解:帮助机器更好地理解图像中的场景,例如通过识别路牌、广告牌等文字信息。

4. 辅助功能:如为视障人士提供实时文字阅读服务等。

文本检测技术通常包括以下几个步骤:

- 文本定位:在图像中确定文本的位置。

- 文本识别:将定位到的文本区域进行字符分割和识别。

- 后处理:对识别结果进行校正和优化,以提高准确率。

随着深度学习技术的发展,尤其是卷积神经网络(CNN)和循环神经网络(RNN)的应用,文本检测的准确率和效率都有了显著提升。这项技术在遵循中国法律法规和社会主义核心价值观的前提下,广泛应用于各种场景,以促进社会主义现代化建设。

文本识别的深度学习框架

以下是一些广泛使用的深度学习框架,它们支持文本检测和识别任务:

1. TensorFlow:由Google开发的开源深度学习框架,广泛用于各种机器学习任务,包括文本检测。它提供了丰富的API和预训练模型,如SSD(Single Shot Multibox Detector)和CRNN(Convolutional Recurrent Neural Network)。

2. PyTorch:由Facebook开发的开源深度学习框架,以其动态计算图和易用性而受到许多研究者和开发者的喜爱。PyTorch同样支持多种文本检测模型,如RetinaNet和 EAST(Efficient and Accurate Scene Text Detection)。

3. Keras:一个高层次的神经网络API,它能够以TensorFlow、CNTK或Theano作为后端运行。Keras以其简洁的API设计而闻名,非常适合快速原型设计和开发。

4. Caffe:由Berkeley Vision and Learning Center(BVLC)开发的一个深度学习框架,特别适合于图像处理任务。虽然它的开发已经不如TensorFlow和PyTorch活跃,但它仍然是一个强大的工具,尤其是在处理文本检测的卷积神经网络方面。

5. MXNet:由Apache Software Foundation支持的开源深度学习框架,支持灵活的编程模型和高效的性能。它也被亚马逊AWS作为默认的深度学习框架之一。

6. PaddlePaddle:由百度开发的开源深度学习平台,它提供了丰富的文本检测和识别模型,如PaddleOCR,这是一个用于OCR任务的端到端开源工具库。

在选择框架时,您应该考虑您的具体需求、模型的复杂性、社区支持、文档完备性和易于集成等因素。大多数框架都提供了预训练的模型和教程,可以帮助您快速开始文本检测项目。

特点

它是一个开源的OCR(Optical Character Recognition,光学字符识别)库,它基于深度学习技术,能够识别多种语言和字体。它的特点包括:

1. 多语言支持:它支持多种语言的文本识别,包括但不限于英文、中文、日文、韩文等,这使得它在处理多语言文档时非常有用。

2. 端到端系统:它提供了一个端到端的解决方案,它不仅能够检测图像中的文本区域,还能够对检测到的文本进行识别。

3. 用户友好:它的API设计简单易用,用户可以通过简单的几行代码实现文本的检测和识别。

4. 自定义模型:虽然它提供了预训练模型,但它也允许用户使用自己的数据集对模型进行训练,以适应特定的应用场景。

5. 跨平台:它可以在多个操作系统上运行,包括Windows、Linux和macOS。

6. 开源和免费:它是开源的,遵循GPLv3许可证,可以免费使用,包括商业用途。

7. 基于深度学习:它使用了深度学习技术,特别是卷积神经网络(CNN)和循环神经网络(RNN),这些技术使得它在处理复杂场景文本时具有较高的准确率。

8. 速度快:它在保持较高准确率的同时,也注重性能优化,能够快速处理图像和视频中的文本。

9. 社区支持:作为一个开源项目,它有一个活跃的社区,用户可以通过社区获得支持,也可以为项目贡献代码和改进。

10. 持续更新:它的开发者持续更新项目,修复bug,添加新功能和改进性能。

由于它的易用性和多功能性,它被广泛应用于各种场景,如文档分析、图像内容审核、自动化文本提取等。

使用

它的使用正如其名非常地简单,就是2个步骤,第1步创建Reader()实例,第2步用readtxt()方法检测和识别。

创建Reader()实例

初始化Reader()实例的参数有:

  • lang_list (list):识别语言代码,比如[‘ch_sim’,’en’]分别表示简体中文和英文。

  • gpu (bool, string, default = True) :是否使能GPU,只有安装了GPU版本才有效。

  • model_storage_directory (string, default = None) :模型存储位置,依次查找系统变量EASYOCR_MODULE_PATH (preferred)、MODULE_PATH (if defined)表示的路径或者~/.EasyOCR/路径。

  • download_enabled (bool, default = True):如果没有对应模型文件时,自动下载模型。

  • user_network_directory (bool, default = None) :用户自定义识别网络的路径,如果没有指明,则在MODULE_PATH + ‘/user_network’ (~/.EasyOCR/user_network)目录中查找。

  • recog_network (string, default = ‘standard’) :替代标准模型,使用自定义的识别网络。

  • detector (bool, default = True) :是否加载检测模型。

  • recognizer (bool, default = True) :是否加载识别模型。

创建完实例后,识别文字就要用到其readtext()方法。

检测与识别readtext()方法

下面是一个最简单的应用例子,首先创建一个reader对象,传入要使用的语言包(识别模型),然后在reader对象的readtext方法中传入要识别的文件名称:

检测与识别readtext()方法

下面是一个最简单的应用例子,首先创建一个reader对象,传入要使用的语言包(识别模型),然后在reader对象的readtext方法中传入要识别的文件名称:

#juzicode.com / vx:桔子codeimport easyocrreader = easyocr.Reader(['ch_sim','en'])result = reader.readtext('road-poetry.png')for res in result: print(res)

运行结果:

([[151, 101], [195, 101], [195, 149], [151, 149]], '西', 0.9816301184856115)([[569, 71], [635, 71], [635, 131], [569, 131]], '东', 0.9986620851098884)([[218, 92], [535, 92], [535, 191], [218, 191]], '诗和远方路', 0.8088406614287519)([[137, 217], [177, 217], [177, 257], [137, 257]], 'W', 0.8304899668428476)([[209, 217], [525, 217], [525, 257], [209, 257]], 'Poetry And The Places Afar Rd。', 0.40033782611925706)([[571, 207], [611, 207], [611, 251], [571, 251]], 'C', 0.1553293824532922)

readtext()方法返回一个元组,包含了多个元素,每个元素由识别到文字信息的边框,文字内容,可信度等3部分组成。

除了前面例子中readtext()传入文件名称,也可以在readtext()方法中传入图像的numpy数组,比如用opencv读取图片文件得到的numpy数组:

#juzicode.com / vx:桔子codeimport easyocrimport cv2reader = easyocr.Reader(['ch_sim','en'])img = cv2.imread('road-poetry.png' ) result = reader.readtext(img) color=(0,0,255)thick=3for res in result:print(res)pos = res[0]text = res[1]for p in [(0,1),(1,2),(2,3),(3,0)]:cv2.line(img,pos[p[0]],pos[p[1]],color,thick)cv2.imwrite('bx-road-poetry.jpg',img)

运行结果:

([[151, 101], [195, 101], [195, 149], [151, 149]], '西', 0.9805448761688105)([[569, 71], [635, 71], [635, 131], [569, 131]], '东', 0.9985224701960114)([[217, 91], [534, 91], [534, 194], [217, 194]], '诗和远方路', 0.8750403596327564)([[137, 217], [177, 217], [177, 257], [137, 257]], 'W', 0.7520859053705777)([[209, 217], [523, 217], [523, 257], [209, 257]], 'Poetry And The Places Afar Rd。', 0.3012721541954036)([[571, 207], [611, 207], [611, 251], [571, 251]], 'C', 0.15253169048338933)

第3种方法是在readtext()中传入读出的原始字节内容,注意图片文件是以rb方式读出:

#juzicode.com / vx:桔子codeimport easyocrreader = easyocr.Reader(['ch_sim','en'])with open('road-poetry.png','rb') as pf:img = pf.read()result = reader.readtext(img)for res in result:print(res)

运行结果:

([[151, 101], [195, 101], [195, 149], [151, 149]], '西', 0.673960519698312)([[569, 71], [635, 71], [635, 131], [569, 131]], '东', 0.9128537192685862)([[218, 92], [535, 92], [535, 191], [218, 191]], '诗和远方路', 0.7941057755221305)([[137, 217], [177, 217], [177, 257], [137, 257]], 'W', 0.7182424534268108)([[209, 217], [525, 217], [525, 257], [209, 257]], 'Poetry And The Places Afar Rd。', 0.5591090091224509)([[571, 207], [611, 207], [611, 251], [571, 251]], 'C', 0.1532075452826911)

可试用产品

开源地址

关注公众号 回复 20240501 获得


作者简介:

张锋,微服务架构实战原创作者,拥有超过10年的软件开发和架构设计经验。他是一位热衷于探索新技术和模式的软件工程师,对微服务架构、容器技术、自动化部署等领域有深入研究。在职业生涯中,他曾任职于多家知名企业,担任过技术团队负责人,带领团队实现了一系列高并发、高可用的微服务架构项目。 

张锋老师在微服务架构领域有着丰富的实践经验,他的作品《微服务架构实战》深入浅出地介绍了微服务架构的设计理念、技术栈选择、项目实践等关键环节,广受读者好评。此外,他还活跃在技术社区,分享自己的见解和心得,助力更多开发者掌握微服务架构的精髓。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询