基于PaddleOCR的C++代码修改并封装的.NET的工具类库

基于PaddleOCR的C++代码修改并封装的.NET的工具类库

2022-09-16 0 660
资源编号 38557 最近更新 2022-09-16
¥ 0人民币 升级VIP
立即下载 注意事项
下载不了?请联系网站客服提交链接错误!
增值服务: 安装指导 环境配置 二次开发 模板修改 源码安装

本期推荐的是基于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_infer
wget https://paddleocr.bj.bcebos.com/libs/opencv/opencv-3.4.7.tar.gz
tar -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}/opencv3
build_dir=${root_path}/build

rm -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=ON

make -j
make 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.git
git checkout release/2.2
  • 进入Paddle目录后,编译方法如下。
rm -rf build
mkdir build
cd build

cmake  .. \
    -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=ON
make -j
make 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_dir
LIB_DIR=your_paddle_inference_dir
CUDA_LIB_DIR=your_cuda_lib_dir
CUDNN_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

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

基于PaddleOCR的C++代码修改并封装的.NET的工具类库

#.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 = new  OCRParameter ();
           
           //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,"识别结果");
            }
资源下载此资源为免费资源立即下载

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 免费源码 基于PaddleOCR的C++代码修改并封装的.NET的工具类库 https://www.7claw.com/38557.html

分享免费的开源源码

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、七爪会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、七爪无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在七爪上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于七爪介入快速处理。
查看详情
  • 1、七爪作为第三方中介平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益; 2、非平台线上交易的项目,出现任何后果均与互站无关;无论卖家以何理由要求线下交易的,请联系管理举报。
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务