C# paddlerocrsharp识别身份证号

news2025/2/27 2:43:37

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预测时的线程数,在机器核数充足的情况下,该值越大,预测速度越快;默认10
        oCRParameter.enable_mkldnn = true;//web部署该值建议设置为0,否则出错,内存如果使用很大,建议该值也设置为0.
        oCRParameter.cls = true; //是否执行文字方向分类;默认false
        oCRParameter.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()));
    #endregion
    
    if (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.coloradmin.cn/o/1473575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot + Vue 母婴商城系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

【iOS ARKit】网络传输 ARWorldMap

ARKit 可以利用 ARWorldMap 在应用中断后进行状态恢复、继续AR 进程。一个用户也可以将ARWorldMap 发送给其他用户&#xff0c;当其他用户接收并加载 ARWorldMap 后&#xff0c;就可以在相同的物理环境看到同样的虚拟元素&#xff0c;达到共享 AR体验的目的。 在ARKit 中&#…

面试redis篇-10Redis集群方案-主从复制

在Redis中提供的集群方案总共有三种: 主从复制哨兵模式分片集群主从复制 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。 主从数据同步原理 Replication Id:简称replid,是数据集的标记,id一致则说明是同一数据集。每…

Python爬虫实战:从API获取数据

引言 在现代软件开发中&#xff0c;API已经成为获取数据的主要方式之一。API允许不同的软件应用程序相互通信&#xff0c;共享数据和功能。在本文中&#xff0c;我们将学习如何使用Python从API获取数据&#xff0c;并探讨其在实际应用中的价值。 目录 引言 二、API基础知识 …

Databend 开源周报第 133 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 了解对开放表格…

【漏洞复现】若依系统后台任意文件读取漏洞

Nx01 产品简介 若依系统&#xff08;RuoYi&#xff09;是一套基于SpringBoot的权限管理系统&#xff0c;核心技术采用Spring、MyBatis、Shiro&#xff0c;众多政府、企业采用它作为某些系统的权限管理后台&#xff0c;使用率较高。 Nx02 漏洞描述 若依系统后台存在任意文件读取…

CV论文--2024.2.27

1、Co-Supervised Learning: Improving Weak-to-Strong Generalization with Hierarchical Mixture of Experts 中文标题&#xff1a;共同监督学习&#xff1a;通过专家的分层混合提高弱到强的泛化能力 简介&#xff1a;本文提出了一种新的方法来解决在互联网规模数据预训练的…

c入门第二十三篇: 学生成绩管理系统优化(支持远程操作)

前言 师弟高兴的说道&#xff1a;“师兄&#xff0c;你猜我今天上课看见谁了&#xff1f;” 我&#xff1a;“谁呢&#xff1f;” 师弟&#xff1a;“程夏&#xff0c;没想到&#xff0c;她竟然来旁听我们计算机系的课程了。虽然我从前门进去的&#xff0c;但是我还是一眼就看…

Rider 2023:打造高效.NET项目的智能IDE,让开发更简单mac/win版

JetBrains Rider 2023激活版下载是一款专为.NET开发者打造的强大集成开发环境&#xff08;IDE&#xff09;。这款IDE提供了丰富的功能&#xff0c;旨在帮助开发者更快速、更高效地编写、调试和测试.NET应用程序。 Rider 2023 软件获取 Rider 2023在保持了其一贯的智能代码补全…

解决若依的分页失效问题

解决若依的分页失效问题 我的迷茫和胆怯也一直都在&#xff0c;但我告诉自己&#xff0c;就算是万丈深渊&#xff0c;走下去&#xff0c;也是前程万里。——木心《素履之往》 首先&#xff0c;我们根据若依的文档来清楚几个问题&#xff1a; 前端采用基于bootstrap的轻量级表格…

亿道丨三防平板丨如何从多方面选择合适的三防加固平板?

在如今这个信息爆炸的时代&#xff0c;移动设备已经成为我们生活和工作的必备工具。然而&#xff0c;在一些特殊的场合中&#xff0c;普通的平板电脑可能无法满足需求&#xff0c;比如工厂车间、野外作业、极端天气等环境下。此时&#xff0c;三防平板就成了不二之选。那么&…

Qt5转Qt6笔记

背景 现在的主程序和扩展的dll库都是qt5环境下编译发布的。但是想以后用qt6。所以考虑是否能够在qt5中兼容qt6的动态链接库进行加载。于是...就开始吧 开始 2024-02-23 安装好qt6后&#xff0c;在vs2019中需要新增qt6版本的安装路径。目录在&#xff1a;扩展->QT VS Tools…

Window系统本地搭建LightPicture网站并实现远程上传下载本地图片

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…

pytorch -- torch.nn网络结构

1. 官网描述 官网 使用 torch.nn 模块&#xff0c;我们可以创建自定义的神经网络模型&#xff0c;并使用 PyTorch 提供的优化器&#xff08;如 torch.optim&#xff09;和损失函数来训练和优化模型。 2. 常见结构 1.卷积操作 定义&#xff1a; 二维卷积 1.1版本 nn.functio…

QT信号槽实现分析

1.宏定义 qt中引入了MOC来反射&#xff0c;编译阶段变成 MOC–>预处理–>编译–>汇编–>链接 1-1、Q_OBJECT 这个宏定义了一系列代码&#xff0c;包括元对象和处理的函数 #define Q_OBJECT \public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \static c…

Unity中URP下实现水体(水面高光)

文章目录 前言一、实现高光反射原理1、原理&#xff1a;2、公式&#xff1a; 二、实现1、定义 _SpecularColor 作为高光反射的颜色2、定义 _SpecularIntensity 作为反射系数&#xff0c;控制高光反射的强度3、定义 _Smoothness 作为高光指数&#xff0c;用于模型高光范围4、模拟…

MySQL进阶篇2-索引的创建和使用以及SQL的性能优化

索引 mkdir mysql tar -xvf mysqlxxxxx.tar -c myql cd mysql rpm -ivh .....rpm yum install openssl-devel ​ systemctl start mysqld ​ gerp temporary password /var/log/mysqld.log ​ mysql -u root -p mysql> show variables like validate_password.% set glob…

vulnhub----hackme2-DHCP靶机

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

JavaWeb个人学习

1:RequestParam(defaultValue "默认的值") 这个可以在一个参数的前面写上 要是前端不传值进来的话 这个形参就是你定义的默认值 2: slf4j 对应的是日志的输出 log.info("参数是 {}", detail); 3: 分页插件 PageHelper 用法: 准备工作: 引入依赖 …

MySQL之Pt-kill工具

工具下载 [rootlocalhost1 bin]# wget percona.com/get/percona-toolkit.tar.gz [rootlocalhost1 bin]# yum install perl-DBI [rootlocalhost1 bin]# yum install perl-DBD-MySQL [rootlocalhost1 bin]# ./pt-kill --help1、每10秒检查一次&#xff0c;发现有 Query 的进程就…