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:/ ...
随机推荐
- Linux的启动流程(一)
· 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息 ...
- Cracking the Coding Interview:: 寻找有环链表的环路起始节点
给定一个有环链表,实现一个算法返回环路的开头节点. 这个问题是由经典面试题-检测链表是否存在环路演变而来.这个问题也是编程之美的判断两个链表是否相交的扩展问题. 首先回顾一下编程之美的问题. 由于如果 ...
- 【IOS 开发】Object-C 入门 Xcode 环境详解
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 工程创建 1. ...
- Java接口interface
Java接口interface 1.多个无关的类可以实现同一个接口. 2.一个类可以实现多个无关的接口. 3.与继承关系类似,接口与实现类之间存在多态性. 接口(interface)是抽象方法和常量值 ...
- Android移动后端服务(BAAS)快速搭建后台服务器之Bmob-android学习之旅(75)
个人移动开发者的最头疼的问题,就是App的网络后台,包含数据库等,国外目前有比较成熟的解决方案,但是限制于墙的问题,推荐国内的解决方案,比较出名的是Bmob和AVOS cloud和Atom等,这一次我 ...
- UIView、UIViewLayout UI_01
1.首先:在UI里面我们使用的是MRC,需要把ARC改成NO: 若学习比较吃力,可以先学习一下基础: http://blog.sina.com.cn/s/blog_814ecfa90102vuzg.h ...
- 【一天一道LeetCode】#43. Multiply Strings
一天一道LeetCode系列 (一)题目 Given two numbers represented as strings, return multiplication of the numbers ...
- SpriteBuilder使用Shader Effect的另一种方法
记住你并不是必须要使用Effect节点去给一个特定的精灵应用效果. 你只要选择一个精灵然后切换至项目属性窗口(Item Properties tab),找到effects用户接口在CCSprite属性 ...
- lvs与haproxy
最近一直在看一些高可用性的负载均衡方案,当然那些f5之类的硬件设备是玩不起也接触不到了.只能看这些for free的开源方案. 目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实 ...
- RHEL6.4上升级python从2.6.6到2.7.3
RHEL6.4上升级python从2.6.6到2.7.3 原始安装好的redhat6.4上的python版本是2.6.6,不能满足实际需要.升级的方法很多,从源码升级或者从rpm包升级.其中从rpm包 ...