目前效果较好的OCR文字识别(附代码包)

一、OCR到底选哪个模型?

OCR(Optical Character Recognition,光学字符识别)。目前开源OCR工具种类繁多,不同场景图像的识别效果却参差不齐,这给开发人员的选型工作带来了不小的挑战。

为了尽可能全面测试OCR工具的识别能力,该链接文章测评精心挑选了12款开源OCR工具,评测过程参考原文:评测报告

该链接文章评测开源OCR基本的文字识别能力,包括印刷中文、印刷英文、手写中文等三类基本类型,以及复杂自然场景和变形字体两类附加测评;

这里直接上结论
在这里插入图片描述

二、OCR界扛把子RapidOCR

本文要重点介绍的就是优秀生RapidOCR,以下是基本的使用。文末附源码(包含模型文件)。

2.1 官方简介

💖目前,我们自豪地推出了运行速度最为迅猛、兼容性最为广泛的多平台多语言OCR工具,它完全开源免费,并支持离线环境下的快速部署。其核心亮点在于采用ONNXRuntime作为推理引擎,相比传统的PaddlePaddle推理引擎,速度实现了4至5倍的提升,同时彻底解决了内存泄露问题,确保了高效稳定的运行。

🦜 支持语言概览: 默认支持中文与英文识别,对于其他语言的识别需求,我们提供了便捷的自助转换方案。具体转换指南,请参见这里

🔎 项目缘起: 鉴于PaddleOCR在工程化方面仍有进一步优化的空间,为了简化并加速在各种终端设备上进行OCR推理的过程,我们创新地将PaddleOCR中的模型转换为了高度兼容的ONNX格式,并利用Python、C++、Java、C#等多种编程语言,实现了跨平台的无缝移植,让广大开发者能够轻松上手,高效应用。

🎓 名称寓意: RapidOCR,这一名称蕴含着我们对产品的深刻期待——轻快(操作简便,响应迅速)、好省(资源占用低,成本效益高)并智能(基于深度学习的强大技术,精准高效)。我们专注于发挥人工智能的优势,打造小巧而强大的模型,将速度视为不懈追求,同时确保识别效果的卓越。

三、改进的源码包教程

3.1 源码资源地址点此处下载
3.2 代码说明

rapidocr官方是只实现了核心部分,返回的是图片。实际大部分场景是要发布成api,并且识别出来的结果要可复制可布局。本人改造的项目结构如下:
在这里插入图片描述
其中,common是依赖的一些工具,实现了识别结果转html、接口应对不同类别的图片输入等。我们需要运行web_service/run_web.py文件,即可启动api服务,接口信息如下:

  • 地址:localhost:5001/engine/ocr
  • 入参:threshold、image
  • 响应json:{‘code’: 200, ‘info’: ‘success’, ‘data’: “html字符串”}
  • 直接看run_web.py代码:
# -*- encoding: utf-8 -*-
"""
@File    :   run_service.py
@Description    :   None
@Author    :   一只特立独行的羱
@Contact :   未知
@License :   (C)Copyright 2019-2030,xx

@Modify Time         @Version
------------         --------
2024/11/26 15:36         1.0
"""

import uvicorn
from fastapi import FastAPI, Form, File, UploadFile
from fastapi.middleware.cors import CORSMiddleware
from typing import Union
from rapid_ocr import RapidOCR
from common.tools import get_pil_images_in_anyway, boxes_generate_html

# ocr 引擎
_engine = RapidOCR()

# api对象
app = FastAPI()

# 添加CORS中间件
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有源,也可以指定具体的源
    allow_credentials=True,
    allow_methods=["*"],  # 允许所有方法
    allow_headers=["*"],  # 允许所有头
)


@app.post('/engine/ocr/')
async def engine_ocr(
        threshold: float = Form(default=0.6, description='可选参。识别返回的置信度阈值,默认0.6'),
        image: Union[str, UploadFile] = File(..., description='必要参。待识别的图片,支持二进制格式、base64位图片字符串、http图片地址、服务器资源地址')
        ):

    resp = {'code': 200, 'info': 'success', 'data': ""}
    if image is None:
        resp['code'] = 201
        resp['info'] = '请求参数异常'
    else:
        img = get_pil_images_in_anyway(image)
        try:
            # 识别图片带框位置
            ocr_result = _engine(img, text_score=threshold)
            # 提取框boxes和标记文本
            rectangles = [(i[0], i[1]) for i in ocr_result[0]]

            # 生成HTML
            html = boxes_generate_html(rectangles)
            resp['data'] = html
            # resp['data'] = json.dumps(rs, default=json_serializable, ensure_ascii=False)
            print('response success.')
        except Exception as e:
            print(f"failed response:{repr(e)}")
            resp['code'] = 202
            resp['info'] = repr(e)

    return resp


if __name__ == '__main__':
    uvicorn.run(app, host='0.0.0.0', port=8001, workers=1)
3.3 示例demo页面

当启动了接口服务后,我们可以浏览器打开index.html文件,即可进行简单测试效果。(仅供测试,页面做的很简陋哈)

  • 输入页面:
    啥
  • 识别结果页面:【右边其实就是嵌入的html文件】
    在这里插入图片描述

结语

下载项目改造的源码,一键运行。实现返回html,识别结果的布局和原始图片类似、文字可自由复制。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LensonYuan

蚊子腿也是肉!感谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值