Paddle笔记:PaddleOCR文字识别,简单实用,默认训练模型识别度不错

您所在的位置:网站首页 paddle开源模型 Paddle笔记:PaddleOCR文字识别,简单实用,默认训练模型识别度不错

Paddle笔记:PaddleOCR文字识别,简单实用,默认训练模型识别度不错

2023-09-16 10:07| 来源: 网络整理| 查看: 265

导读

        PaddleOCR是百度深度学习框架PaddlePaddle开源的OCR项目,旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。PaddleOCR包含丰富的文本检测、文本识别以及端到端算法。

        你可能用到的网址:

Paddle官网:飞桨PaddlePaddle-源于产业实践的开源深度学习平台 正文

        PaddleOCR特性:

超轻量级中文OCR模型,总模型仅8.6M单模型支持中英文数字组合识别、竖排文本识别、长文本识别检测模型DB(4.1M)+识别模型CRNN(4.5M)实用通用中文OCR模型多种预测推理部署方案,包括服务部署和端侧部署多种文本检测训练算法,EAST、DB、SAST多种文本识别训练算法,Rosetta、CRNN、STAR-Net、RARE、SRN可运行于Linux、Windows、MacOS等多种系统 一、前期准备 1. 依赖库安装

        我用的是在 Pycharm 内自动安装,版本默认了当前最高,方便高效。

PaddlePaddle:基础环境,PaddleOCR需在PaddlePaddle下才可以正常运行;PaddleOCR:图片识别的插件;

 2. 训练模型下载

        PaddleOCR提供的可下载模型包括推理模型、训练模型、预训练模型、slim模型,下载地址如下(官网入口):

        我使用的是【PP-OCRv3】模型,下载到本地之后分别进行解压,创建一个models文件夹,把下载好的模型文件解压到该models文件夹中,并将models文件夹放入到PaddleOCR根目录下,如下所示:

3. 文字模板下载

        文字模板不是必须的,在 draw_ocr() 方法中使用文字模板是为了提高图片的文字识别率。

        因为是识别网络字体,所以我使用的是【SIMSUN.TTC】文字模板。SIMSUN.TTC 是一款很常见、实用的电脑字体,需要的小伙伴,百度【SIMSUN.TTC】就可以找到下载链接。

二、项目实践

        读取图片需要用到 OpenCV 的技术,然后利用 PaddleOCR 进行图片的文字识别,识别过程中可以自定义训练模型和文字模板,这会影响最终文字的识别率。

1. 图片准备

        就用篇头展示的图片吧,这是京东商城某商品的介绍图。

2. 代码展示 # _*_coding:utf-8_*_ # 作者: Java Punk # 时间: 2022-10-09 14:49:45 # 功能: 图片文字识别 import cv2 from math import * import numpy as np from PIL import Image from paddleocr import PaddleOCR, draw_ocr def img_match(img_address): # Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换 # 例如:`ch`, `en`, `fr`, `german`, `korean`, `japan` # 这里 use_angle_cls=False 为不使用自定义训练集 ocr = PaddleOCR(use_angle_cls=False, lang="ch", use_gpu=False) # use_angle_cls=True使用训练模型,模型放在models目录下 # ocr = PaddleOCR(use_angle_cls=True,lang="ch", # rec_model_dir='../models/ch_PP-OCRv3_rec_slim_infer/', # cls_model_dir='../models/ch_ppocr_mobile_v2.0_cls_slim_infer/', # det_model_dir='../models/ch_PP-OCRv3_det_slim_infer/') src_img = cv2.imread(img_address) h, w = src_img.shape[:2] big = int(sqrt(h * h + w * w)) big_img = np.empty((big, big, src_img.ndim), np.uint8) yoff = round((big - h) / 2) xoff = round((big - w) / 2) big_img[yoff:yoff + h, xoff:xoff + w] = src_img # 文字识别 matRotate = cv2.getRotationMatrix2D((big * 0.5, big * 0.5), 0, 1) dst = cv2.warpAffine(big_img, matRotate, (big, big)) result = ocr.ocr(dst, cls=True) boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] # simsun.ttc 是一款很常见、实用的电脑字体,这里作为识别的模板 # 我们利用该模板进行文字识别 im_show = draw_ocr(dst, boxes, txts, scores, font_path='../fonts/SIMSUN.TTC') im_show = Image.fromarray(im_show) img = np.asarray(im_show) # 展示结果 cv2.imshow('img', img) cv2.waitKey(0) # 图片识别结果保存在代码同目录下 # im_show.save('result.jpg') # 关闭页面 cv2.destroyAllWindows() pass if __name__ == '__main__': print("———————————————————— start ————————————————————\n") # 图片路径自己设置,下面是我本地的路径,记得替换!!! img_match('../img/jd/goods_02.png') print("———————————————————— end ————————————————————\n") 3. 效果展示

        最终识别率还不错。

        大家可以自行练习不使用 lang="ch",训练模型和文字模板,或者只使用其中的几个看看效果怎样。

        结论可以先告诉大家:文字的识别率会有不一样,当识别率低的时候,个别文字会被识别错误。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3