C# paddlerocrsharp识别身份证号

https://gitee.com/raoyutian/paddle-ocrsharp

项目搭建

新建控制台项目
安装paddleocrsharp
在这里插入图片描述
下载训练好的模型
在这里插入图片描述
解压放到对应的文件夹中,都修改为如果较新则复制
在这里插入图片描述
在这里插入图片描述
编写代码OCRHelper.cs

using PaddleOCRSharp;namespace OCRTest02;public class OCRHelper
{/// <summary>/// 初始化OCR引擎/// </summary>/// <returns></returns>public static PaddleOCREngine initOcrEngine(string exePath){//OCR参数OCRParameter oCRParameter = new OCRParameter();oCRParameter.cpu_math_library_num_threads = 6;//预测并发线程数,CPU预测时的线程数,在机器核数充足的情况下,该值越大,预测速度越快;默认10oCRParameter.enable_mkldnn = true;//web部署该值建议设置为0,否则出错,内存如果使用很大,建议该值也设置为0.oCRParameter.cls = true; //是否执行文字方向分类;默认falseoCRParameter.use_angle_cls = true;//是否开启方向检测,用于检测识别180旋转oCRParameter.det_db_score_mode = false;//是否使用多段线,即文字区域是用多段线还是用矩形,oCRParameter.det_db_unclip_ratio = 1.6f;//OCR配置OCRModelConfig config = new OCRModelConfig();string modelPathroot = Path.Join(exePath,"ch_PP-OCRv4");config.det_infer = modelPathroot + @"\ch_PP-OCRv4_det_infer";config.cls_infer = modelPathroot + @"\ch_ppocr_mobile_v2.0_cls_infer";config.rec_infer = modelPathroot + @"\ch_PP-OCRv4_rec_infer";config.keys = modelPathroot + @"\ppocr_keys.txt";//初始化OCR引擎return new PaddleOCREngine(config, oCRParameter);}
}

Program.cs

using OCRTest02;
var exePath = AppDomain.CurrentDomain.BaseDirectory;
var engine = OCRHelper.initOcrEngine(exePath);
Console.WriteLine("初始化成功");
var filePath = "F:\\Desktop\\韦小宝.png";
var imagebyte = File.ReadAllBytes(filePath);
var ocrRes = engine.DetectText(imagebyte);foreach (var textBlock in ocrRes.TextBlocks)
{Console.Write(string.Join(";",textBlock.BoxPoints));Console.Write("\t"+textBlock.Text);Console.Write("\t"+textBlock.Score+"\n");
}

在这里插入图片描述
识别结果的精度还是比较高的但是目前数据比较乱,需要找到身份证号和姓名,下面代码可以识别横着、竖着的身份证信息并且提取出来,斜这的就不太行了,需要做图像校正,可以尝试一下https://github.com/shakex/card-rectification

using System.Text.RegularExpressions;
using OCRTest02;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.Processing;var exePath = AppDomain.CurrentDomain.BaseDirectory;
var engine = OCRHelper.initOcrEngine(exePath);
Console.WriteLine("初始化成功");
var filePath = "F:\\Desktop\\韦小宝.jpg";
var imagebyte = File.ReadAllBytes(filePath);
var ocrRes = engine.DetectText(imagebyte);string name = "";
string id = "";
var sfzImg = Image.Load(filePath);foreach (var textBlock in ocrRes.TextBlocks)
{//Console.WriteLine(textBlock.Text);#region 绘制包围矩形List<PointF> points = new List<PointF>();foreach (var point in textBlock.BoxPoints){points.Add(new PointF(point.X,point.Y));}sfzImg.Mutate(x=>x.DrawPolygon(new SolidPen(Color.HotPink,2.0f),points.ToArray()));#endregionif (string.IsNullOrWhiteSpace(textBlock.Text)){continue;}var tmpText = textBlock.Text.Trim();if (tmpText.Contains("姓名")){tmpText = tmpText.Replace("姓名", "");name = tmpText;}var idMatch = new Regex(@"^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$");if (idMatch.IsMatch(tmpText)){id = tmpText;}
}Console.WriteLine($"姓名:{name},身份证号:{id}");
var now = DateTime.Now;
var resultName = now.ToString("yyyy_MM_dd_HH_mm_ss");
sfzImg.Save($"{resultName}.jpg");
Console.WriteLine("保存成功");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/493978.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang gin单独部署vue3.0前后端分离应用

概述 因为公司最近的项目前端使用vue 3.0&#xff0c;后端api使用golang gin框架。测试通过后&#xff0c;博文记录&#xff0c;用于备忘。 步骤 npm run build&#xff0c;构建出前端项目的dist目录&#xff0c;dist目录的结构具体如下图 将dist目录复制到后端程序同级目录…

Vue-3

自定义指令 全局注册指令 文件路径&#xff1a;src/main.js import Vue from vue import App from ./App.vue Vue.config.productionTip false// 全局注册指令 Vue.directive(myFocus, {// inserted 会在指令所在的元素&#xff0c;被插入到页面中时触发inserted(el) {el.f…

【postgresql】数据表id自增与python sqlachemy结合实例

需求&#xff1a; postgresql实现一个建表语句&#xff0c;表名&#xff1a;student,字段id,name,age&#xff0c; 要求&#xff1a;每次添加一个数据id会自动增加1 在PostgreSQL中&#xff0c;您可以使用SERIAL或BIGSERIAL数据类型来自动生成主键ID。以下是一个创建名为stude…

React PureComponent 和 React.memo()区别

1 注意 ● PureComponent和memo仅作为性能优化的方式存在 ● 不要依赖它来阻止渲染&#xff0c;会产生BUG ● PureComponnet 和memo 都是通过对 props 值的浅比较来决定该组件是否需要更新的。 2 PureComponent 和React.memo() 区别 PureComponent 和React.memo()都是React优化…

MATLAB环境下基于分形理论的图像处理研究

分形理论的提出走出了传统整数维度空间的束缚&#xff0c;对物体的描述更加符合自然事物的复杂性与多样性。传统的维度空间是整数的&#xff0c;人们会将空间认为是三维的&#xff0c;平面认定为是二维的&#xff0c;直线是一维的&#xff0c;点被认为是零维的。而这种维度空间…

“智能语音指令解析“ 基于NLP与语音识别的工单关键信息提取

“智能语音指令解析“ 基于NLP与语音识别的工单关键信息提取 1. 背景介绍1.1 场景痛点1.2 方案选型 2. 准备开发环境3. PaddleSpeech 语音识别快速使用4. PaddleNLP 信息抽取快速使用5. 语音工单信息抽取核心功能实现6. 语音工单信息抽取网页应用6.1 网页前端6.2 网页后端6.3 a…

【软件测试】--功能测试2--常用设计测试用例方法

一、解决穷举场景 重点&#xff1a;使用等价类划分法 1.1 等价类划分法 重点&#xff1a;有效等价和单个无效等价各取1个即可。 步骤&#xff1a;1、明确需求2、确定有效和无效等价3、根据有效和无效造数据编写用例 1.2 案例&#xff08;qq合法验证&#xff09; 需求&#xff…

vulnhub----hackme2-DHCP靶机

文章目录 一&#xff0c;信息收集1.网段探测2.端口扫描3.目录扫描 二&#xff0c;信息分析三&#xff0c;sql注入1.判断SQL注入2.查询显示位3.查询注入点4.查询库5.查询表6.查字段7. 查user表中的值8.登陆superadmin用户 四&#xff0c;漏洞利用文件上传命令执行蚁剑连接 五&am…

适配器模式(Adapter Pattern) C++

上一节&#xff1a;原型模式&#xff08;Prototype Pattern&#xff09; C 文章目录 0.理论1.组件2.类型3.什么时候使用 1.实践1.基础接口和类2.类适配器实现3.对象适配器实现 0.理论 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允…

C++:类与对象(2)

创作不易&#xff0c;感谢三连&#xff01; 一、六大默认成员函数 C为了弥补C语言的不足&#xff0c;设置了6个默认成员函数 二、构造函数 2.1 概念 在我们学习数据结构的时候&#xff0c;我们总是要在使用一个对象前进行初始化&#xff0c;这似乎已经成为了一件无法改变的…

prometheus监控带安全认证的elasticsearch

1.下载elasticsearch_exporter wget 下载二进制包并解压、运行&#xff1a; wget https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v1.3.0/elasticsearch_exporter-1.3.0.linux-amd64.tar.gz tar -xvf elasticsearch_exporter-1.3.0.lin…

理想滤波器、巴特沃斯滤波器、高斯滤波器实现(包含低通与高通,代码实现与分析)

本篇博客聚焦理想滤波器、巴特沃斯滤波器、高斯滤波器进行原理剖析、代码实现和结果总结&#xff0c;代码含有详细注释&#xff0c;希望帮助大家理解。 以下将从理想低通滤波器、理想高通滤波器、巴特沃斯低通滤波器、巴特沃斯高通滤波器、高斯低通滤波器、高斯高通滤波器六个…