Browse Source

ocr识别修改成高精度版

recovery
zhizhi wu 4 years ago
parent
commit
3bff308e49
  1. 6
      tcm/src/main/java/com/ccsens/tcm/service/OcrService.java
  2. 51
      util/src/main/java/com/ccsens/util/baidu/BaiDuUtil.java

6
tcm/src/main/java/com/ccsens/tcm/service/OcrService.java

@ -4,8 +4,6 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.ccsens.tcm.bean.dto.QuestionOcrDto;
import com.ccsens.tcm.bean.po.QuestionOcr;
import com.ccsens.tcm.bean.po.QuestionOcrExample;
import com.ccsens.tcm.bean.vo.QuestionOcrVo;
import com.ccsens.tcm.persist.dao.QuestionOcrDao;
import com.ccsens.tcm.uitl.Constant;
@ -41,7 +39,7 @@ public class OcrService implements IOcrService {
List<QuestionOcrVo.GeneralBasic> vos = new ArrayList<>();
BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic();
basic.setUrl(generalBasic.getUrl());
BaiDuVo.GeneralBasic words = BaiDuUtil.generalBasic(Constant.BaiDu.APP_KEY, Constant.BaiDu.SECRET_KEY, basic);
BaiDuVo.GeneralBasic words = BaiDuUtil.accurateBasic(Constant.BaiDu.APP_KEY, Constant.BaiDu.SECRET_KEY, basic);
log.info("文字识别:{}", words);
if (words == null || words.getWordsResultNum() <= 0) {
return vos;
@ -70,7 +68,7 @@ public class OcrService implements IOcrService {
vo.setQuestionId(rule.getQuestionId());
vo.setCode(rule.getCode());
vo.setSort(rule.getSort());
vo.setContent(builder == null ? "" : builder.toString());
vo.setContent(builder.toString());
vos.add(vo);
});

51
util/src/main/java/com/ccsens/util/baidu/BaiDuUtil.java

@ -25,10 +25,12 @@ public class BaiDuUtil {
private RedisUtil redisUtil;
private static BaiDuUtil util;
/**token_appKey*/
private static final String tokenKey = "baidu_token_";
private static final String TOKEN_KEY = "baidu_token_";
private static final String authUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}";
private static final String generalBasicUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={}";
private static final String AUTH_URL = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}";
private static final String GENERAL_BASIC_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={}";
/**通用文字识别(高精度版)*/
private static final String ACCURATE_BASIC_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token={}";
@PostConstruct
public void init(){
@ -44,13 +46,13 @@ public class BaiDuUtil {
*/
public static String getToken(String appKey, String secretKey){
log.info("获取百度认证:{},{}", appKey, secretKey);
String key = tokenKey + appKey;
String key = TOKEN_KEY + appKey;
String token = (String) util.redisUtil.get(key);
log.info("缓存token:{}", token);
if (StrUtil.isNotEmpty(token)) {
return token;
}
String url = StrUtil.format(authUrl, appKey, secretKey);
String url = StrUtil.format(AUTH_URL, appKey, secretKey);
String result = RestTemplateUtil.postUrlEncode(url, null);
log.info("获取百度认证:{}", result);
JSONObject json = JSONObject.parseObject(result);
@ -67,20 +69,47 @@ public class BaiDuUtil {
return token;
}
/**
* 调用百度通用文字识别高精度版
* @param appKey appKey
* @param secretKey secretKey
* @param basic 图像
* @return 识别结果
*/
public static BaiDuVo.GeneralBasic accurateBasic(String appKey, String secretKey, BaiDuDto.GeneralBasic basic) {
return getGeneralBasic(appKey, secretKey, basic, ACCURATE_BASIC_URL);
}
public static BaiDuVo.GeneralBasic generalBasic(String appKey, String secretKey, BaiDuDto.GeneralBasic basic) {
/**
* 调用百度通用文字识别
* @param appKey appKey
* @param secretKey secretKey
* @param basic 图像
* @param accurateBasicUrl 路径
* @return 识别结果
*/
private static BaiDuVo.GeneralBasic getGeneralBasic(String appKey, String secretKey, BaiDuDto.GeneralBasic basic, String accurateBasicUrl) {
String token = getToken(appKey, secretKey);
String url = StrUtil.format(generalBasicUrl, token);
// String result = RestTemplateUtil.postBody(url, basic);
String url = StrUtil.format(accurateBasicUrl, token);
String result = RestTemplateUtil.postUrlEncode(url, basic);
log.info("调用通用文字识别(标准版)结果:{}", result);
log.info("百度orc调用{}的结果是:{}", url, result);
if (result.contains(Code.GENERAL_BASIC_ERROR)) {
CodeEnum thirdError = CodeEnum.THIRD_ERROR;
thirdError.setMsg(result);
throw new BaseException(thirdError);
}
BaiDuVo.GeneralBasic basicVo = JSONObject.parseObject(result, BaiDuVo.GeneralBasic.class);
return basicVo;
return JSONObject.parseObject(result, BaiDuVo.GeneralBasic.class);
}
/**
* 调用百度通用文字识别标准版
* @param appKey appKey
* @param secretKey secretKey
* @param basic 图像
* @return 识别结果
*/
public static BaiDuVo.GeneralBasic generalBasic(String appKey, String secretKey, BaiDuDto.GeneralBasic basic) {
return getGeneralBasic(appKey, secretKey, basic, GENERAL_BASIC_URL);
}
private static class Code{

Loading…
Cancel
Save