OCR智能识别身份信息
本人研究了两款OCR智能识别的API,下面做详解!
第一款是百度云的OCR识别,填写配置信息,每天有五百次免费的识别次数,适合中小型客户流量可以使用。API文档:http://ai.baidu.com/docs#/OCR-API/top
public static String Token = ""; // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
private static String clientId = SysConfigManager.Get("bdy_config", "api_key");//"**********"; // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
private static String clientSecret = SysConfigManager.Get("bdy_config", "Secret_Key");//"***********"; /// <summary>
/// 获取百度云 access_token
/// </summary>
/// <returns></returns>
public static string GetbaiduAccessToken()
{
Token = Convert.ToString(HiCache.Get("access_token"));
if (string.IsNullOrEmpty(Token))
{
String authHost = "https://aip.baidubce.com/oauth/2.0/token";
HttpClient client = new HttpClient();
List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret)); HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
String result = response.Content.ReadAsStringAsync().Result; JObject ResObj = JsonHelper.DeserializeJsonToObject<JObject>(result);
if (string.IsNullOrEmpty(Convert.ToString(ResObj.GetValue("access_token"))))
{
Globals.Debuglog("---获取身份验证access_token失败:" + result, "_IdentifyCard.txt");
return Token;
}
HiCache.Insert("access_token", ResObj.GetValue("access_token"), ); //access_toke 时效30天,需设置缓存重新获取
Token = ResObj.GetValue("access_token").ToString();
}
return Token;
} /// <summary>
/// 根据access_token获取身份证信息
/// </summary>
/// <param name="path"></param>
/// <param name="cardside">身份证正反面(front-正面,back-反面)</param>
/// <param name="IsDelFile">是否删除图片</param>
/// <returns></returns>
public static string idcard(string path,string cardside,bool IsDelFile, out string outError)
{
outError = string.Empty;
string token = GetbaiduAccessToken();
if (!string.IsNullOrEmpty(token))
{
try
{
string ext = Path.GetExtension(path).ToLower(); ;
if (!ext.Equals(".jpg") && !ext.Equals(".png") && !ext.Equals(".bmp"))
{
outError = "识别的图片仅支持(jpg、png、bmp)格式";
return "";
}
string strbaser64 = Convert.ToBase64String(System.IO.File.ReadAllBytes(path));
string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token=" + token;
Encoding encoding = Encoding.Default;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
request.Method = "post";
request.ContentType = "application/x-www-form-urlencoded";
request.KeepAlive = true;
String str = "id_card_side="+ cardside + "&image=" + HttpUtility.UrlEncode(strbaser64);
byte[] buffer = encoding.GetBytes(str);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, , buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string result = reader.ReadToEnd();
string StrResult = Getcardinfo(result, cardside,out outError);
if (IsDelFile)
{
File.Delete(path);
}
return StrResult;
}
catch (Exception)
{
outError = "识别异常!";
File.Delete(path);
}
}
return ""; } /// <summary>
/// 对返回的身份信息进行打包确认
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Getcardinfo(string str,string cardside,out string outError)
{
outError = string.Empty;
JObject Obj = JsonHelper.DeserializeJsonToObject<JObject>(str);
string status = Convert.ToString(Obj.GetValue("image_status"));
string strResult = "";
if (status == "normal")
{
if (cardside == "front")
{
IdentifyInfo info = new IdentifyInfo();
info.Address = Obj["words_result"]["住址"]["words"].ToString();
info.DataBirth = Obj["words_result"]["出生"]["words"].ToString();
info.UserName = Obj["words_result"]["姓名"]["words"].ToString();
info.IdCard = Obj["words_result"]["公民身份号码"]["words"].ToString();
info.Sex = Obj["words_result"]["性别"]["words"].ToString();
info.FamousFamily = Obj["words_result"]["民族"]["words"].ToString();
strResult = JsonHelper.SerializeObject(info);
}
else
{ strResult = str; }
}
else
{
switch (status)
{
case "reversed_side":outError = "未摆正身份证!";break;
case "non_idcard": outError = "上传的图片不是身份证!"; break;
case "blurred": outError = "身份证模糊!"; break;
case "over_exposure": outError = "身份证关键字段反光或过曝!"; break;
default: outError = cardside == "front" ? "请正确上传身份证正面!": "请正确上传身份证背面!"; break;
}
}
return strResult;
}
/// <summary>
/// 创建临时地址文件
/// </summary>
/// <returns></returns>
private static string GetPath()
{
string path = "";
try
{
path = HttpContext.Current.Request.MapPath("~/Identify");
}
catch (Exception e)
{
path = Utils.ApplicationPath + "/Identify";
} if (!FileHelper.FileExists(path))
{
Directory.CreateDirectory(path);
}
path += "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + CommonHelper.RandomNum();
//if (!FileHelper.FileExists(path))
//{
// Directory.CreateDirectory(path);
//}
return path;
}
[Serializable]
public class IdentifyInfo
{
public string Address { get; set; } public string DataBirth { get; set; } public string UserName { get; set; } public string IdCard { get; set; } public string Sex { get; set; } //名族
public string FamousFamily { get; set; } }
第二款是祥云科技的OCR云服务平台,这里的识别更精确一点,但是消费有点贵。API文档:http://www.netocr.com/developers.do?id=4
/// <summary>
/// 上传图片到翔云进行身份证识别
/// </summary>
/// <param name="filePath">要上传的文件路径</param>
/// <returns></returns>
public string PostIdCardDataToXiangYun(string filePath)
{
string url = "http://netocr.com/api/recog.do";
System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();
httpClient.MaxResponseContentBufferSize = ;
httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36");
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
System.Net.Http.MultipartFormDataContent content = new System.Net.Http.MultipartFormDataContent();
//增加文件数据
content.Add(new System.Net.Http.StreamContent(fileStream), "file", "idcard.jpg");
//增加参数
content.Add(new StringContent("key************"), "key");
content.Add(new StringContent("secret**********"), "secret");
//二代身份证正面识别
content.Add(new StringContent(CardStatus.TwoIdentityCardsFront.ToString()), "typeId");
content.Add(new StringContent("json"), "format");
System.Net.Http.HttpResponseMessage response = httpClient.PostAsync(new Uri(url), content).Result;
string result = response.Content.ReadAsStringAsync().Result;
fileStream.Close();
return result;
}
OCR智能识别身份信息的更多相关文章
- 身份证识别OCR,开启视频模式扫一扫即可识别身份证信息
文章摘要:身份证识别等证件识别OCR技术在各个行业得到广泛应用,例如:车险移动查勘会用到身份证识别.行驶证识别.车架号识别: 寿险移动展业会用到名片识别.银行卡识别:电信实名制代理网点采集身份证信息会 ...
- Selenium+Tesseract-OCR智能识别验证码爬取网页数据
1.项目需求描述 通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的动态识别,将获取到的数据存到数据库. 2.整体思路 1.通过Selenium技术,无窗口模式打开浏览器 ...
- OCR文字识别帮助录入文字信息
OCR文字识别是指将图片.照片上的文字内容,直接转换为可编辑文本的过程.目前各行各业不断地应用文字识别产品,解决文字录入工作的烦恼,提高工作效率. OCR文字识别用在哪里? 一个做社区工作的朋友透露, ...
- 刚破了潘金莲的身份信息(图片文字识别),win7、win10实测可用(免费下载)
刚破了潘金莲的身份信息(图片文字识别),win7.win10实测可用 效果如下: 证照,车牌.身份证.名片.营业执照 等图片文字均可识别 电脑版 本人出品 大小1.3MB 下载地址:https://p ...
- 云+社区分享——腾讯云OCR文字识别
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云+社区运营团队发布在腾讯云+社区 前言 2018年3月27日腾讯云云+社区联合腾讯云智能图像团队共同在客户群举办了腾讯云OCR文字识 ...
- 如何精准实现OCR文字识别?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云计算基础发表于云+社区专栏 前言 2018年3月27日腾讯云云+社区联合腾讯云智能图像团队共同在客户群举办了腾讯云OCR文字识别-- ...
- 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖
在上一年中,Excel催化剂已经送上一波人工智能系列功能,鉴于部分高端用户的需求,再次给予实现了复杂的图像OCR识别,包含几乎所有日常场景,让公司个人手头的图像非结构化数据瞬间变为可进行结构化处理分析 ...
- 超强OCR文字识别软件首选ABBYY FineReader
提到纸质文档—转换—文本格式—可编辑这些字眼,相信大家的第一反映都是OCR文字识别软件,如何排除错误或利用辅助信息提高识别正确率,是OCR最重要的课题,衡量一个OCR系统性能好坏的主要指标无非是精确度 ...
- Android Study 玩转百度ocr身份证识别不是梦~
前言 Today,由于昨晚喝蒙了,今天晕乎乎的为大家带来如何快速集入ocr身份证识别. 关于ocr的前世今生这里不做过多的说明,百度一抓一大把. 前期准备 百度AI开放平台ocr地址: https:/ ...
随机推荐
- OJ题:将一个数倒置输出
题目描述: 输入一个数,假如num = 12345 , 输出 54321,以此类推. 代码实现: ) ; }
- android异步任务asyntask详解
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十一)
机器人发射子弹已经完成了,下面看看怎么给玩家设置障碍. 大家从上篇的图可以看到,在机器和篮筐直接有若干障碍物.我们先看如何实现它们. 打开SpriteBuilder,在Sprites文件夹中新建Sma ...
- spring mvc接收List集合、JUI传JSP List
JUI页面是这样的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <div class=&quo ...
- 【Android】自定义ListView的Adapter报空指针异常解决方法
刚刚使用ViewHolder的方法拉取ListView的数据,但是总会报异常.仔细查看代码,都正确. 后来打开adapter类,发现getView的返回值为null. 即return null. 将n ...
- 大多数时候是软件的Bug,但是... 有时候的确是硬件的问题!
在我们性能最好的服务器中,有一台是从之前的64位测试项目中遗留下来的.那台机器配有皓龙250双核处理器,内存有8 GB.服役了一年之后,那种配置仍然是相当不错的.它还有贴心的升级方案可选:它的泰安Th ...
- 《java入门第一季》之ArrayList集合小案例
案例一:去除集合里面的重复元素 package cn.itcast_04; import java.util.ArrayList; /* * ArrayList去除集合中字符串的重复值(字符串的内容相 ...
- MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法
MySQL错误"Specified key was too long; max key length is 1000 bytes"的解决办法 经过查询才知道,是Mysql的字段设置 ...
- (二十四)监听键盘的通知和键盘弹出隐藏的View移动
让控制器监听键盘的通知,注意谁监听,谁的dealloc方法中就要remove,如果非ARC还要调用父类的dealloc方法. //监听键盘的操作: [[NSNotificationCenter def ...
- SpartanBrowser产品和安全特性简介
v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...