AI智能
改变未来

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


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

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

目录

  • C# Winform调用百度接口实现身份证文字识别教程源码完整版
  • 第一步,在百度创建你的文字识别应用
  • 第二步,使用API Key和Secret Key,获取 AssetToken
  • 第三步,绘制videoSourcePlayer控件,对身份证进行拍摄
  • 第四步,绘制窗体
  • 第五步,写对应的事件代码
  • 第六步,完工了,测试一下
  • 查看监控报表

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

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

打开百度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
如果你觉得有用的话,就留个赞吧!蟹蟹

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C# Winform调用百度接口实现身份证文字识别教程完整版!!!(源码)