从身份证图片获取文字信息

      最近信息公司有个项目,需要收集商户的身份信息。当时考虑把功能做在微信里面代替做在app里面,app需要开发二个平台之外还要考虑各种手机版本的问题,甚是繁琐。但是由于购买的身份证读卡器,只有安卓和IOS版本的SDK,没有可以支持微信的SDK,所以只能把开发外包出去做在APP上面。

     这二天看了一个阿凡达数据API接口,功能还算强大,完全能满足直接拍照身份证获取身份证中的信息,并且还有接口可以做身份证校验处理。唯一遗憾的是接口基本上都是收费的,如果不是商用的话,费用太贵。

     实现方式比较简单,首先把图片转换成base64编码字符串。

   

/**
	 * 将图片转换为BASE64加密字符串.
	 *
	 * @param imagePath
	 *            图片路径.
	 * @param format
	 *            图片格式.
	 * @return
	 */
	public static String convertImageToByte(String imagePath, String format) {
		BASE64Encoder encoder = new BASE64Encoder();
		File file = new File(imagePath);
		BufferedImage bi = null;
		ByteArrayOutputStream baos = null;
		String result = null;
		try {
			bi = ImageIO.read(file);
			baos = new ByteArrayOutputStream();
			ImageIO.write(bi, format == null ? "jpg" : format, baos);
			byte[] bytes = baos.toByteArray();
			result = encoder.encode(bytes).trim();
			System.out.println("将图片转换为BASE64加密字符串成功!"+result);
		} catch (IOException e) {
			System.out.println("将图片转换为 BASE64加密字符串失败: " + e);
		} finally {
			try {
				if (baos != null) {
					baos.close();
					baos = null;
				}
			} catch (Exception e) {
				System.out.println("关闭文件流发生异常: " + e);
			}
		}
		return result;
	}

 

          把对应的URL和编码传入,就可以返回对应身份证的JSON字符串。

  

private static void httpUrlConnection(String pathUrl, String base64Str) {
		try {
			    String param=  "key=6766ee9f3dfd4297868bcf024ea68c49&pic_ext=jpg&bas64String="+ base64Str ;		    //建立连接
			    URL url=new URL(pathUrl);
			    HttpURLConnection httpConn=(HttpURLConnection)url.openConnection();
			    //设置参数
			    httpConn.setDoOutput(true);   //需要输出
			    httpConn.setDoInput(true);   //需要输入
			    httpConn.setUseCaches(false);  //不允许缓存
			    httpConn.setRequestMethod("POST");   //设置POST方式连接
			    //设置请求属性
			    httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			    httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
			    httpConn.setRequestProperty("Charset", "UTF-8");
			    //连接,也可以不用明文connect,使用下面的httpConn.getOutputStream()会自动connect
			    httpConn.connect();
			    //建立输入流,向指向的URL传入参数
			    DataOutputStream dos=new DataOutputStream(httpConn.getOutputStream());
			    dos.writeBytes(param);
			    dos.flush();
			    dos.close();
			    //获得响应状态
			    int resultCode=httpConn.getResponseCode();
			    if(HttpURLConnection.HTTP_OK==resultCode){
			      StringBuffer sb=new StringBuffer();
			      String readLine=new String();
			      BufferedReader responseReader=new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
			      while((readLine=responseReader.readLine())!=null){
			        sb.append(readLine).append("\n");
			      }
			      responseReader.close();
			      System.out.println(sb.toString());
			    }

		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

        对应JSON的格式:

    

{"result":{"nation":"汉","number":"330782198410185315","name":"xx阳","address":"浙江省XXXXXXX溪村4组","sex":"男"},"error_code":0,"reason":"Succes"}

 

   

   

### PaddleOCRSharp用于身份证信息提取 对于使用PaddleOCRSharp从身份证中提取信息的任务,可以通过构建一个基于.NET的应用程序来实现这一目标。此过程涉及准备环境、加载必要的库以及编写具体的逻辑代码。 #### 准备工作 确保开发环境中已安装 .NET SDK 和 Visual Studio 或其他支持 C# 的 IDE 。接着,在项目文件中引入 `PaddleOCRSharp` 库[^1]: ```xml <ItemGroup> <PackageReference Include="PaddleOCRSharp" Version="latest_version"/> </ItemGroup> ``` #### 初始化配置 创建一个新的控制台应用程序并设置 OCR 引擎参数。考虑到身份证件的特点,建议调整一些默认选项以优化性能和准确性。 ```csharp using System; using PaddleOCRSharp; class Program { static void Main(string[] args){ var ocr = new PaddleOCR(); // 设置模型路径和其他必要参数 ocr.Init(@"path_to_model", false, true); Console.WriteLine("初始化完成"); } } ``` #### 图像预处理与识别 为了更好地适应身份证这种特定类型的文档,可以在调用 OCR 功能前先做一定的图像预处理操作,比如裁剪掉不必要的部分或者增强对比度等。之后再执行文本检测(det),方向分类(cls),最后才是文本识别(rec)[^2]: ```csharp // 假设已经有一个方法 GetIdCardImage() 返回身份证图片对象 var idCardImg = GetIdCardImage(); // 执行OCR流程 List<OcrResult> results = ocr.Recognize(idCardImg); foreach(var result in results){ Console.WriteLine($"Text: {result.Text}, Confidence:{result.Confidence}"); } ``` 通过上述方式能够有效地解析出身份证上所含有的姓名、性别、民族、出生日期等多项重要数据项。 #### 后续处理 获取到原始的文字串后还需要进一步的数据清洗步骤才能得到结构化的输出结果。这通常涉及到正则表达式的匹配或是简单的字符串分割技巧。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值