C# Winform调用百度接口实现身份证文字识别教程完整版!!!(源码)

C# Winform调用百度接口实现身份证文字识别教程源码完整版

这是一篇完整的身份证文字识别系统,源码已经附上,按照我的步骤,可以实现人脸识别登录呦!!!当然,前提是你有耐心看完!

百度是个好东西,这篇调用了百度的接口(当然大牛也可以自己写),身份证文字识别检测技术,所以使用的前提是有网的情况下。当然大家也可以去参考百度的文档。
在这里插入图片描述
在这里插入图片描述

第一步,在百度创建你的文字识别应用

打开百度AI开放平台链接: 点击跳转百度人脸检测链接,创建新应用
在这里插入图片描述
创建成功成功之后。进行第二步

第二步,使用API Key和Secret Key,获取 AssetToken

平台会分配给你相关凭证,拿到API Key和Secret Key,获取 AssetToken
在这里插入图片描述

第三步,绘制videoSourcePlayer控件,对身份证进行拍摄

现在我们是没有这个控件的,所以我们要先导包,点击我们的工具选项卡,选择NuGet包管理器,管理解决方案的NuGet程序包,安装一下的包:
在这里插入图片描述
然后我们就能看到videoSourcePlayer控件,把它绘制在窗体上就好了。

在这里插入图片描述

第四步,绘制窗体

在这里插入图片描述
这里提供了两种方式,一种是本地打开图片识别,另一种是直接拍照识别,
而且还加了三个选项:
是否检测图像旋转角度,检测身份证正反和是否开启身份证风险类型

第五步,写对应的事件代码

首先定义API_KEY和SECRET_KEY,以及变量

 string API_KEY = "0SopoPdo456Bpq8SKlr5GdEL";
 string SECRET_KEY = "yyAgv0K4OCEC20o26Cd9Fr7qPoKUG6Wt";
 Baidu.Aip.Ocr.Ocr client = null;
 private FilterInfoCollection videoDevices;
 private VideoCaptureDevice videoDevice;

窗体Load加载事件:

private void FrmWordsDemo_Load(object sender, EventArgs e)
  {
      cbjiaodu.Text = "true";
      cbzhengfan.Text = "front";
      cbfengxian.Text = "true";
      client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);
      client.Timeout = 60000;  // 修改超时时间
      //获取摄像头
      videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
      //实例化摄像头
      videoDevice = new VideoCaptureDevice(videoDevices[0].MonikerString);
      //将摄像头视频播放在控件中
      videoSourcePlayer1.VideoSource = videoDevice;
      //开启摄像头
      videoSourcePlayer1.Start();
  }

打开文件并识别的click事件:

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog openDlg = new OpenFileDialog();
    openDlg.Filter = "图片文件(*.png;*.jpg;*.bmp;*.jpeg)|*.png;*.jpg;*.bmp;*.jpeg";
    if (openDlg.ShowDialog() == DialogResult.OK)
    {
        string path = openDlg.FileName;
        textBox1.Text = path;
        pictureBox1.Image = Image.FromFile(path);
        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        IdcardDemo(path);
    }
}

拍照的click事件:

private void button2_Click(object sender, EventArgs e)
 {
     //拍照 
     Bitmap img = videoSourcePlayer1.GetCurrentVideoFrame();

     //保存文件
     string path = Application.StartupPath + "\\image";//根目录下的image文件夹
     if (Directory.Exists(path) == false)
     {//判断目录是否存在
         Directory.CreateDirectory(path);
     }
     string fileName = "img" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";//给照片文件命名
     img.Save(path + "\\" + fileName);//保存照片文件,其中image是摄像头拍照出来的图片.
                                      //关闭摄像头
     videoSourcePlayer1.Stop();

     textBox1.Text = path + "\\" + fileName;
     pictureBox1.Image = Image.FromFile(path + "\\" + fileName,false);
     pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

     IdcardDemo(path + "\\" + fileName);
 }

定义方法识别身份证,解析json字符串:

public string IdcardDemo(string filename)
{
    bool cardjiaodu = cbjiaodu.Text == "true" ? true : false;
    string cardzhengfan = cbzhengfan.Text == "front" ? "front" : "back";
    bool cardfengxian = cbfengxian.Text == "true" ? true : false;
    var image = File.ReadAllBytes(filename);
    var idCardSide = cardzhengfan;

    // 调用身份证识别,可能会抛出网络等异常,请使用try/catch捕获
    var result = client.Idcard(image, idCardSide);
    Console.WriteLine(result);
    // 如果有可选参数
    var options = new Dictionary<string, object>{
        {"detect_direction", cardjiaodu.ToString()},
        {"detect_risk", cardfengxian.ToString()},
          {"id_card_side",cardzhengfan.ToString() }
        };
    // 带参数调用身份证识别
    result = client.Idcard(image, idCardSide, options);
    string name = result["words_result"]["姓名"]["words"].ToString();
    string birth = result["words_result"]["出生"]["words"].ToString();
    string address = result["words_result"]["住址"]["words"].ToString();
    string ID = result["words_result"]["公民身份号码"]["words"].ToString();
    string sex = result["words_result"]["性别"]["words"].ToString();
    string mz = result["words_result"]["民族"]["words"].ToString();
    WordsDemo ws = new WordsDemo();
    ws.Classname = name;
    ws.Classbirth = birth;
    ws.ClassID = ID;
    ws.Classsex = sex;
    ws.Classmz = mz;
    //ReturnJsonForCard rb = JsonConvert.DeserializeObject<ReturnJsonForCard>(result.ToString());
    DialogResult dialog=MessageBox.Show("识别成功","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    if (dialog==DialogResult.OK)
    {
        sk.TXBname.Text = ws.Classname;
        sk.CBOidtype.Text = "居民身份证";
        sk.TXBidnumber.Text = ws.ClassID;
        sk.CBOsex.Text = ws.Classsex;

        this.Close();
    }
    return name;
}

关闭窗体时要关闭videoSourcePlayer

private void FrmWordsDemo_FormClosing(object sender, FormClosingEventArgs e)
{
     videoSourcePlayer1.Stop();
}

第六步,完工了,测试一下

在这里插入图片描述
识别结果在这里插入图片描述

查看监控报表

在这里插入图片描述

到此就结束啦,快去练习一下吧!欢迎大佬和小Monkey沟通。
在这里插入图片描述

感谢大佬指正 小Monkey
如果你觉得有用的话,就留个赞吧!蟹蟹

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猴麦麦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值