1.注册账号,获取必要参数
2.单例模式初始化Java客户端AipOcr
/**
* @author byChen
* @date 2021/9/29
*/
public class SingAipocr {
/**
* 将构造方法私有化,保证其他地方new不出来
*/
private SingAipocr(){}
/**
* 在内部使用静态修饰,new一个该对象,该对象就是唯一单例(私有化方法在内部可以使用)
*/
private static final AipOcr one = new AipOcr("AppID", "API Key", "Secret Key");
/**
* 使用静态修饰,可以用方法名直接点出来方法,而不需要新建对象(实际上因为单例,也新建不出来)
* @return
*/
public static AipOcr getAipocr(){
// 可选:设置网络连接参数
one.setConnectionTimeoutInMillis(2000);
one.setSocketTimeoutInMillis(60000);
return one;
}
}
3.项目启动即创建
/**
* @author byChen
* @date 2021/9/29
*/
@Component
@Order(value = 1)
public class AipocrRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
AipOcr aipocr = SingAipocr.getAipocr();
System.out.println("百度识别客户端创建成功!!! "+aipocr);
}
}
4.具体使用
接口说明地址
代码如下:
/**
* 百度文字识别
*/
@GetMapping("/baiduRead")
public R baiduRead() {
AipOcr aipocr = SingAipocr.getAipocr();
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
options.put("language_type", "CHN_ENG");
options.put("detect_direction", "true");
options.put("detect_language", "true");
options.put("probability", "true");
String url = "https://chen-chong.oss-cn-beijing.aliyuncs.com/test/yawen/6327ae74-70f5-46da-acf2-de092abb4fd6.jpg";
// 通用文字识别, 图片参数为远程url图片
JSONObject res = aipocr.basicGeneralUrl(url, options);
//利用JSON工具,将json数据压成实体类
AipResault aipResault = JSON.parseObject(res.toString(), AipResault.class);
return R.ok(aipResault);
}
4.1特殊说明:处理转换返回json格式数据为实体
具体可参考《常用编程思路》-13来进行格式转换
/**
* @author byChen
* @date 2021/9/29
*/
@Getter
@Setter
@Data
public class AipResault {
/**
* 唯一的log id,用于问题定位
*/
@SerializedName("log_id")
private Object logId;
/**
* 识别结果数,表示words_result的元素个数
*/
@SerializedName("words_result_num")
private Object wordsResultNum;
/**
*
*/
@SerializedName("language")
private Object language;
/**
* 图像方向,当detect_direction=true时存在。
* - -1:未定义,- 0:正向,- 1: 逆时针90度,- 2:逆时针180度,- 3:逆时针270度
*/
@SerializedName("direction")
private Object direction;
/**
* 定位和识别结果数组
*/
@SerializedName("words_result")
private List<WordsResult> wordsResult;
@Data
public static class WordsResult implements Serializable {
/**
* 识别结果字符串
*/
@SerializedName("words")
private Object words;
/**
* 行置信度信息;如果输入参数 probability = true 则输出
*/
@SerializedName("probability")
private Probability probability;
@Data
public static class Probability implements Serializable {
/**
* 行置信度平均值
*/
@SerializedName("average")
private Object average;
/**
* 行置信度最小值
*/
@SerializedName("min")
private Object min;
/**
*行置信度方差
*/
@SerializedName("variance")
private Object variance;
}
}
}