有道OCR图文识别整合SpringBoot

背景需求,

官方SDK,在SpringBoot项目中过于臃肿,需要引入的Jar包过多,

在SpringBoot中,

本文使用SpringBoot中的RestTemplate对象进行请求接口

案例代码如下

package com.example.demo2.Test;


import com.example.demo2.Test.Ocr.OcrResponse;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
public class OcrV3Demo2 {

    private static final String YOUDAO_URL = "https://openapi.youdao.com/ocrapi";
    private static final String APP_KEY = "AppID";
    private static final String APP_SECRET = "密钥";

    public static void main(String[] args) throws IOException {
        RestTemplate restTemplate = new RestTemplate();

        MultiValueMap params = new LinkedMultiValueMap<>();
        String q = loadAsBase64("图片地址....");
        String salt = String.valueOf(System.currentTimeMillis());
        String detectType = "10012";
        String imageType = "1";
        String langType = "auto";
        params.add("detectType", detectType);
        params.add("imageType", imageType);
        params.add("langType", langType);
        params.add("img", q);
        params.add("docType", "json");
        params.add("signType", "v3");
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        params.add("curtime", curtime);
        String signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.add("appKey", APP_KEY);
        params.add("salt", salt);
        params.add("sign", sign);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity> requestEntity = new HttpEntity<>(params, headers);

        ResponseEntity responseEntity = restTemplate.exchange(YOUDAO_URL, HttpMethod.POST, requestEntity, OcrResponse.class);
        System.out.println("输出....");

        System.out.println(responseEntity.getBody());

    }

    public static String getDigest(String string) {
        if (string == null) {
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        byte[] btInput = string.getBytes();
        try {
            MessageDigest mdInst = MessageDigest.getInstance("SHA-256");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

    public static String loadAsBase64(String imgFile) {
        File file = new File(imgFile);
        if (!file.exists()) {
            System.out.println("文件不存在");
            return null;
        }
        try (InputStream in = new FileInputStream(imgFile)) {
            byte[] data = new byte[in.available()];
            in.read(data);
            return Base64.getEncoder().encodeToString(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String truncate(String q) {
        if (q == null) {
            return null;
        }
        int len = q.length();
        return len <= 20 ? q : (q.substring(0, 10) + len + q.substring(len - 10, len));
    }

}

你可能感兴趣的:(spring,boot,ocr,后端)