肥宅钓鱼网
当前位置: 首页 钓鱼百科

c类开发工具有哪些(代码修改并封装的.NET的工具类库)

时间:2023-07-27 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

本期推荐的是基于PaddleOCR的C代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能,同时针对小图识别不准的情况下,做了优化,提高识别准确率。同时支持多种文本检测。本项目中PaddleOCR.dll文件是基于开源项目PaddleOCR的C代码修改而成的C动态库,基于opencv的x64编译而成的。Windows环境,目前支持基于VisualStudio2019Community进行编译。进入opencv源码路径下,按照下面的方式进行编译。

《开源精选》是我们分享Github、gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是基于PaddleOCR的C代码修改并封装的.NET的工具类库。

项目介绍

本项目是一个基于PaddleOCR的C代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能,同时针对小图识别不准的情况下,做了优化,提高识别准确率。

包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测。

本项目中PaddleOCR.dll文件是基于开源项目PaddleOCR的C代码修改而成的C动态库,基于opencv的x64编译而成的。

全部调用参数介绍

#region 通用参数/// <summary>/// 是否使用GPU,默认关闭/// </summary>public byte use_gpu { get; set; } = 0;/// <summary>/// GPU id,使用GPU时有效/// </summary>public int gpu_id { get; set; } = 0;/// <summary>/// 申请的GPU内存,使用GPU时有效/// </summary>public int gpu_mem { get; set; } = 4000;/// <summary>/// 使用线程数,默认2/// </summary>public int numThread { get; set; } = 2;/// <summary>/// 启用mkldnn加速,默认开启/// </summary>public byte Enable_mkldnn { get; set; } = 1;#endregion#region 检测模型相关/// <summary>/// 补白边,默认50,暂时没有用/// </summary>public int Padding { get; set; } = 50;/// <summary>/// 输入图像长宽大于960时,等比例缩放图像,使得图像最长边为960/// </summary>public int MaxSideLen { get; set; } = 960;/// <summary>/// DB后处理过滤box的阈值,如果检测存在漏框情况,可酌情减小/// </summary>public float BoxScoreThresh { get; set; } = 0.5f;/// <summary>/// 用于过滤DB预测的二值化图像,设置为0.-0.3对结果影响不明显/// </summary>public float BoxThresh { get; set; } = 0.3f;/// <summary>/// 表示文本框的紧致程度,越小则文本框更靠近文本/// </summary>public float UnClipRatio { get; set; } = 1.6f;/// <summary>/// DoAngle 默认1启用/// </summary>public byte DoAngle { get; set; } = 1;/// <summary>/// MostAngle 默认1启用/// </summary>public byte MostAngle { get; set; } = 1;/// <summary>/// 是否使用多边形框计算bbox score,false表示使用矩形框计算。矩形框计算速度更快,多边形框对弯曲文本区域计算更准确。/// </summary>public byte use_polygon_score { get; set; } = 0;/// <summary>/// 是否对结果进行可视化,为1时,会在当前文件夹下保存文件名为ocr_vis.png的预测结果。/// </summary>public byte visualize { get; set; } = 0;#endregion#region 方向分类器相关/// <summary>/// 启用方向选择器,默认关闭/// </summary>public byte use_angle_cls { get; set; } = 0;/// <summary>/// 方向分类器的得分阈值/// </summary>public float cls_thresh { get; set; } = 0.9f;#endregion

服务器端C预测

准备环境

  • Linux环境,推荐使用docker。
  • Windows环境,目前支持基于Visual Studio 2019 Community进行编译。

编译OPENcv库

  • 首先需要从opencv官网上下载在Linux环境下源码编译的包,以opencv3.4.7为例,下载命令如下。

cd deploy/cpp_inferwget https://paddleocr.bj.bcebos.com/libs/opencv/opencv-3.4.7.tar.gztar -xf opencv-3.4.7.tar.gz

最终可以在当前目录下看到opencv-3.4.7/的文件夹。

  • 编译opencv,设置opencv源码路径(root_path)以及安装路径(install_path)。进入opencv源码路径下,按照下面的方式进行编译。

root_path="your_opencv_root_path"install_path=${root_path}/opencv3build_dir=${root_path}/buildrm -rf ${build_dir}mkdir ${build_dir}cd ${build_dir}CMake .. \-DCMAKE_INSTALL_PREFIX=${install_path} \-DCMAKE_BUILD_TYPE=Release \-DBUILD_SHARED_LIBS=OFF \-DWITH_IPP=OFF \-DBUILD_IPP_IW=OFF \-DWITH_LAPACK=OFF \-DWITH_EIGEN=OFF \-DCMAKE_INSTALL_LIBDIR=lib64 \-DWITH_ZLIB=ON \-DBUILD_ZLIB=ON \-DWITH_JPEG=ON \-DBUILD_JPEG=ON \-DWITH_PNG=ON \-DBUILD_PNG=ON \-DWITH_TIFF=ON \-DBUILD_TIFF=ONmake -jmake install

也可以直接修改tools/build_opencv.sh的内容,然后直接运行下面的命令进行编译。

sh tools/build_opencv.sh

其中root_path为下载的opencv源码路径,install_path为opencv的安装路径,make install完成之后,会在该文件夹下生成opencv头文件和库文件,用于后面的OCR代码编译。

最终在安装路径下的文件结构如下所示。

opencv3/|-- bin|-- include|-- lib|-- lib64|-- share

下载或者编译Paddle预测库

直接下载安装:https://paddle-inference.readthedocs.io/en/latest/user_guides/download_lib.html

  • 下载之后使用下面的方法解压,最终会在当前的文件夹中生成paddle_inference/的子文件夹。

tar -xf paddle_inference.tgz

预测库源码编译

  • 如果希望获取最新预测库特性,可以从Paddle github上克隆最新代码,源码编译预测库。

git clone https://github.com/PaddlePaddle/Paddle.gitgit checkout release/2.2

  • 进入Paddle目录后,编译方法如下。

rm -rf buildmkdir buildcd buildcmake.. \-DWITH_CONTRIB=OFF \-DWITH_MKL=ON \-DWITH_MKLDNN=ON\-DWITH_TESTING=OFF \-DCMAKE_BUILD_TYPE=Release \-DWITH_INFERENCE_API_TEST=OFF \-DON_INFER=ON \-DWITH_PYTHON=ONmake -jmake inference_lib_dist

  • 编译完成之后,可以在build/paddle_inference_install_dir/文件下看到生成了以下文件及文件夹。

build/paddle_inference_install_dir/|-- CMakeCache.txt|-- paddle|-- third_party|-- version.txt

其中paddle就是C预测所需的Paddle库,version.txt中包含当前预测库的版本信息。

开始运行

将模型导出为inference model

inference/|-- det_db||--inference.pdiparams||--inference.pdmodel|-- rec_rcnn||--inference.pdiparams||--inference.pdmodel

编译PaddleOCR C预测demo

  • 编译命令如下,其中Paddle C预测库、opencv等其他依赖库的地址需要换成自己机器上的实际地址。

sh tools/build.sh

  • 具体的,需要修改tools/build.sh中环境路径,相关内容如下:

OPENCV_DIR=your_opencv_dirLIB_DIR=your_paddle_inference_dirCUDA_LIB_DIR=your_cuda_lib_dirCUDNN_LIB_DIR=/your_cudnn_lib_dir

其中,OPENCV_DIR为opencv编译安装的地址;LIB_DIR为下载(paddle_inference文件夹)或者编译生成的Paddle预测库地址(build/paddle_inference_install_dir文件夹);CUDA_LIB_DIR为cuda库文件地址,在docker中为/usr/local/cuda/lib64;CUDNN_LIB_DIR为cudnn库文件地址,在docker中为/usr/lib/x86_64-linux-gnu/。注意:以上路径都写绝对路径,不要写相对路径。

  • 编译完成之后,会在build文件夹下生成一个名为ppocr的可执行文件。
运行demo

运行方式:

./build/ppocr <mode> [--param1] [--param2] [...]

只调用检测:

./build/ppocr det \--det_model_dir=inference/ch_ppocr_mobile_v2.0_det_infer \--image_dir=../../doc/imgs/12.jpg

只调用识别:

./build/ppocr rec \--rec_model_dir=inference/ch_ppocr_mobile_v2.0_rec_infer \--image_dir=../../doc/imgs_words/ch/

调用串联:

# 不使用方向分类器./build/ppocr system \--det_model_dir=inference/ch_ppocr_mobile_v2.0_det_infer \--rec_model_dir=inference/ch_ppocr_mobile_v2.0_rec_infer \--image_dir=../../doc/imgs/12.jpg# 使用方向分类器./build/ppocr system \--det_model_dir=inference/ch_ppocr_mobile_v2.0_det_infer \--use_angle_cls=true \--cls_model_dir=inference/ch_ppocr_mobile_v2.0_cls_infer \--rec_model_dir=inference/ch_ppocr_mobile_v2.0_rec_infer \--image_dir=../../doc/imgs/12.jpg

最终屏幕上会输出检测结果如下:

#.net使用示例

OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";if (ofd.ShowDialog() != DialogResult.OK) return;var imagebyte = File.ReadAllBytes(ofd.FileName);Bitmap bitmap = new Bitmap(new MemoryStream(imagebyte));OCRModelConfig config = null;OCRParameter oCRParameter = newOCRParameter ();//oCRParameter.use_gpu=1;当使用GPU版本的预测库时,该参数打开才有效果OCRResult ocrResult = new OCRResult();using (PaddleOCREngine engine = new PaddleOCREngine(config, oCRParameter)){ocrResult = engine.DetectText(bitmap );}if (ocrResult != null){MessageBox.Show(ocrResult.Text,"识别结果");}

更多内容:https://gitee.com/raoyutian/paddle-ocrsharp

    推荐阅读
  • 珍珠粉美白补水面膜怎么制作(珍珠粉绿豆粉黄豆粉美白去痘面膜)

    珍珠粉美白补水面膜怎么制作用料:绿豆粉2匙,黄豆粉1匙、清水适量。做法:绿豆粉、黄豆粉加清水调成糊状,敷在脸上,15分钟后用清水洗去即可。改善色斑、雀斑及瑕疵,维持皮肤弹力,无刺激去除老化角质,促进细胞再生。绿豆有清热解毒的功效,治疗青春痘效果显著。黄豆对于调理油水不均的状况大有改善,使肌肤柔滑细致。可能促进新陈代谢、乌发等。

  • 私家车几年后一年审四次(私家车存在4个问题)

    汽车越来越普及,我国的汽车保有量已经超过4亿辆,成为最重要的交通工具之一。尾气排放不过关大多数情况下是因为发动机状态影响的,导致排放不过关的因素有多种,比如积碳过多、三元催化器能效下降、零件间隙过大等等。如果想要解决这个问题,需要注意的地方有很多,比如清理节气门、喷油嘴、火花塞等位置的积碳;维修或者更换出现磨损的部件,比如更换三元催化器、火花塞、气缸支臂等等。

  • 曼昆经济学原理简介(曼昆经济学原理是什么呢)

    生活中许多决策,涉及到对现有行动计划进行微小的增量调整,经济学界称这些调整为边际变动。在许多情况下,个人和企业通过考虑边际量,将会作出更好的决策。由于人们通过比较成本与收益作出决策,所以当成本或收益变动时,人们的行为也会改变,这就是说,人们会对激励作出反应。因此,在分析任何一项政策时,不仅应该考虑直接影响,而且还应该考虑激励发生作用的间接影响。

  • 微信如何批量删除好友(如何快速批量删除微信好友)

    以下内容希望对你有帮助!微信如何批量删除好友手机微信打开,点击底部第2个通讯录图标。进入好友界面,仔细观察,点击右上角的三个黑点图标。现在教你1个步骤删除微信好友,能够有效提高删除好友的速度。上下滑动界面,光标放在一个好友上,右击点击删除。这样是不是很快呢?几十个好友一下子就会删除完了。

  • 互相尊重的句子经典(互相尊重的句子如下)

    互相尊重的句子如下尊重是家庭的灵魂,互爱是和谐的支柱每个人都有尊严,我们都应该学会尊重他人,只有在互相尊重之下,才能和睦相处要办好一个企业,固然必须摆平自上而下的利益关系,让处于企业内部各个层次的人,在发挥自己在企业中。

  • 微信是不是从2010年开始有的(微信9年前原来长这个样子)

    好友列表页面点击一个微信好友后,我们就可以直接和他聊天啦。可以看到,最开始微信的聊天页面还是很简陋的,甚至连用户的头像都看不到,发消息时也只能简单的发文字和图片,有没有震惊到!最后就是微信的设置页面了,在这里只能设置名字、邮箱地址、更改头像,和现在相比是不是弱爆了呢?最后问大家一个问题,你还记得当初为什么下载微信吗?

  • 一个人究竟如何找到真正的自我价值(一个人究竟如何找到真正的自我)

    悉达多决定加入沙门的行列。悉达多告诉了父亲,希望得到父亲的允许。父亲气愤地走出房间,悉达多仍然双臂交叉,纹丝不动地站着。破晓前最后一小时,父亲再三确认儿子的打算,悉达多始终坚定。迦摩罗带儿子小悉达多朝觐佛陀的途中,临近渡口时不幸被毒蛇咬伤,船夫闻声赶来。悉达多希望用善意的忍耐赢得孩子的心。但是几个月来,儿子带来的只有对悉达多的折磨。悉达多无法接受忠告。因为儿子的出现,悉达多成了完全的世人。

  • 魔兽世界怀旧服wlk专业攻略(全职业T7套装搭配攻略)

    我是你们的喵叔,很高兴又见面了。虽然如此惨烈,但是如果要拿T7的话,喵叔个人推荐大家入手头部、肩部、胸部以及腿部装备相对性价比较高。所以一般情况下来说,WLK初期还真的很少有猎人会全套T7穿着的,一般的话更多的可能会选择腿和肩膀这两件相对来说性价比比较高。增强萨的T7全部非常优秀,喵叔偷懒下就不给图了,优先凑齐即可哦!T7两件套装效果的虫群伤害提高10%来说还是可以的,毕竟WLK鸟德的输出循环还是需要他的存在,日蚀

  • 手机充电慢耗电快是什么原因(不是原装的充电器会导致充电慢)

    接下来我们就一起去了解一下吧!手机有维修过,电池有进行更换的话,不是原装的电池也会导致充电慢,耗电快的情况。将手机的亮度调低,还有待机时间调整的短一些,这样耗电量也会降低,在手机的设置界面就可以进行操作。电池已经到了使用的寿命,这时会出现电充不进去的情况,可以更换一块新的电池。

  • 陈卓璇个人资料介绍(明星陈卓璇的简介)

    陈卓璇个人资料介绍陈卓璇,1997年8月13日出生于贵州省贵阳市,中国内地流行乐女歌手、影视演员,女子演唱组合超级女团、硬糖少女303成员,就读于上海海事大学外国语学院。2016年,参加芒果TV选秀娱乐节目《超级女声》,获得西安赛区冠军,从而正式进入演艺圈;同年,加入女子演唱组合超级女团,并以组合的形式继续参赛,最终获得全国总决赛第15名。2021年1月,为影视剧《我的小确幸》献唱片头主题曲《风的话》。