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

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

    推荐阅读
  • 石家庄春节七天景点开放吗(国庆假期石家庄天气是这样的)

    七座及七座以下小型客车高速免费通行时间为10月1日0时至7日24时。这8个主线站正在拆除易拥堵目前河北省部分高速公路的省界主线站正在拆除中,其中,8个主线站目前因施工路段占用行车道及收费广场区域,收费车道不同程度减少,已经出现拥堵缓行情况。服务区可能因流量大迅速饱和,导致车辆积压到高速主路。视客流情况,安排3部公交车由和平医院开通至动物园或抱犊寨直达车;320路再增加5部车。

  • 以太网线缆是什么(以太网线缆标准及传输速率分类)

    同轴电缆目前已基本不使用,主要是双绞线和光纤。IEEE802工作组对100Mbit/s以太网的各种标准进行了研究,并于1995年4月发布了IEEE802.3u快速以太网标准。1998年6月公布的IEEE802.3z和1999年6月公布的IEEE802.3ab已经成为千兆以太网的正式标准。如今,千兆以太网已成为主流的网络技术,无论是大型企业还是中小型企业,在组建网络时都会把千兆以太网作为首选高速网络技术。以太网在应对这些挑战的同时,保持了基本不变的结构和运作方式,并维持着合理的成本。

  • 奥迪q3尾喉改装(奥迪Q3改装kamlung排气管)

    奥迪Q3作为一辆性能优越的城市型SUV,一直深受人们的喜爱。原车的动力以及驾驶的舒适等多个方面都是很不错的。只是原车排气系统因为受到很多原因的限制,无法满足这款汽车应该拥有的性能。改装汽车排气也就变得那么的重要。检查汽车底部隔热层,发现破损需要及时进行更换。安装准备好的汽车排气系统,并对接口处进行密封性处理,确保排气系统的整体性能安装完成后对汽车排气的声浪进行调试,确保排气的声音是自己想要选择的类型。

  • 河南理工大学对比华北理工大学(盘点院校前身河南理工大学)

    河南理工大学对比华北理工大学焦作,古称山阳、怀州,下辖4区,2市,4县,户籍人口达360余万人。1995年,改为焦作工学院,2003年取得博士学位授予权,2004年更名为河南理工大学,2011年河南省与国家安全生产监督管理总局共建河南理工大学,目前为河南省与应急管理部共建院校。拥有3个校区,总面积达4100亩。平煤工程技术学院依托平顶山工业职业技术学院举办,在平顶山市就读。

  • 茶卡盐湖门票优惠政策2022(茶卡盐湖免票政策2021)

    2.高考生2022年6月10日至8月31日,2022届高考学生凭本人高考准考证享受免门票优惠政策。

  • 贾樟柯简介(导演贾樟柯简介)

    贾樟柯简介贾樟柯,1970年5月24日出生于山西省吕梁市汾阳市,中国影视导演、编剧、制片人、演员、作家,上海大学温哥华电影学院院长,毕业于北京电影学院文学系学院。2006年,故事片《三峡好人》获得第一届亚洲电影大奖最佳导演奖,该片获得第63届威尼斯国际电影节金狮奖。2007年,导演纪录片《无用》获得第64届威尼斯国际电影节地平线组最佳纪录片奖。2010年,获得第63届洛迦诺国际电影节终身成就奖。

  • cf8周年戒指怎么获得(Cf8周年戒指什么时候出)

    相信不少玩家还不是很清楚吧,下面小编我来给大家讲讲吧。Cf8周年戒指可以在掌上穿越火线获得,活动是从7号开始的,需要100积分就可以兑换永久戒指啦。8周年戒指属性如下:死神,攻击成功时准星发生变化,在你的攻击成功给敌人造成伤害的时候,准星会发生变化。鹰眼,可标记出攻击自己的玩家,在自己受到伤害时,戒指会给你提示敌人攻击你的位置。

  • 机油经过高温会有什么变化(对机油什么的有影响么)

    而且这考核的变态程度。目前我国境内销售的车型,都在我国境内试验场做测试。吐鲁番试验中心地表温度70~80℃家常便饭前者主要供上汽大众自用,而后者是事业单位,对所有车企开放。吐鲁番试验研究中心也是目前全球占地面积和规模第二大的干热自然环境试验基地。中汽中心呼伦贝尔冬季汽车试验场也在牙克石市,主要是偏向整车寒区适应性试验为主。这是亚洲最大的寒地试车场之一,地处黑河市。

  • 我让自己登基(今天是我登基的日子)

    父皇登基后,后宫只有公主出生却迟迟不见皇子。甚至隐隐有了压过皇后的势头。在我被晏寒打晕后,便连带着将她一起抓了进来。原来当年要登基的其实是晏寒的父亲,而我父皇,和现在的首位大臣们,却一同联合起来,将晏寒父亲构陷致死。是太傅,不,现在应该是摄政王晏寒。而晏寒的目的,已经昭然若揭,无非就是为了让我给他以后顺利上位铺路。晏寒依旧是那副冷淡模样:“我要的不是皇子,是皇女。”

  • 唐山退休取暖补贴标准(唐山退休工人取暖费多少)

    唐山退休取暖补贴标准取暖期内退休职工,在册期间取暖补贴标准为:本单位取暖补贴标准/本地取暖期月数×职工本人取暖期间在册月数。唐山市企业职工冬季取暖补贴标准补贴标准为最低不得低于每人1240元、最高不得超过每人3502元。市属及市属以下各类所有制企业在册职工均享受调整后的冬季取暖补贴,新标准从2012年采暖期开始执行。在标准范围内,企业可结合实际自行制定内部冬季取暖补贴标准及办法。取暖补贴列入企业经营成本。