当前位置:   article > 正文

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

合合识别体验

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

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

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

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

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

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

  1. public class PropManager {
  2. public static Properties getOCRProp(){
  3. Properties prop = new Properties();
  4. try{
  5. prop.load(new FileInputStream("ocrstudy.properties"));
  6. } catch (IOException e) {
  7. throw new RuntimeException(e);
  8. }
  9. return prop;
  10. }
  11. }

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

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

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

  1. public String ocr(List<MultipartFile> imgs) {
  2. Properties prop = PropManager.getOCRProp();
  3. String url = prop.getProperty("ocr.url");
  4. String appId = prop.getProperty("ocr.appId");
  5. String secretCode = prop.getProperty("ocr.secretCode");
  6. String res = "";
  7. for (MultipartFile img : imgs
  8. ) {
  9. BufferedReader in = null;
  10. DataOutputStream out = null;
  11. String result = "";
  12. StringBuilder allTextContent = new StringBuilder();
  13. try {
  14. byte[] imgData = img.getBytes();
  15. URL realUrl = new URL(url);
  16. HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
  17. conn.setRequestProperty("connection", "Keep-Alive");
  18. conn.setRequestProperty("Content-Type", "application/octet-stream");
  19. conn.setRequestProperty("x-ti-app-id", appId);
  20. conn.setRequestProperty("x-ti-secret-code", secretCode);
  21. conn.setDoOutput(true);
  22. conn.setDoInput(true);
  23. conn.setRequestMethod("POST"); // 设置请求方式
  24. out = new DataOutputStream(conn.getOutputStream());
  25. out.write(imgData);
  26. out.flush();
  27. out.close();
  28. in = new BufferedReader(
  29. new InputStreamReader(conn.getInputStream(), "UTF-8"));
  30. String line;
  31. while ((line = in.readLine()) != null) {
  32. result += line;
  33. }
  34. JSONObject jsonResponse = JSONObject.parseObject(result);
  35. JSONArray linesArray = jsonResponse.getJSONObject("result").getJSONArray("lines");
  36. for (int i = 0; i < linesArray.size(); i++) {
  37. String text = linesArray.getJSONObject(i).getString("text");
  38. allTextContent.append(text + "\n");
  39. }
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. return "发送 POST 请求出现异常!" + e;
  43. } finally {
  44. try {
  45. if (out != null) {
  46. out.close();
  47. }
  48. if (in != null) {
  49. in.close();
  50. }
  51. } catch (IOException ex) {
  52. ex.printStackTrace();
  53. }
  54. }
  55. res+=allTextContent.toString();
  56. }
  57. return res;
  58. }

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

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

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

   

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

fastjson依赖如下:

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.47</version>
  5. </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时输出。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/866036
推荐阅读
相关标签
  

闽ICP备14008679号