合合科技TextIn Api文字识别 + SpringBoot 使用心得

合合TextIn产品有着大量的功能,包括但不限于文字识别,表格识别,ppt内容提取,文档格式转化等.

在这里我主要用到的是通用文字识别,先注册一个账号,购买对应的使用次数,在工作台里就可以看到公有API.

在账号管理里可以看到app_id和secret_code,这是调用接口的凭证.

在对应api的文档里有着详细的使用说明,以及不同语言的示例代码帮助你快速上手,这里我使用的是java的Springboot框架.

我在根目录下创建了一个配置文件,用来存储appid等信息,这样之后有变化可以方便更改.

新建了一个PropManager的工具类用来打开配置文件.

public class PropManager {
    public static Properties getOCRProp(){
        Properties prop = new Properties();
        try{
            prop.load(new FileInputStream("ocrstudy.properties"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return prop;
    }
}

因为内容不多,我直接在Controller层完成代码.

这段函数中,传入了多张图片,实现了读取所有图片文字内容并拼接的功能.

先读取配置文件中的url和appid和secretcode,url是api的请求连接,在TextIn的文档中找对应的,通用文字识别url是https://api.textin.com/ai/service/v2/recognize
 

public String ocr(List<MultipartFile> imgs) {

        Properties prop = PropManager.getOCRProp();
        String url = prop.getProperty("ocr.url");
        String appId = prop.getProperty("ocr.appId");
        String secretCode = prop.getProperty("ocr.secretCode");
        String res = "";
        for (MultipartFile img : imgs
        ) {
            BufferedReader in = null;
            DataOutputStream out = null;
            String result = "";
            StringBuilder allTextContent = new StringBuilder();
            try {
                byte[] imgData = img.getBytes();
                URL realUrl = new URL(url);
                HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("Content-Type", "application/octet-stream");
                conn.setRequestProperty("x-ti-app-id", appId);
                conn.setRequestProperty("x-ti-secret-code", secretCode);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setRequestMethod("POST"); // 设置请求方式
                out = new DataOutputStream(conn.getOutputStream());
                out.write(imgData);
                out.flush();
                out.close();
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }

                JSONObject jsonResponse = JSONObject.parseObject(result);
                JSONArray linesArray = jsonResponse.getJSONObject("result").getJSONArray("lines");
                for (int i = 0; i < linesArray.size(); i++) {
                    String text = linesArray.getJSONObject(i).getString("text");
                    allTextContent.append(text + "\n");
                }
            } catch (Exception e) {
                e.printStackTrace();
                return "发送 POST 请求出现异常!" + e;
            } finally {
                try {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            res+=allTextContent.toString();
        }

        return res;
    }

代码中,使用HttpUrlConnection类进行api的请求,设置好对应的请求参数,并将图片以字节的形式传输过去,然后读取所有的返回内容.

他的返回是一个json格式,具体的格式可以看TextIn的文档,这里我们接受到后是一个字符串,里面内容很多,而我们只需要其中的关键,所以使用fastjson提供的类将得到的字符串以json格式进行处理,先拿到其中的result列表,然后读取其中lines全部的text中的内容,拼接起来就得到了结果.

接下来使用apifox进行接口测试,这里挑选了荷塘月色的文章图片,可以看到结果非常的成功.如果觉得识别后的格式不是很好,可以用大语言模型进行二次处理.

   

综合来说,TextIn的文字识别效果是非常好的,而且不需要使用额外的sdk和依赖,使用方面来说非常的简单,前端后端都可以方便的单独使用.

fastjson依赖如下:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

JSON结构说明如下:

字段名类型描述
codeinteger错误码,详见“错误码说明”
messagestring

错误信息

versionstring

接口版本号。

durationnumber

服务时间消耗,单位是毫秒(ms)。

resultobject
  + angleinteger

图像角度, 定义0度为人类阅读文字的图像方向,称为正置图像, 本字段表示输入图像是正置图像进行顺时针若干角度的旋转所得。

  • 0: ▲
  • 90: ▶
  • 180: ▼
  • 270: ◀
  + widthinteger

输入图像的宽度。

  + heightinteger

输入图像的高度。

  + linesarray

以文本行为单位的识别结果

   ++ textstring

识别内容字符串

   ++ scorenumber

识别置信度

   ++ typestring

文本类型,用于表示文字的形态。 当前版本下,文本类型包括:

  • text(文本)
  • stamp(印章)
  • formula(公式)
   ++ positionarray

以长度为8的整形数组表示四边形, 语义左上角为起始点顺时针构成闭合区域。

   ++ angleinteger

图像角度, 定义0度为人类阅读文字的图像方向,称为正置图像, 本字段表示输入图像是正置图像进行顺时针若干角度的旋转所得。

  • 0: ▲
  • 90: ▶
  • 180: ▼
  • 270: ◀
   ++ directioninteger

文字阅读方向。

  • -1: 其他
  • 0: 单字
  • 1: 横向
  • 2: 纵向
   ++ handwritteninteger

文字是否手写所得。

  • -1: 未知
  • 0: 非手写文字, 一般为印刷文字
  • 1: 文字手写, 一般具备明显的书写特征
   ++ char_scoresarray

字符置信度,值域范围0-1。 设置character=1时输出。

   ++ char_centersarray

字符中心点。 设置character=1时输出。

   ++ char_positionsarray

字符四边形点坐标,以顺时针构成闭合区域。 设置character=1时输出。

   ++ char_candidatesarray

候选字数组,表示每一个字符的候选,与候选置信度配套使用。 设置character=1时输出。

   ++ char_candidates_scorearray

候选字置信度数组,表示每一个候选字符的置信度,与候选字符配套使用。 设置character=1时输出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值