关于百度COR文字识别JAVA服务器端设置
来源:互联网 发布:海康网络摄像机维修 编辑:程序博客网 时间:2024/06/02 06:20
首先要先下载百度云提供的JAVASDK
下载地址:http://ai.baidu.com/sdk
之后可以根据百度提供的文档进行开发,文档地址:http://ai.baidu.com/docs#/ASR-Online-Java-SDK/top
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
将下载的aip-speech-java-sdk-version.zip
解压后,复制到工程文件夹中。
在Eclipse右键“工程 -> Properties -> Java Build Path -> Add JARs”。
添加SDK工具包speech_sdk-version.jar``aip-core-version.jar
和第三方依赖工具包json-20160810.jar
。(好像他提供的sdk中没有version.jar)
其中,version
为版本号,添加完成后,用户就可以在工程中使用KG Java SDK。
新建Client
1.初始化一个Client。
public class Sample { //设置APPID/AK/SK public static final String APP_ID = "你的 App ID"; public static final String API_KEY = "你的 Api ID"; public static final String SECRET_KEY = "你的 Secret Key"; public static void main(String[] args) { // 初始化一个FaceClient AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY); // 可选:设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); // 调用API JSONObject res = client.asr("test.pcm", "pcm", 16000, null); System.out.println(res.toString(2)); }}
在上面代码中,常量APP_ID
在百度云控制台中创建,常量API_KEY
与SECRET_KEY
是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。
接口调用
语音识别
接口描述
向远程服务上传整段语音进行识别
请求说明
- 原始语音的录音格式目前只支持评测 8k/16k 采样率 16bit 位深的单声道语音
- 压缩格式支持:pcm(不压缩)、wav、opus、speex、amr
- 系统支持语言种类:中文(zh)、粤语(ct)、英文(en)。
举例:
public void synthesis(AipSpeech client){ // 对本地语音文件进行识别 String path = "D:\\code\\java-sdk\\speech_sdk\\src\\test\\resources\\16k_test.pcm"; JSONObject asrRes = client.asr(path, "pcm", 16000, null); System.out.println(asrRes); // 对语音二进制数据进行识别 byte[] data = Util.readFileByBytes(path); //readFileByBytes仅为获取二进制数据示例 JSONObject asrRes2 = client.asr(data, "pcm", 16000, null); System.out.println(asrRes); // 对网络上音频进行识别 String url = "http://somehost/res/16k_test.pcm"; String callback = "http://callbackhost/aip/dump"; JSONObject res = client.asr(url, callback, "pcm", 16000, null); System.out.println(res);}
接口函数说明:
// 语音识别JSONObject asr(String path, String format, int rate, HashMap<String, Object> options);JSONObject asr(byte[] data, String format, int rate, HashMap<String, Object> options);JSONObject asr(String url, String callback, String format, int rate, HashMap<String, Object> options);
语音识别 返回数据参数详情
返回样例:
// 成功返回{ "err_no": 0, "err_msg": "success.", "corpus_no": "15984125203285346378", "sn": "481D633F-73BA-726F-49EF-8659ACCC2F3D", "result": ["北京天气"]}// 失败返回{ "err_no": 2000, "err_msg": "data empty.", "sn": null}
错误码
------------
文字识别API
获取access_token示例代码
import org.json.JSONObject;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;import java.util.Map;/** * 获取token类 */public class AuthService { /** * 获取权限token * @return 返回示例: * { * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", * "expires_in": 2592000 * } */ public static String getAuth() { // 官网获取的 API Key 更新为你注册的 String clientId = "百度云应用的AK"; // 官网获取的 Secret Key 更新为你注册的 String clientSecret = "百度云应用的SK"; return getAuth(clientId, clientSecret); } /** * 获取API访问token * 该token有一定的有效期,需要自行管理,当失效时需重新获取. * @param ak - 百度云官网获取的 API Key * @param sk - 百度云官网获取的 Securet Key * @return assess_token 示例: * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567" */ public static String getAuth(String ak, String sk) { // 获取token地址 String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; String getAccessTokenUrl = authHost // 1. grant_type为固定参数 + "grant_type=client_credentials" // 2. 官网获取的 API Key + "&client_id=" + ak // 3. 官网获取的 Secret Key + "&client_secret=" + sk; try { URL realUrl = new URL(getAccessTokenUrl); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); connection.setRequestMethod("GET"); connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.err.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String result = ""; String line; while ((line = in.readLine()) != null) { result += line; } /** * 返回结果示例 */ System.err.println("result:" + result); JSONObject jsonObject = new JSONObject(result); String access_token = jsonObject.getString("access_token"); return access_token; } catch (Exception e) { System.err.printf("获取token失败!"); e.printStackTrace(System.err); } return null; }}
文字识别API,使用HTTPS POST发送:
https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token=24.f9ba9c5241b67688bb4adbed8bc91dec.2592000.1485570332.282335-8574074 (access_token从上方的方法中获得)
通用文字识别
package testOCR.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 testOCR.token.AuthService;import testOCR.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", "o3k2WVmMY4opdeyIXk4WrxtP"); connection.setRequestProperty("access_token", AuthService.getAuth()); 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; } /** * @param args */ public static void main(String[] args) { File file = new File("d:\\aaa.png"); String imageBase = BASE64.encodeImgageToBase64(file); imageBase = imageBase.replaceAll("\r\n",""); imageBase = imageBase.replaceAll("\\+","%2B"); String httpUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_enhanced?access_token="+AuthService.getAuth(); 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); } }
package testOCR.util;import java.io.*;import sun.misc.BASE64Encoder;public class BASE64 {/** * 将本地图片进行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编码过的字节数组字符串 } }
package testOCR.token;import org.json.JSONObject;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;import java.util.Map;/** * 获取token类 */public class AuthService { /** * 获取权限token * @return 返回示例: * { * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", * "expires_in": 2592000 * } */ public static String getAuth() { // 官网获取的 API Key 更新为你注册的 String clientId = ""; // 官网获取的 Secret Key 更新为你注册的 String clientSecret = ""; return getAuth(clientId, clientSecret); } /** * 获取API访问token * 该token有一定的有效期,需要自行管理,当失效时需重新获取. * @param ak - 百度云官网获取的 API Key * @param sk - 百度云官网获取的 Securet Key * @return assess_token 示例: * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567" */ public static String getAuth(String ak, String sk) { // 获取token地址 String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; String getAccessTokenUrl = authHost // 1. grant_type为固定参数 + "grant_type=client_credentials" // 2. 官网获取的 API Key + "&client_id=" + ak // 3. 官网获取的 Secret Key + "&client_secret=" + sk; try { URL realUrl = new URL(getAccessTokenUrl); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); connection.setRequestMethod("GET"); connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.err.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String result = ""; String line; while ((line = in.readLine()) != null) { result += line; } /** * 返回结果示例 */ System.err.println("result:" + result); JSONObject jsonObject = new JSONObject(result); String access_token = jsonObject.getString("access_token"); return access_token; } catch (Exception e) { System.err.printf("获取token失败!"); e.printStackTrace(System.err); } return null; } public static void main(String[] args) {System.out.println(getAuth());}}
最后粘贴Controller,我用的是SSM框架,调用其实在程序主题中也已经有了,所以说这块可以忽略
package testOCR.controller;import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import net.sf.json.JSONObject;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import testOCR.model.ResultModel;import testOCR.model.Word;import testOCR.test.OCRTest;import testOCR.token.AuthService;import testOCR.util.BASE64;@Controllerpublic class OcrController {private static final int List = 0;/** * 血糖数据提交 * @param bloodGlucose * @return */@RequestMapping(value="/file") public String fileUpload(@RequestParam MultipartFile image,HttpServletRequest req){String path=req.getSession().getServletContext().getRealPath("/image");System.out.println("真实路径"+path);try {image.transferTo(new File(path+"/"+image.getOriginalFilename()));} catch (IllegalStateException | IOException e) {e.printStackTrace();} File file = new File(path+"/"+image.getOriginalFilename()); String imageBase = BASE64.encodeImgageToBase64(file); imageBase = imageBase.replaceAll("\r\n",""); imageBase = imageBase.replaceAll("\\+","%2B"); String httpUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+AuthService.getAuth(); String httpArg = "fromdevice=pc&clientip=10.10.10.0&detecttype=LocateRecognize&languagetype=CHN_ENG&imagetype=1&image="+imageBase; String jsonResult = OCRTest.request(httpUrl, httpArg); Map classMap = new HashMap(); classMap.put("words_result",Word.class); JSONObject jsonobject = JSONObject.fromObject(jsonResult); ResultModel model=(ResultModel)JSONObject.toBean(jsonobject,ResultModel.class,classMap); StringBuilder sb=new StringBuilder(); List<Word> wordList=model.getWords_result(); if(wordList.size()<=0){ }else{ for (Word word : wordList) { sb.append(word.getWords()+"\n");} System.out.println(sb); } return "index.jsp";}}
package testOCR.model;import java.util.ArrayList;import java.util.List;public class ResultModel {private String log_id;//登录idprivate String words_result_num;//识别结果数,表示words_result的元素个数 应该是行数private List<Word> words_result=new ArrayList<Word>();//结果列表public String getLog_id() {return log_id;}public void setLog_id(String log_id) {this.log_id = log_id;}public String getWords_result_num() {return words_result_num;}public void setWords_result_num(String words_result_num) {this.words_result_num = words_result_num;}public List<Word> getWords_result() {return words_result;}public void setWords_result(List<Word> words_result) {this.words_result = words_result;}@Overridepublic String toString() {return "ResultModel [log_id=" + log_id + ", words_result_num="+ words_result_num + ", words_result=" + words_result + "]";}}
package testOCR.model;public class Word {String words;public String getWords() {return words;}public void setWords(String words) {this.words = words;}@Overridepublic String toString() {return "Word [words=" + words + "]";}}
接口描述
用户向服务请求识别某张图中的所有文字。
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic
URL参数:
Header如下:
Body中放置请求参数,参数详情如下:
请求参数
- CHN_ENG:中英文混合;
- ENG:英文;
- POR:葡萄牙语;
- FRE:法语;
- GER:德语;
- ITA:意大利语;
- SPA:西班牙语;
- RUS:俄语;
- JAP:日语;
- KOR:韩语detect_directionfalsebooleantrue、false是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:
- true:检测朝向;
- false:不检测朝向。detect_languagefalsestringtrue、false是否检测语言,默认不检测。当前支持(中文、英语、日语、韩语)probabilityfalsestringtrue、false是否返回识别结果中每一行的置信度
请求代码示例
请参考通用文字识别(含位置信息版)的代码内容,并更换请求地址。
返回说明
返回参数
- -1:未定义,
- 0:正向,
- 1: 逆时针90度,
- 2:逆时针180度,
- 3:逆时针270度log_id是uint64唯一的log id,用于问题定位words_result是array()识别结果数组words_result_num是uint32识别结果数,表示words_result的元素个数+words否string识别结果字符串probability否object识别结果中每一行的置信度值,包含average:行置信度平均值,variance:行置信度方差,min:行置信度最小值
返回示例
HTTP/1.1 200 OKx-bce-request-id: 73c4e74c-3101-4a00-bf44-fe246959c05eCache-Control: no-cacheServer: BWSDate: Tue, 18 Oct 2016 02:21:01 GMTContent-Type: application/json;charset=UTF-8{"log_id": 2471272194, "words_result_num": 2,"words_result": [ {"words": " TSINGTAO"}, {"words": "青島睥酒"} ]}
错误码
- 关于百度COR文字识别JAVA服务器端设置
- JAVA实现百度OCR文字识别功能
- JAVA实现百度OCR文字识别功能
- 百度文字识别
- 百度OCR文字识别-身份证识别
- Java文字图像识别
- Java 图片文字识别
- java图片识别文字
- 百度OCR文字识别的小例子
- 百度OCR文字识别PHP的Demo
- 基于百度AI的文字识别-Python
- 用RestTemplate调用百度文字识别接口
- Android 集成百度文字识别1.4.0
- 关于百度云人脸识别概括
- Java文字图像识别(1)
- Java文字图像识别(1)
- java图片文字识别技术
- TextView设置文字间距以及识别电话
- 阿里云专家为你解读安全管家服务
- 《Spring Boot极简教程》第16章 Spring Boot安全集成Spring Security
- 《Spring Boot极简教程》第17章 Spring Boot集成日志
- 牛顿法与拟牛顿法
- 《Spring Boot开发:从0到1》第13章 常见问题与解决方案
- 关于百度COR文字识别JAVA服务器端设置
- 读《JavaScript 标准参考教程(alpha)阮一峰》(中)
- 《Spring Boot开发:从0到1》第11章 Spring Boot应用监控
- 《Spring Boot开发:从0到1》第12章 Spring Boot与微服务
- Mysql,Mybatis做时间过滤报表:日周月统计
- 【LintCode】2、尾部的零
- hadoop实战随笔_0718
- 《Spring Boot开发:从0到1》第10章 Spring Boot应用部署运维
- 本地代码用git同步到GitHub中