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:/ ...
随机推荐
- React Native调试心得
在做React Native开发时,少不了的需要对React Native程序进行调试.调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率.本文将向大家分享React Na ...
- mongoDB基本使用(二)
数据库基本操作 连接到mongoDB服务器 ./bin/mongo 127.0.0.1:12345 查看当前数据库 > show dbs admin (empty) local 0.078 ...
- UVa - 1618 - Weak Key
Cheolsoo is a cryptographer in ICPC(International Cryptographic Program Company). Recently, Cheolsoo ...
- 9.7、Libgdx之振动器
(官网:www.libgdx.cn) 振动器允许你提醒手机用户. 振动器智能应用在Android设备中,需要特殊的权限: android.permission.VIBRATE 可以通过如下方式实现振动 ...
- 03_TortoiseGit冲突和补丁演示,补丁冲突
1 下载TortoiseGit,下载地址: http://tortoisegit.soft32.com/free-download/ 2 创建一个GIT仓库 3 创建克隆,创建两个用于克隆的仓库 ...
- 关于iOS socket的讲解介绍
socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程 ...
- ExtJS:Grid数据导出至excel实例
导出函数ExportExcel() var config={ store: alldataStore, title: '测试标题' }; var tab=tabPanel.getActiveTab() ...
- windows linux—unix 跨平台通信集成控制系统
首先,我们可以用到这个开源的开发包: mdk(Micro-Development-Kit)微量级软件开发包,提供几个常用类,主要实现了一个高性能的并发服务器引擎 使用c++开发,是一个跨平台的开发包, ...
- 苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型
一.字符串( String )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的 ...
- SharePoint 2013配置开发环境,需安装VS2012插件
SharePoint 2013已经安装好了,接下来就是配置开发环境,安装VS2012,但是,装好了以后,发现没有SharePoint 2013开发的支持,如下图: 然后,去网上查找资料,VS2012对 ...