AI提取图片里包含的文字信息-解决文字无法复制的痛点

描述

1. 前言

平时工作中编写开发技术文档,或者学生在编写论文时,经常会上网搜索一些参考文献、文档。

比如: 上网搜索相似的内容参考一下或者引用别人的一段文字,有时候看到一篇较好的内容想要保存等等。

这个过程中会发现,很多网站的提供的页面都是不能复制粘贴的,或者直接是图片形式提供,为了方便能获取这些文字,当前就利用华为云提供的 通用文字识别接口,识别图片里的文本内容,方便复制文字。这个功能QQ上也集成了,使用很方便,这里利用华为云的接口实现一个与QQ类似的功能,截图之后识别图片里包含的文本内容。

这个文字识别接口里不仅仅有通用文字识别功能,还支持很多其他功能:比如身份证、驾驶证、保险单、手写文本、火车票,行驶证.......等等功能。还支持用户自定义识别模板,指定需要识别的关键字段,实现用户特定格式图片的自动识别和结构化提取。

接口

2. 文本识别接口使用介绍

2.1 开通服务

地址: https://console.huaweicloud.com/ocr/?region=cn-north-4#/ocr/overview

接口

这个文字识别服务是按调用次数计费的,每个用户每月有1000次的免费调用次数,开通服务后就可以使用。

2.2 接口地址

官网帮助文档: https://support.huaweicloud.com/api-ocr/ocr_03_0042.html

POST https://{endpoint}/v2/{project_id}/ocr/general-text

示例:
https://ocr.cn-north-4.myhuaweicloud.com/v2/0e5957be8a00f53c2fa7c0045e4d8fbf/ocr/general-text

请求头:
{
 "X-Auth-Token": "******",
 "Content-Type": "application/json;charset=UTF-8"
}

请求体:
{
 "image": ----这是图片的bas64编码
}

响应结果:
{
 "result": {
  "words_block_count": 13,
  "words_block_list": [
   {
    "words": "撤,还是不撤?",
    "location": [
     [
      43,
      39
     ],
     [
      161,
      39
     ],
     [
      161,
      60
     ],
     [
      43,
      60
     ]
    ]
   },
   {
    "words": "让我更骄傲的是公司在大灾面前的表现。",
    "location": [
     [
      72,
      95
     ],
     [
      332,
      95
     ],
     [
      332,
      113
     ],
     [
      72,
      113
     ]
    ]
   },
   {
    "words": "2011年3月11日14时46分,日本东北部海域发生里氏9.0级",
    "location": [
     [
      71,
      122
     ],
     [
      482,
      122
     ],
     [
      482,
      142
     ],
     [
      71,
      142
     ]
    ]
   },
   {
    "words": "地震并引发海啸。那一刻,我们正在距离东京100公里的热海开会,",
    "location": [
     [
      41,
      149
     ],
     [
      481,
      149
     ],
     [
      481,
      171
     ],
     [
      41,
      171
     ]
    ]
   },
   {
    "words": "感觉“咚”",
    "location": [
     [
      42,
      180
     ],
     [
      114,
      180
     ],
     [
      114,
      199
     ],
     [
      42,
      199
     ]
    ]
   },
   {
    "words": "地被震了一下。面对地震,",
    "location": [
     [
      115,
      178
     ],
     [
      296,
      178
     ],
     [
      296,
      199
     ],
     [
      115,
      199
     ]
    ]
   },
   {
    "words": "大家都很镇定,",
    "location": [
     [
      300,
      179
     ],
     [
      400,
      179
     ],
     [
      400,
      197
     ],
     [
      300,
      197
     ]
    ]
   },
   {
    "words": "直到看到电",
    "location": [
     [
      405,
      179
     ],
     [
      483,
      179
     ],
     [
      483,
      196
     ],
     [
      405,
      196
     ]
    ]
   },
   {
    "words": "视上触目惊心的画面:15时 25 分,海啸到达陆前高田市海岸;15时",
    "location": [
     [
      41,
      206
     ],
     [
      485,
      206
     ],
     [
      485,
      228
     ],
     [
      41,
      228
     ]
    ]
   },
   {
    "words": "26分,海啸到达陆前高田市中心;15时43分,陆前高田市依稀只能",
    "location": [
     [
      40,
      234
     ],
     [
      486,
      234
     ],
     [
      486,
      258
     ],
     [
      40,
      258
     ]
    ]
   },
   {
    "words": "看到四层高的市府大楼的屋顶,一瞬间,城镇就变成了汪洋……对",
    "location": [
     [
      40,
      262
     ],
     [
      487,
      262
     ],
     [
      487,
      287
     ],
     [
      40,
      287
     ]
    ]
   },
   {
    "words": "我来说,地震跟家常便饭一样,可眼前的灾难比以往任何一次都要",
    "location": [
     [
      40,
      292
     ],
     [
      487,
      292
     ],
     [
      487,
      317
     ],
     [
      40,
      317
     ]
    ]
   },
   {
    "words": "惨烈,完全超出了我的预期。",
    "location": [
     [
      41,
      326
     ],
     [
      231,
      326
     ],
     [
      231,
      345
     ],
     [
      41,
      345
     ]
    ]
   }
  ],
  "direction": -1
 }
}

在请求参数里的X-Auth-Token参数比较重要,调用华为云的任何API接口都需要这个参数,获取方式可以看前面的文章。比如这篇文章: https://support.huaweicloud.com/api-ocr/ocr_03_0005.html

2.3 在线调试接口

地址: https://apiexplorer.developer.huaweicloud.com/apiexplorer/debug?product=OCR&api=RecognizeGeneralText

使用调试接口想体验识别效果,图片的数据支持base64编码、http网络图片地址传入,测试非常方便。

关于获取图片base64编码的方式,在文档里也有介绍,直接通过浏览器获取。

接口

接口

3. 实现代码

代码采用QT编写的,请求API接口实现调用。其他语言方法是一样的。

3.1 实现效果

接口

接口

3.2 核心代码

//解析反馈结果
void Widget::replyFinished(QNetworkReply *reply)
{
    QString displayInfo="";
    int statusCode = reply- >attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

    //读取所有数据
    QByteArray replyData = reply- >readAll();

    qDebug()< < "状态码:"<

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分