package cn.huge.module.utils; import cn.huge.module.mediate.constant.CaseBaseConstsEnum; import cn.huge.module.mediate.constant.NotionBaseConstsEnum; import cn.huge.module.sys.dto.IdcardOcrResultDTO; import com.baidu.aip.ocr.AipOcr; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @title: 百度云OCR工具类 * @description: 百度云OCR工具类 * @company: hugeinfo * @author: liyj * @time: 2021-11-05 16:51:48 * @version: 1.0.0 */ @Slf4j public class BaiduOcrUtils { // 公司百度云账号 // public static final String APP_ID = "24661114"; // public static final String API_KEY = "cKXdjXhgRP9fsbI15UxGB0jM"; // public static final String SECRET_KEY = "1X1BY7oAAmjemQgzzdfG3VnTh0rUTO2X"; // 个人账号-15602261488 public static final String APP_ID = "27535980"; public static final String API_KEY = "6U6tSA75gKf4UMXvHgDpzOC9"; public static final String SECRET_KEY = "BBjjCDhy2sAVO0jfiaGn8OWIGE470lWU"; // 个人账号-18607214221 public static final String APP_ID_TEXT = "113806304"; public static final String API_KEY_TEXT = "ajKtDuIs8xr0XvjbUZLPGi8C"; public static final String SECRET_KEY_TEXT = "vgMrG5BJbUfGwKLda1yPWovTQWuRFWDB"; public static void main(String[] args) { } /** * 身份证识别(二进制流) * @param images * @return */ public static IdcardOcrResultDTO ocrIdcard(byte[] images) { try{ AipOcr client = new AipOcr(APP_ID,API_KEY,SECRET_KEY); // 设置识别身份证正面参数 front - 身份证含照片的一面 back - 身份证带国徽的一面 String idCardSide = "front"; // 自定义参数定义 HashMap options = new HashMap(); options.put("detect_direction", "true"); options.put("detect_risk", "true"); JSONObject json = client.idcard(images, idCardSide, options); log.info("xsd:{}",json); JSONObject result = json.getJSONObject("words_result"); // 解析识别结果 IdcardOcrResultDTO idcardOcrResultDTO = new IdcardOcrResultDTO(); String name = result.getJSONObject("姓名").getString("words"); idcardOcrResultDTO.setTrueName(name); String sex = result.getJSONObject("性别").getString("words"); idcardOcrResultDTO.setSexName(sex); idcardOcrResultDTO.setSex(CaseBaseConstsEnum.getIndex(sex)); String idcard = result.getJSONObject("公民身份号码").getString("words"); idcardOcrResultDTO.setCertiType(CaseBaseConstsEnum.CARD_TYPE_1.getIndex()); idcardOcrResultDTO.setCertiTypeName(CaseBaseConstsEnum.CARD_TYPE_1.getDes()); idcardOcrResultDTO.setCertiNo(idcard); String address = result.getJSONObject("住址").getString("words"); idcardOcrResultDTO.setPlaceAddr(address); String bir = result.getJSONObject("出生").getString("words"); String birthday = ""; birthday += bir.substring(0,4)+"-"+bir.substring(4,6)+"-"+bir.substring(6,8); idcardOcrResultDTO.setBirthday(birthday); String nation = result.getJSONObject("民族").getString("words")+"族"; idcardOcrResultDTO.setNationName(nation); idcardOcrResultDTO.setNation(NotionBaseConstsEnum.getIndex(nation)); return idcardOcrResultDTO; }catch (Exception e){ log.error("方法[BaiduOcrUtils.ocrIdcard]调用失败,异常信息:"+e, e); return null; } } public static Map ocrText(byte[] images) { AipOcr client = new AipOcr(APP_ID_TEXT, API_KEY_TEXT, SECRET_KEY_TEXT); // 传入可选参数调用接口 HashMap options = new HashMap(); options.put("language_type", "CHN_ENG"); options.put("detect_direction", "true"); options.put("detect_language", "true"); options.put("probability", "true"); Map map = new HashMap(); // 参数为本地图片二进制数组 JSONObject res = client.basicAccurateGeneral(images, options); map.put("wordsResultNum", res.getInt("words_result_num")); map.put("direction", res.getInt("direction")); List wordsResultList = new ArrayList<>(); JSONArray jsonArray = res.getJSONArray("words_result"); for(int i = 0; i < jsonArray.length(); i++){ JSONObject wordResult = jsonArray.getJSONObject(i); String words = wordResult.getString("words"); if(StringUtils.isNotBlank(words)){ wordsResultList.add(words); } } map.put("wordsResult", wordsResultList); return map; } } /** * -------------------_ooOoo_------------------- * ------------------o8888888o------------------ * ------------------88" . "88------------------ * ------------------(| -_- |)------------------ * ------------------O\ = /O------------------ * ---------------____/`---'\____--------------- * -------------.' \\| |// `.------------- * ------------/ \\||| : |||// \------------ * -----------/ _||||| -:- |||||- \----------- * -----------| | \\\ - /// | |----------- * -----------| \_| ''\---/'' | |----------- * -----------\ .-\__ `-` ___/-. /----------- * ---------___`. .' /--.--\ `. . __---------- * ------."" '< `.___\_<|>_/___.' >'"".------- * -----| | : `- \`.;`\ _ /`;.`/ - ` : | |----- * -----\ \ `-. \_ __\ /__ _/ .-` / /----- * ======`-.____`-.___\_____/___.-`____.-'====== * -------------------`=---=' * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ---------佛祖保佑---hugeinfo---永无BUG---------- */