JAVA实现百度OCR文字识别功能

闲来无事,发现百度有一个OCR文字识别接口,感觉挺有意思的,拿来研究一下。       

百度服务简介:文字识别是百度自然场景OCR服务,依托百度业界领先的OCR算法,提供了整图文字检测、识别、整图文字识别、整图文字行定位和单字图像识别等功能。

不多说啦,直接看demo吧!偷笑

package com.oa.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.oa.commons.util.BASE64;

public class OCRTest {

	public static String request(String httpUrl, String httpArg) {
		BufferedReader reader = null;
		String result = null;
		StringBuffer sbf = new StringBuffer();

		try {
			URL url = new URL(httpUrl);
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			connection.setRequestMethod("POST");
			connection.setRequestProperty("Content-Type",
					"application/x-www-form-urlencoded");
			// 填入apikey到HTTP header
			connection.setRequestProperty("apikey", "您自己的apikey");
			connection.setDoOutput(true);
			connection.getOutputStream().write(httpArg.getBytes("UTF-8"));
			connection.connect();
			InputStream is = connection.getInputStream();
			reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
			String strRead = null;
			while ((strRead = reader.readLine()) != null) {
				sbf.append(strRead);
				sbf.append("\r\n");
			}
			reader.close();
			result = sbf.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	<pre name="code" class="java">/**
	 * @param args
	 */
	public static void main(String[] args) {
		File file = new File("d:\\che4.jpg");
		String imageBase = BASE64.encodeImgageToBase64(file);
		imageBase = imageBase.replaceAll("\r\n","");
		imageBase = imageBase.replaceAll("\\+","%2B");
		String httpUrl = "http://apis.baidu.com/apistore/idlocr/ocr";
		String httpArg = "fromdevice=pc&clientip=10.10.10.0&detecttype=LocateRecognize&languagetype=CHN_ENG&imagetype=1&image="+imageBase;
		String jsonResult = request(httpUrl, httpArg);
		System.out.println("返回的结果--------->"+jsonResult);

	}

 
	/**
	 * 将本地图片进行Base64位编码
	 * 
	 * @param imgUrl
	 *            图片的url路径,如d:\\中文.jpg
	 * @return
	 */
	public static String encodeImgageToBase64(File imageFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
		// 其进行Base64编码处理
		byte[] data = null;
		// 读取图片字节数组
		try {
			InputStream in = new FileInputStream(imageFile);
			data = new byte[in.available()];
			in.read(data);
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 对字节数组Base64编码
		BASE64Encoder encoder = new BASE64Encoder();
		return encoder.encode(data);// 返回Base64编码过的字节数组字符串
	}
附件: (che4.jpg)

运行后结果:

{"errNum":"0","errMsg":"success","querySign":"2289891521,4081625058","retData":[{"rect":{"left":"32","top":"15","width":"418","height":"118"},"word":"\u8c6bC88888"},{"rect":{"left":"45","top":"137","width":"373","height":"18"},"word":"\u4e1c\u98ce\u672c\u7530\u6d1b\u9633\u952e\u901a\u5e97\u7535\u8bdd\uff1a03796358222"}]}

注意:将此结果放到 在线JSON校验格式化工具中(http://www.bejson.com/)会得到你想要的结果:

{
    "errNum": "0",
    "errMsg": "success",
    "querySign": "2289891521,4081625058",
    "retData": [
        {
            "rect": {
                "left": "32",
                "top": "15",
                "width": "418",
                "height": "118"
            },
            "word": "豫C88888"
        },
        {
            "rect": {
                "left": "45",
                "top": "137",
                "width": "373",
                "height": "18"
            },
            "word": "东风本田洛阳键通店电话:03796358222"
        }
    ]
}
怎么样,感觉很神奇吧,感兴趣的试一下吧!吐舌头
最后,解释一下几个参数的含义:

apikey:API密钥 也就是您自己的apikey


fromdevice:来源,例如:android、iPhone 默认是PC


clientip:客户端出口IP


detecttype:OCR接口类型


languagetype:要检测的文字类型


imagetype:图片资源类型


image:图片资源,目前仅支持jpg格式

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
### 回答1: 要在Java实现调用百度OCR票据识别服务,可以按照以下步骤进行: 1. 首先,我们需要获取百度AI开放平台的相关API Key和Secret Key。可以在百度AI开放平台的官方网站上注册并创建一个应用,然后获取到这两个关键的身份验证参数。 2. 在Java中,可以使用百度AI开放平台提供的Java SDK来调用相关服务。首先,需要确保项目中已经引入了百度OCRJava SDK依赖。 3. 创建一个OCRClient对象,并使用之前获取到的API Key和Secret Key进行身份验证。 4. 为要识别的票据准备好图片数据。可以使用Java的File类来读取本地图片文件,也可以直接使用网络上的图片URL。将图片数据转换为字节数组。 5. 调用票据识别的方法,传入要识别的图片数据。可以使用票据识别的方法来识别票据中的各种字段信息,如发票代码、发票号码等。 6. 处理返回的结果。根据百度OCR API的返回结果,解析出需要的字段信息,并进行相应的业务处理。 7. 最后,记得释放资源和处理异常情况,确保程序的稳定性和安全性。 这样,我们就可以在Java中调用百度OCR票据识别服务了。记得在调用API之前,阅读相关文档和了解API的使用限制和注意事项,以确保调用的有效性。 ### 回答2: 在Java中调用百度OCR票据识别功能,可以通过以下几个步骤来实现。 首先,需要在百度云AI平台上创建一个OCR应用,并获取应用的API Key和Secret Key。这些凭证将用于后续的认证和授权。 然后,需要引入百度AIP Java SDK,可以通过maven等方式将它添加到项目的依赖中,以便能够在代码中使用百度OCR相关的接口。 接下来,在代码中构建AipOcr对象,将API Key和Secret Key以及OCR接口的请求地址设置进去。可以通过AipOcr的实例来调用百度OCR相关的接口。 调用百度OCR票据识别功能时,可以通过调用AipOcr对象的receiptRecognize方法来实现。将票据图片的二进制数据作为参数传递给该方法即可。 对于返回的结果,可以通过解析返回的JSON数据来获取识别结果。如票据的种类、识别的文字内容、发票代码、发票号码等信息。 最后,根据需要对返回的识别结果进行处理和展示,可以输出到控制台,保存到文件,或者在界面上显示出来。 总结起来,调用百度OCR票据识别功能需要先获取API Key和Secret Key,然后引入百度AIP Java SDK,构建AipOcr对象,并调用相关接口进行票据识别。最后根据识别结果进行后续处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值