专栏首页文字识别API文字识别调用API(JAVA)
原创

文字识别调用API(JAVA)

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.*;
import java.security.MessageDigest;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Collections;
import java.util.Date;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;


public class Demo {
    public static String imageToBase64Str(){
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream("src\\ceshi.png");
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 加密
        Base64.Encoder encoder = Base64.getEncoder();
        // BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encodeToString(data);
    }
    public static String sha256Hex(String s) throws Exception {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] d = md.digest(s.getBytes("UTF-8"));
        BigInteger no = new BigInteger(1, d);
        String hashtext = no.toString(16);
        while (hashtext.length() < 32) {
            hashtext = "0" + hashtext;
        }
        return hashtext;
    }
    public static byte[] hmac256(byte[] key, String msg) throws Exception {
        Mac mac = Mac.getInstance("HmacSHA256");
        SecretKeySpec secretKeySpec = new SecretKeySpec(key, mac.getAlgorithm());
        mac.init(secretKeySpec);
        return mac.doFinal(msg.getBytes("UTF8"));
    }
    public static String CanonicalRequest() throws Exception{
        String HTTPRequestMethod = "POST";
        String CanonicalURI = "/";
        String CanonicalQueryString = "";
        String CanonicalHeaders = "content-type:application/json; charset=utf-8\nhost:ocr.tencentcloudapi.com\n";
        String SignedHeaders = "content-type;host";
        //String Payload = "{\"Limit\": 1, \"Filters\": [{\"Values\": [\"\\u672a\\u547d\\u540d\"], \"Name\": \"instance-name\"}]}";
        String Payload = String.format("{\"ImageBase64\": \"%s\"}", imageToBase64Str());

        String HashedRequestPayload = sha256Hex(Payload);
        return HTTPRequestMethod + '\n' +
                CanonicalURI + '\n' +
                CanonicalQueryString + '\n' +
                CanonicalHeaders + '\n' +
                SignedHeaders + '\n' +
                HashedRequestPayload;
    }
    public static String StringToSign() throws Exception{
        String Algorithm = "TC3-HMAC-SHA256";
        String RequestTimestamp = String.valueOf(System.currentTimeMillis() / 1000);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date(System.currentTimeMillis());
        String Timestamp = formatter.format(date);

        String CredentialScope = "2020-05-29"+"/ocr/tc3_request";
        String HashedCanonicalRequest = sha256Hex(CanonicalRequest());
        return Algorithm  + '\n' +
                RequestTimestamp + '\n' +
                CredentialScope + '\n' +
                HashedCanonicalRequest;
    }
    public static String Signature() throws Exception{
        String SecretKey = "SecretKey";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date(System.currentTimeMillis());
        String Timestamp = formatter.format(date);

        byte[] secretDate = hmac256(("TC3" + SecretKey).getBytes("UTF8"), "2020-05-29");
        byte[] secretService = hmac256(secretDate, "ocr");
        byte[] secretSigning = hmac256(secretService, "tc3_request");
        byte[] Signature = hmac256(secretSigning, StringToSign());
        BigInteger no = new BigInteger(1, Signature);
        String hashtext = no.toString(16);
        while (hashtext.length() < 32) {
            hashtext = "0" + hashtext;
        }

        return "TC3-HMAC-SHA256" + ' '+ "Credential=" + "SecretID" +
                '/' + "2020-05-29/ocr/tc3_request" + ',' +
                "SignedHeaders=" + "content-type;host" + ',' +
                "Signature=" + hashtext;
    }
    public static void main(String[] args) throws Exception {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL("https://ocr.tencentcloudapi.com");
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("X-TC-Action", "GeneralBasicOCR");
            conn.setRequestProperty("X-TC-Region", "ap-guangzhou");
            String RequestTimestamp = String.valueOf(System.currentTimeMillis() / 1000);
            conn.setRequestProperty("X-TC-Timestamp", RequestTimestamp);
            conn.setRequestProperty("X-TC-Version", "2018-11-19");
            conn.setRequestProperty("Authorization", Signature());
            conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
            conn.setRequestProperty("Host", "ocr.tencentcloudapi.com");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(String.format("{\"ImageBase64\": \"%s\"}", imageToBase64Str()));
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        System.out.println(result);
    }
}

我也不知道为什么要这样写,反正可以跑通,不太会java

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 文字识别API调用【Python】

    _12291_721
  • 【Java多线程】写入同一文件,自定义线程池与线程回收利用2 顶

    起初为了方便快捷,只为实现功能,写了很多垃圾的代码. 造成性能不高,可读性,可维护性不强。

    linapex
  • 数据源管理 | 关系型分库分表,列式库分布式计算

    随着业务发展,数据量的越来越大,业务系统越来越复杂,拆分的概念逻辑就应运而生。数据层面的拆分,主要解决部分表数据过大,导致处理时间过长,长期占用链接,甚至出现大...

    知了一笑
  • 从爬取的文章 HTML 中提取出中文关键字

    https://github.com/KotlinSpringBoot/saber

    一个会写诗的程序员
  • 【Java多线程】写入同一文件,自定义线程池与线程回收利用 顶

    一个文件好几百兆,1个文件大概200万行左右的数据,现在我要解决的问题是,将 csv的数据读出来,组合数据,生成sql文件。

    linapex
  • 剖析更高级的Redis客户端Lettuce

    Lettuce是一个Redis的Java驱动包,初识她的时候是使用RedisTemplate的时候遇到点问题Debug到底层的一些源码,发现spring-dat...

    黄泽杰
  • Redis高级客户端Lettuce详解

    Lettuce是一个Redis的Java驱动包,初识她的时候是使用RedisTemplate的时候遇到点问题Debug到底层的一些源码,发现spring-dat...

    猿天地
  • Ping++ 支付接口对接

    week
  • 基础面试,为什么面试官总喜欢问String?

    关于 Java String,这是面试的基础,但是还有很多童鞋不能说清楚,所以本文将简单而又透彻的说明一下那个让你迷惑的 String

    用户4172423
  • Java String 理解

    我们经常会面对一个问题,String 是最基本的数据类型吗? String 是值类型还是引用类型?

    黑白格

扫码关注云+社区

领取腾讯云代金券