PaddleOCR库的简单使用

  • 一、概述
  • 二、编译与修改
    • 2.1 准备工作
    • 2.2 编译中存在的问题
  • 三、运行与结果
  • 四、完整工程代码及三方库

一、概述

  • 接上一篇文章说到,PaddleOCRv2.0的识别效果很好,因此这里试着搭建一下,看看究竟如何。
  • 本文使用v2.0.0版本进行测试,该版本对应有官方编译好的库。
  • 使用的测试环境为win10,vs2017,x64,Release
  • 使用的库包括PaddleOCR预测库2.0.2(官方给出的编译成功的CPU版本和GPU版本)、OpenCV(我用的是4.5.1,其他版本应该也可以,只做图像的读取使用)
  • 工程的构建可以使用cmake,也可以直接使用vs2017构建工程,然后手动添加库,均可以使用。

二、编译与修改

2.1 准备工作

  • 下载PaddleOCRv2.0的源代码。
  • 下载官方编译成功的三方库PaddleOCR预测库2.0.2。如果电脑有支持NVIDIA的CUDA,那么可以同时下载CPU和GPU版本。下载GPU版本时,注意CUDA和cudnn的版本。同时在解压后注意库文件中的version.txt,里面包含了这个库编译时所有的环境,以及依赖库等。CPU版本不需要特别注意,但是GPU版本需要注意TensorRT的版本。
  • 如果需要使用GPU版本,那么一定确保显卡支持GPU, 同时安装了对应的驱动,CUDA、cudnn,以及TensorRT库。
  • 找到PaddleOCR源代码中的“path\PaddleOCR-release-2.0\deploy\cpp_infer”目录,其中include目录就是所有的头文件,src就是即将使用的源代码(main,cpp就是主函数),tools目录中有config.txt模板。"pathPaddleOCR-release-2.0\ppocr\utils"文件中有字库文件ppocr_keys_v1.txt

2.2 编译中存在的问题

  • 1、用cmake或是直接构建工程这一步就不在多说了,这么简单,谁不会呀。
  • 2、如果是手动构建的工程,需要手动添加对应的头文件和库文件,就是下载的PaddleOCR预测库和编译好的OpenCV。
  • 3、编译过程会出现找不到dirent.h文件,没有关系,可以参考这篇博客,新建一个,然后添加到工程中既可以。文章最后也会给出编译好的工程,供大家测试使用。
  • 4、glog这个库可以不需要,因为我在编译时报错,所以直接注释掉了。
  • 5、VS017中config.cpp中出现字符串分配内存语法错误,可以这样修改:
  char* strs = new char[str.length() + 1];//char strs[str.length() + 1];std::strcpy(strs, str.c_str());char* d = new char[delim.length() + 1];//char d[delim.length() + 1];std::strcpy(d, delim.c_str());
  • 6、VS017中utility.cpp中出现lstat未定义的标识符可以这样修改:
  struct stat s;stat(dir_name, &s);
  • 7、对代码的字符识别结果输出函数进行了简单的修改,将结果保存在txt中。

三、运行与结果

对于CPU版本

  • 首先需要下载对应的模型文件,轻量级或是普通级都可以。解压后放在自己随意指定的目录即可,注意每种模型可以解压出三个文件。
  • 将之前的字库文件ppocr_keys_v1.txt和配置文件config.txt同样可以放在该目录,方便查找。注意修改config.txt中模型文件的路径,以及设置use_gpu 0
  • 在工程属性中的调试选项中设置好命令参数,如:./cfg/config.txt ./imgs
  • 在工程属性中的环境选项中设置好dll的路径,如:path=../3rd_party/paddle_inference_install_cpu/bin;../3rd_party/opencv/bin;分号不要忘记,不然会找不到dll文件。
  • 在识别字符时,如果时使用exe运行乱码,此时可以在执行exe前在终端中输入CHCP 65001,将终端的编码方式由GBK编码(默认)改为UTF-8编码。
  • 如果是通过VS2017控制台输出乱码,试了很多方法,但是这个我目前也没有好的解决方案,只是将结果保存在txt中进行对比。有知道怎么修改的大神可以评论区留言指导一下。
  • 识别结果图片:








  • txt中保存的文字,识别效果还是很好的,只是可能输出的顺序不太一致,不是按照从上到下的顺序,这个需要根据矩形框的位置进行修改。

    对于GPU的程序代码测试:
  • 其实大体上和CPU一致,只是需要一下几点:
  • 1、主要问题在这里有说明:https://github.com/PaddlePaddle/PaddleOCR/issues/2355
  • 2、添加CUDA,cudnn和tensorRT库。
  • 3、设置config.txt中的use_gpu 1use_tensorrt 0(开启这一快好像有问题,官方好像还不支持,但是又必须要这个库)
  • 4、根据自身GPU的显存大小设置gpu_mem 1000(我的GPU为2G,比较小,因此设置为1000)
  • 5、运行结果和上面一致,就不在显示了。

四、完整工程代码及三方库

  • 由于整个工程较大,因此分为库文件和工程两部分都上传
  • 百度下载地址:
    库文件:https://pan.baidu.com/s/1_dUbugY2ymcd3WAB3pkqrQ 提取码:2q5k
    工程文件:https://pan.baidu.com/s/11ZIjIn21Ms-pi1kmOIBwkg 提取码:w1tn
  • CSDN下载地址:
    库文件:
    https://download.csdn.net/download/qq_38589460/21110985?spm=1001.2014.3001.5503
    工程文件:
    https://download.csdn.net/download/qq_38589460/21110975?spm=1001.2014.3001.5503
  • 如要识别视频,可以参考博客:https://blog.csdn.net/zaibeijixing/article/details/114498371

PaddleOCR+OpenCV实现中英文识别相关推荐

  1. Tesseract+OpenCV实现中英文字识别

    Tesseract的简单使用 一.概述 二.OCR中英文识别 三.整个工程代码以及三方库 四.总结 一.概述 Tesseract是比较经典的OCR算法,且能够获得较好的识别效果.既有开源的算法代码可以 ...

  2. PaddleOCR,图像检测识别

    简介 OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程:即,对文本资料 ...

  3. 基于百度飞桨PaddleOCR的图片文字识别

    PaddleOCR项目源码:https://github.com/PaddlePaddle/PaddleOCR 飞桨开源文字识别模型套件PaddleOCR,目标是打造丰富.领先.实用的文本识别模型/工 ...

  4. PaddleOCR百度开源—文字识别OCR windows端口本地部署使用

    目录 更新时间:2022年02月07日 新增: 本地调用OCR 什么是Paddle OCR? Paddle OCR特性: 导言 下载源码 配置环境 安装依赖库 报错处理办法: 下载模型 文本检测模型 ...

  5. 截屏就可以转文字?飞桨带您体验OCR超轻量中英文识别模型

    [飞桨开发者说]陈千鹤,华中科技大学计算机科学与技术学院大一在读 任务背景 目前很多实用小工具都趋向收费模式,即使免费,不是功能不完整,就是有很多约束条件,在应用时效果无法达到我们的预期.于是我萌生一 ...

  6. Github热榜:中英文识别OCR模型,百度开源媲美收费软件!

    近日,百度飞桨正式开源了业界最小的超轻量8.6M中英文识别OCR模型套件PaddleOCR,在模型大小.精度和预测速度上,甚至超过了之前一度登上GitHub热榜的chineseocr_lite(5.1 ...

  7. OpenCV车牌/数字识别

    opencv 数字识别 附完整代码 Opencv的应用之车牌识别       用的支持向量机 使用opencv进行数字识别       对学习还是有点帮助的 Tensorflow 实现 MNIST 手 ...

  8. 使用opencv作物件识别(一) —— 积分直方图加速HOG特征计算

    使用opencv作物件识别(一) -- 积分直方图加速HOG特征计算 博客分类: 图像识别.机器学习.数据挖掘 CC++C#  方向梯度直方图(Histograms of Oriented Gradi ...

  9. 2021-01-07 python opencv实现车牌识别 颜色定位

    python opencv实现车牌识别 颜色定位 主要代码参考https://blog.csdn.net/wzh191920/article/details/79589506 GitHub:https ...

  10. 怎样使用OpenCV进行人脸识别

    不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...

最新文章

  1. git ssh创建分支_Git(2):在gitlab中创建开发用户,以及master分支的安全管理
  2. leetcode--括号生成--python
  3. jQuery DOM
  4. spring里头各种获取ApplicationContext的方法
  5. linux7 ntp log,RH254小结(九)rhel7新的ntp对时服务Chrony
  6. 后端:Spring IOC 知识点总结,写得太好了!
  7. 《C++ Primer》7.5.2节练习
  8. Java IO: 序列化与ObjectInputStream、ObjectOutputStream
  9. 160 - 6 aLoNg3x.1
  10. word 2013 标题设置多级列表
  11. 技术人生第5篇——浅谈如何成为技术一号位?
  12. 如何制作家庭网络服务器,如何用一个废旧的笔记本打造一个家庭网络服务器?...
  13. 推荐收藏 | 100个数据分析常用指标和术语
  14. 【量化】通过Fama-French三因子模型选股,收益能达到多少?
  15. IDEA配置SpringBoot项目热部署
  16. extjs 数字校园-云资源平台 2013.10.28--网盘
  17. 计算机8个应用软件,8个职场人必装的电脑软件,用过以后就离不开了,超级高效好用!...
  18. PAT甲级 1122 哈密顿回路
  19. 基于Rust的Web开发,actix的基本使用
  20. 理一理 OC/OD 门、开漏输出、推挽输出等一些相关概念

热门文章

  1. 高级计量经济学及Stata应用 第2版 陈强+stata十八讲+应用STATA做统计分析
  2. 音乐播放器 - iOS开发
  3. 企业微信的裂变拉新——红包裂变
  4. Elasticsearch5.6搭建及拼音中文混合搜索实现
  5. 针对浏览器主页被360或hao123锁定的解决方法
  6. C#程序设计与应用课程教学总结:自评与改进
  7. html布局flex有什么优势,css flex布局的优缺点是什么
  8. foxpro导入 mysql_Foxpro DBF数据库转换成SQL Server 6.5表的几种方法
  9. 读史可以使人明智,鉴以往可以知未来
  10. 爬虫技术:scrapy 知识点一