本人研究了两款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智能识别身份信息的更多相关文章

  1. 身份证识别OCR,开启视频模式扫一扫即可识别身份证信息

    文章摘要:身份证识别等证件识别OCR技术在各个行业得到广泛应用,例如:车险移动查勘会用到身份证识别.行驶证识别.车架号识别: 寿险移动展业会用到名片识别.银行卡识别:电信实名制代理网点采集身份证信息会 ...

  2. Selenium+Tesseract-OCR智能识别验证码爬取网页数据

    1.项目需求描述 通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的动态识别,将获取到的数据存到数据库. 2.整体思路 1.通过Selenium技术,无窗口模式打开浏览器 ...

  3. OCR文字识别帮助录入文字信息

    OCR文字识别是指将图片.照片上的文字内容,直接转换为可编辑文本的过程.目前各行各业不断地应用文字识别产品,解决文字录入工作的烦恼,提高工作效率. OCR文字识别用在哪里? 一个做社区工作的朋友透露, ...

  4. 刚破了潘金莲的身份信息(图片文字识别),win7、win10实测可用(免费下载)

    刚破了潘金莲的身份信息(图片文字识别),win7.win10实测可用 效果如下: 证照,车牌.身份证.名片.营业执照 等图片文字均可识别 电脑版 本人出品 大小1.3MB 下载地址:https://p ...

  5. 云+社区分享——腾讯云OCR文字识别

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云+社区运营团队发布在腾讯云+社区 前言 2018年3月27日腾讯云云+社区联合腾讯云智能图像团队共同在客户群举办了腾讯云OCR文字识 ...

  6. 如何精准实现OCR文字识别?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云计算基础发表于云+社区专栏 前言 2018年3月27日腾讯云云+社区联合腾讯云智能图像团队共同在客户群举办了腾讯云OCR文字识别-- ...

  7. 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖

    在上一年中,Excel催化剂已经送上一波人工智能系列功能,鉴于部分高端用户的需求,再次给予实现了复杂的图像OCR识别,包含几乎所有日常场景,让公司个人手头的图像非结构化数据瞬间变为可进行结构化处理分析 ...

  8. 超强OCR文字识别软件首选ABBYY FineReader

    提到纸质文档—转换—文本格式—可编辑这些字眼,相信大家的第一反映都是OCR文字识别软件,如何排除错误或利用辅助信息提高识别正确率,是OCR最重要的课题,衡量一个OCR系统性能好坏的主要指标无非是精确度 ...

  9. Android Study 玩转百度ocr身份证识别不是梦~

    前言 Today,由于昨晚喝蒙了,今天晕乎乎的为大家带来如何快速集入ocr身份证识别. 关于ocr的前世今生这里不做过多的说明,百度一抓一大把. 前期准备 百度AI开放平台ocr地址: https:/ ...

随机推荐

  1. List常用整理

            长期更新,主要记录List的各种常用操作整理. 对List进行排序 // Collections.sort(重写toString()进行排序区分) List<ObjectName ...

  2. 纸飞机AE小教程

  3. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十九):增加排行榜功能2

    接下来回到Xcode中,首先在PopupLayer.m中添加justClose方法: -(void)justClose{ [self.gameScene removePopup]; } 然后在Game ...

  4. 小强的HTML5移动开发之路(7)——坦克大战游戏1

    来自:http://blog.csdn.net/dawanganban/article/details/17693145 上一篇中我们介绍了关于Canvas的基础知识,用Canvas绘制各种图形和图片 ...

  5. Python学习笔记 - 迭代器Iterator

    我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的genera ...

  6. 一起来搭简单的App框架

    1.概述 最近在学车,抽着空写了一个常用的App框架,可惜不会制作gif图片,请忽略录屏软件的那个浮动窗口,要是有更好的方式制作gif麻烦告知下提前感谢,效果图如下,凑合着看下吧. 主要实现了 [1] ...

  7. 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计

    这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...

  8. VS2005的数据断点功能

    多年前在VS2005强大的条件断点功能里面讨论过VS2005的条件断点功能. 其实在VS2005里面还有比较好用的(为什么我不用很牛逼呢?因为和OD比起来实在是太简陋了,但是使用上还是比较方便的)内存 ...

  9. Android Studio JNI javah遇到的问题

    好久没写博客了.持之以恒的勋章也被收回了.以后要好好坚持.. 最近在学习jni,但是遇到了一点麻烦的问题.好在终于解决了,便记下来解决一下. 其他入门的jni文章有很多,这里便不在累赘,直接上我遇到的 ...

  10. HDFS读写数据过程

    一.文件的打开 1.1.客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public F ...