package com.ruoyi.web.controller.tool;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.ruoyi.common.exception.ServiceException;
|
import lombok.extern.slf4j.Slf4j;
|
import okhttp3.*;
|
|
import java.io.*;
|
import java.net.URLEncoder;
|
import java.nio.file.Files;
|
import java.nio.file.Paths;
|
import java.util.Base64;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* 百度文字识别
|
*/
|
@Slf4j
|
public class BaiDuApi {
|
|
static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
|
|
public static void main(String []args) throws IOException{
|
// String url = "C:\\Users\\Admin\\Desktop\\picture\\6fd629ac-3327-4bdc-9459-fcb5295384bc.jpg";
|
String url = "C:\\Users\\Admin\\Desktop\\picture\\6fd629ac-3327-4bdc-9459-fcb5295384bc.jpg";
|
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
|
RequestBody body = RequestBody.create(mediaType, "image="+getFileContentAsBase64(url,true));
|
Request request = new Request.Builder()
|
.url("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+getAccessToken())
|
.method("POST", body)
|
.addHeader("Content-Type", "application/x-www-form-urlencoded")
|
.addHeader("Accept", "application/json")
|
.build();
|
Response response = HTTP_CLIENT.newCall(request).execute();
|
|
// System.err.println(response.body().string());
|
|
Map<String,Object> map = new HashMap<>();
|
String string = response.body().string();
|
String idCard = string.substring(string.lastIndexOf("单号:") + 3, string.lastIndexOf("单号:") + 27);
|
String time = string.substring(string.lastIndexOf("零时起") + 3, string.lastIndexOf("二十四时")-1);
|
time = time.replace(".","-");
|
map.put("idCard",idCard);
|
map.put("time",time);
|
System.err.println(map);
|
}
|
|
/**
|
* 资质证明证件识别
|
* @param url
|
* @return
|
* @throws IOException
|
*/
|
public static Map<String,Object> qualification(String url) throws IOException {
|
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
|
RequestBody body = RequestBody.create(mediaType, "image="+getFileContentAsBase64(url,true));
|
Request request = new Request.Builder()
|
.url("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+getAccessToken())
|
.method("POST", body)
|
.addHeader("Content-Type", "application/x-www-form-urlencoded")
|
.addHeader("Accept", "application/json")
|
.build();
|
Response response = HTTP_CLIENT.newCall(request).execute();
|
Map<String,Object> map = new HashMap<>();
|
try{
|
String string = response.body().string();
|
String idCard = string.substring(string.lastIndexOf("号:") + 2, string.lastIndexOf("号:") + 21);
|
String time = string.substring(string.lastIndexOf("至") + 1, string.lastIndexOf("至") + 11);
|
time = time.replace(".","-");
|
map.put("idCard",idCard);
|
map.put("time",time);
|
}catch (Exception e){
|
log.error("资质证明证件识别错误!");
|
throw new ServiceException("资质证明证件识别错误!");
|
}
|
return map;
|
}
|
|
/**
|
* 身份证识别
|
* @param url
|
* @return
|
* @throws IOException
|
*/
|
public static Map<String,Object> idCard(String url) throws IOException {
|
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
|
RequestBody body = RequestBody.create(mediaType, "image="+getFileContentAsBase64(url,true));
|
Request request = new Request.Builder()
|
.url("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+getAccessToken())
|
.method("POST", body)
|
.addHeader("Content-Type", "application/x-www-form-urlencoded")
|
.addHeader("Accept", "application/json")
|
.build();
|
Response response = HTTP_CLIENT.newCall(request).execute();
|
Map<String,Object> map = new HashMap<>();
|
try{
|
JSONObject jsonObject = JSONObject.parseObject(response.body().string());
|
JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("words_result"));
|
JSONObject obj1 = JSONObject.parseObject(jsonArray.get(0).toString());
|
String name = obj1.getString("words");
|
name = name.substring(2);
|
|
JSONObject obj2 = JSONObject.parseObject(jsonArray.get(1).toString());
|
String sexStr = obj2.getString("words");
|
sexStr = sexStr.substring(2, 3);
|
int sex = "男".equals(sexStr)?0:1;
|
|
JSONObject obj3 = JSONObject.parseObject(jsonArray.get(3).toString());
|
JSONObject obj4 = JSONObject.parseObject(jsonArray.get(4).toString());
|
String address = obj3.getString("words") + obj4.getString("words");
|
address = address.substring(2);
|
|
JSONObject obj5 = JSONObject.parseObject(jsonArray.get(5).toString());
|
String idCard = obj5.getString("words");
|
idCard = idCard.substring(6);
|
|
map.put("name",name);
|
map.put("sex",sex);
|
map.put("address",address);
|
map.put("idCard",idCard);
|
}catch (Exception e){
|
log.error("身份证件识别错误!");
|
throw new ServiceException("身份证件识别错误!");
|
}
|
return map;
|
}
|
|
/**
|
* 通用文字识别(标准版)
|
* @param url
|
* @return
|
* @throws IOException
|
*/
|
public static JSONObject pictureOcr(String url) throws IOException {
|
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
|
RequestBody body = RequestBody.create(mediaType, "image="+getFileContentAsBase64(url,true));
|
Request request = new Request.Builder()
|
.url("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+getAccessToken())
|
.method("POST", body)
|
.addHeader("Content-Type", "application/x-www-form-urlencoded")
|
.addHeader("Accept", "application/json")
|
.build();
|
Response response = HTTP_CLIENT.newCall(request).execute();
|
return JSONObject.parseObject(response.body().string());
|
}
|
|
public static String getAccessToken() throws IOException {
|
MediaType mediaType = MediaType.parse("application/json");
|
RequestBody body = RequestBody.create(mediaType, "");
|
Request request = new Request.Builder()
|
.url("https://aip.baidubce.com/oauth/2.0/token?client_id=2RkKEqd0ltIHPvnIf3G0VpHE&client_secret=RBpPt3O64e3e4BK7pG3lP0o8I6SGgiUy&grant_type=client_credentials")
|
.method("POST", body)
|
.addHeader("Content-Type", "application/json")
|
.addHeader("Accept", "application/json")
|
.build();
|
Response response = HTTP_CLIENT.newCall(request).execute();
|
JSONObject jsonObject = JSONObject.parseObject(response.body().string());
|
return jsonObject.getString("access_token");
|
}
|
|
/**
|
* 获取文件base64编码
|
*
|
* @param path 文件路径
|
* @param urlEncode 如果Content-Type是application/x-www-form-urlencoded时,传true
|
* @return base64编码信息,不带文件头
|
* @throws IOException IO异常
|
*/
|
static String getFileContentAsBase64(String path, boolean urlEncode) throws IOException {
|
byte[] b = Files.readAllBytes(Paths.get(path));
|
String base64 = Base64.getEncoder().encodeToString(b);
|
if (urlEncode) {
|
base64 = URLEncoder.encode(base64, "utf-8");
|
}
|
return base64;
|
}
|
|
}
|