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

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

    推荐阅读
  • 012期黄金分析(金价重34)

    价格方面,受国际金价影响,本月以来,各品牌的足金产品纷纷上调价格。以六福珠宝为例,4月2日的足金价格为473元/克,4月8日、4月21日分别上涨至476元/克、485元/克。2013年后,黄金价格大幅下跌,一些投资者黯然离场。部分投资者认为,黄金已触底反弹,后市将开启新一轮持续上涨的大幕。蔡云雯说,唯一变数是地缘政治是否会严重恶化。假如爆发战争,那么黄金可能将报复性飞涨。

  • 好看的现言虐心小说推荐(4本虐到撕心裂肺的言情小说)

    4本虐到撕心裂肺的言情小说大家好,我是小马哥,每天小编推荐的小说都是精心为你们挑选的,高人气高质量,希望你们喜欢,今天推荐虐心小说,一起来看看四本虐到撕心裂肺的言情小说,《心坟》上榜,经典虐心之作1,书名:《心坟》作者:蛋蛋1。

  • 膝盖痛自愈方法(膝关节炎怎么治疗)

    根据膝关节炎的患者自身情况和骨关节炎严重程度而定,对于早期的膝关节炎患者可以选择进行保守治疗。患病急性期一定要多注意休息,活动太多或者太劳累都会加重症状。如果膝关节出现更严重的疼痛、关节变形,若影响正常功能和生活的,条件允许的情况下,可以进行全膝关节置换手术治疗。

  • 初二不上学可以去技校吗(学什么专业比较好呢)

    跟着小编一起来看一看吧!初二不上学可以去技校吗初二不上学可以去技校的。初中生正处于学习知识的时期,悟性较高、学习速度较快,并且因为大多数人从小接触电脑,去技校开始学习计算机技术,一定能把这门热门技术学好,毕业之后轻松找到好工作。所以对于没有毕业的初中生来说,去技校学习一门技术是一个不错的选择。现在是一个信息化的时代,IT行业的发展已经势不可挡,所以选择一个合适的专业,能够成就你的完美人生。

  • 低版本微信可以迁移聊天记录吗(PC版微信聊天记录可迁移功能正式到来)

    低版本微信可以迁移聊天记录吗8月初的时候,微信就曾测试过PC版的聊天记录迁移功能,随着微信WindowsPC3.7.6版本的更新发布,该功能正式上线。据悉PC版微信更新后,提示新增支持在电脑与手机之间互相迁移聊天记录,迁移后可在手机或电脑上浏览合并后的聊天记录。当然,PC版微信的聊天记录迁移功能刚刚发布,难免有些小漏洞、小Bug,因此如果您的聊天记录很宝贵,不妨即使迁移完成,原记录也多保存一段时间后再清理。

  • 重度抑郁情绪会发展为抑郁症(为何导致情绪抑郁)

    通过自我心理调节、心理治疗及适当的抗抑郁药治疗,抑郁大多能康复。研究显示,抑郁症患者可有严重的情绪抑郁,而抑郁症有一定的家族血缘倾向。父母中一人患有忧郁症,子女得病概率为25%;若双亲都是忧郁症患者,子女患病率可提高至50%~75%。人的身心弹性甚大,偶尔失眠不会造成明显伤害。需要注意的是,睡眠前应尽量避免剧烈运动。

  • 五年级人教版上册语文生字词练习(北师版小学语文)

    (8分)项羽勾践祖逖诸葛亮曹植廉颇赵高赵括卧薪尝胆()破釜沉舟()草船借箭()指鹿为马()纸上谈兵()负荆请罪()煮豆燃萁()闻鸡起舞()六、按要求写成语。________________________________3.写带有动物名称的成语。(10分)1.气象台()地发布了()的消息。8.成吉思汗()地摘下弯弓,向老鹰射击。

  • 兔和什么生肖最配(属兔的和什么属相最合适)

    下面更多详细答案一起来看看吧!兔和什么生肖最配属兔的人最配属相是属羊、属狗、属猪,属兔者与此三属相为大吉婚配,婚后功业成就,安居乐业,专利兴家。但是不宜与属龙,属鼠的人婚配,家庭难有幸福,逆境之象,事业不成,霉运之致,历尽痛苦。兔年出生的人举止洒脱、富有气质,高雅温和,对待爱情是极容易感情用事,常经常会因一些事而感动,有依赖性。但通常心思慎密,个性温和体贴别人。天生有语言天赋与容易沟通,受人喜爱。

  • 怀孕后可以吃参类吗(怀孕了能吃参吗)

    怀孕后可以吃参类吗我读研究生的时候,导师一直用党参治疗先兆流产,推荐高丽参食疗给安胎的病人。在适用人群中的描述中,包括体质虚弱、气短喘促,肢体不温、抵抗力差等人群,并没有记载说孕妇禁用。在一些学术论文中,也看到不少介绍红参在治疗先兆流产中的经验。故人参的运用,应该是针对不同的体质,用不同的参类。一般针对孕期的女性,临床多用高丽参、红参、党参。但是,并不足以导致流产、胎儿畸形等问题。

  • 传统节日图片简笔画五一(中国传统节日简笔画图片)

    五一劳动节的简笔画劳动节的简笔画手抄报劳动节手抄报,下面我们就来选几张好看的传统节日图片简笔画五一?传统节日图片简笔画五一五一劳动节的简笔画劳动节的简笔画手抄报劳动节手抄报五一劳动节怎么画好看劳动节儿童画彩色毛毛简笔画幼儿大班五一劳动节简笔画五一劳动节简笔画我帮妈妈做家务五一劳动节致敬医疗医护人员简笔画步骤教程关于五一劳动节简笔画快乐的五一简笔画画一不同的节日给孩子画上可爱的简笔画小图标好看极了