C# paddlerocrsharp识别身份证号的实现示例

 更新时间:2024年02月27日 14:49:15   作者:​​​​​​​ 假装我不帅  
paddlerocrsharp可以进行图片识别,本文主要介绍了C# paddlerocrsharp识别身份证号的实现示例,具有一定的参考价值,感兴趣的可以了解一下

paddle-ocrsharp仓库地址: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("保存成功");

到此这篇关于C# paddlerocrsharp识别身份证号的实现示例的文章就介绍到这了,更多相关C# paddlerocrsharp识别身份证号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在WPF中使用Interaction.Triggers

    在WPF中使用Interaction.Triggers

    这篇文章介绍了在WPF中使用Interaction.Triggers的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • NumberToUpper数字转中文详解

    NumberToUpper数字转中文详解

    本文介绍NumberToUpper数字转中文的方法,大家参考使用吧
    2013-12-12
  • C#实现验证码功能

    C#实现验证码功能

    这篇文章主要为大家详细介绍了C#实现验证码功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 通过C#实现发送自定义的html格式邮件

    通过C#实现发送自定义的html格式邮件

    本篇文章主要介绍了通过C#实现发送自定义的html格式邮件,详细的介绍了发送HTML格式邮件的方法,有兴趣的可以了解一下。
    2017-02-02
  • c#中WinForm用OpencvSharp实现ROI区域提取的示例

    c#中WinForm用OpencvSharp实现ROI区域提取的示例

    已经自学OpencvSharp一段时间了,现在就分享一下我的学习过程,本文主要介绍了c#中WinForm用OpencvSharp实现ROI区域提取的示例,具有一定的参考价值,感兴趣的可以了解一下
    2022-05-05
  • C# Dynamic关键字之:dynamic为什么比反射快的详解

    C# Dynamic关键字之:dynamic为什么比反射快的详解

    本篇文章是对C#中dynamic为什么比反射快进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#向数据库中插入或更新null空值与延迟加载lazy

    C#向数据库中插入或更新null空值与延迟加载lazy

    这篇文章介绍了C#向数据库中插入或更新null空值与延迟加载lazy,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C# 注册表 操作实现代码

    C# 注册表 操作实现代码

    Windows 操作系统的注册表包含了很多有关计算机运行的配置方式,打开注册表我们可以看到注册表是按类似于目录的树结构组织的
    2009-07-07
  • c#爬虫爬取京东的商品信息

    c#爬虫爬取京东的商品信息

    这篇文章主要给大家介绍了关于利用c#爬虫爬取京东商品信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们随着小编来一起学习学习吧
    2018-11-11
  • C#文件流进行压缩和解压缩的方法

    C#文件流进行压缩和解压缩的方法

    这篇文章主要介绍了C#文件流进行压缩和解压缩的方法,涉及C#文件流操作的相关技巧,需要的朋友可以参考下
    2015-05-05

最新评论