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:/ ...
随机推荐
- Android的加速度传感器模拟摇一摇的效果-android学习之旅(66)
主要介绍一下android的加速传感器的简单用法,模拟摇一摇 ,如果x,y,z三个方向的加速度超过了15,就会弹出Toast,当然你可以设置更复杂的策略,比如判断间隔 代码如下 public clas ...
- Android 6.0 运行时权限处理问题
序 自从升级到Android M以来,最大的改变就是增加了运行时权限RuntimePermission,6.0以上的系统如果没有做适配,运行了targetSDK=23的App时就会报权限错误.我们知道 ...
- SwipeListView实现仿ios的侧滑
github地址:https://github.com/xiangzhihong/SwipeMenuListView 今天介绍一个SwipeMenuListView实现侧滑删除的例子,其实和listv ...
- 【翻译】在Sencha应用程序中使用插件和混入
原文:Using Plugins and Mixins in Your Sencha Apps 概述 当扩展一个框架类的功能的时候,通常都会直接将新功能写入派生类,然而,如果所需的同一功能存在于多个组 ...
- 文件I/O实践(1) --基础API
什么是I/O 输入/输出是内存和外设之间拷贝数据的过程: 设备->内存: 输入操作 内存->设备: 输出操作 高级I/O: ANSI C提供的标准I/O库函数成为高级I/O, 也称为带缓冲 ...
- 基于Retrofit2.0+RxJava+Dragger2实现不一样的Android网络构架搭建(转载)
转载请注明出处:http://blog.csdn.net/finddreams/article/details/50849385#0-qzone-1-61707-d020d2d2a4e8d1a374a ...
- 【翻译】了解ASP.NET MVC中的Ajax助手
原文:Understanding AJAX Helpers in ASP.NET MVC 作者: Shailendra Chauhan works as Software Analyst at rep ...
- ZooKeeper leader election
Paxos是分布式应用中解决同步问题的核心.作为应用研发工程师,我们总是倾向于使用一种相对简洁的方式实现复杂的算法.ZooKeeper leader election实现就是一个非常好的参考. 其实现 ...
- linux内核自旋锁API
我们大概都了解,锁这种机制其实是为了保护临界区代码的,关于使用和定义,我总结的API如下: #include <linux/spinlock.h> 定义自旋锁 spinlock_t loc ...
- LeetCode(45)-Bulls and Cows
题目: You are playing the following Bulls and Cows game with your friend: You write down a number and ...