用 ABAP 调用 OCR 接口实现出租车发票扫描

简介: 用 ABAP 调用 OCR 接口实现出租车发票扫描

百度 AI 提供了一个出租车发票扫描接口:


https://ai.baidu.com/ai-doc/OCR/Zk3h7xxnn


支持识别全国各大城市出租车票的 16 个关键字段,包括发票号码、代码、车号、日期、总金额、燃油附加费、叫车服务费、省、市、单价、里程、上车时间、下车时间等。

我们首先在 postman 里调用该接口。

url:https://aip.baidubce.com/rest/2.0/ocr/v1/taxi_receipt?access_token=[这里传入 Access Token]


按照接口文档的说明,content-type 设置为 application/x-www-form-urlencoded:

在 body 里,类型选择为 x-www-form-urlencoded:

指定参数的 key 为 image,value 为发票图片二进制数据对应的 base 64 编码的 url encode 值。

下图是一个例子。点击 Send 按钮,会收到下图所示的响应数据,该发票里的关键信息被 API 成功解析。


这里我们需要注意一点,在 postman 里,我们指定参数 image 的值,是没有经过 url encode 的图片 base64 encode 的值,即下图图例 A。

而 postman 在发送该 HTTP 请求时,会自动把该base 64 的值做一次 url encode 处理,比如 base64 里的符号 “/”, 被处理成了 %2F. 见上图 B 的图例。


也就是说,我们在编写 ABAP 代码时,需要手动调用 cl_http_utility=>escape_url 执行这个 encode 动作。


下面是 ABAP 代码实现,逻辑不难。

report z.
DATA: http_client TYPE REF TO if_http_client.
DATA: ls_token TYPE string.
DATA: lv_token TYPE string.
DATA: url type string.
url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/taxi_receipt'.
ls_token = '这里需要填写你实际获取的 Access Token'.
CONCATENATE url '?access_token=' ls_token INTO lv_token.
CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url    = lv_token
    IMPORTING
      client = http_client.
http_client->propertytype_logon_popup = http_client->co_enabled .
http_client->propertytype_redirect = http_client->co_disabled .
  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = '~request_method'
      value = 'POST'.                 "
  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = '~request_protocol'
      value = 'HTTPS/1.1'.
  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = 'Content-Type'
      value = 'application/x-www-form-urlencoded; charset=utf-8'.
*----------上传图片并转换成base64格式 start------------
types: begin of ty_pic,
           pic_data(1024) type x,
         end of ty_pic.
data:       path_string type string.
*parameters: p_file      like rlgrap-filename obligatory.
data:       lv_content  type xstring.
data:       encode_str  type string.
data:       len         type i.
data:       pic_tab     type table of ty_pic."二进制内表
*  path_string = p_file.
  call function 'GUI_UPLOAD'
    exporting
      "filename   = path_string
      filename   = 'C:\Users\I042416\Documents\1.jpg'
      filetype   = 'BIN'
    importing
      filelength = len
    tables
      data_tab   = pic_tab[].
  call function 'SCMS_BINARY_TO_XSTRING'
    exporting
      input_length = len
    importing
      buffer       = lv_content
    tables
      binary_tab   = pic_tab[]
    exceptions
      failed       = 1
      others       = 2.
  " xstring转base64
  CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
  EXPORTING
    input  = lv_content
  IMPORTING
    output = encode_str.
*----------上传图片并转换成base64格式 end--------------
"set body body内传base64格式图片
data: gv_json_send TYPE string.
data: lv_len       TYPE i.
encode_str = cl_http_utility=>escape_url( encode_str ).
CONCATENATE 'image=' encode_str INTO gv_json_send.
  lv_len = strlen( gv_json_send ).
  CALL METHOD HTTP_CLIENT->REQUEST->SET_CDATA
    EXPORTING
      DATA   = gv_json_send
      OFFSET = 0
      LENGTH = lv_len.
  CALL METHOD http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.
  CALL METHOD http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.
  IF sy-subrc <> 0.
    DATA:l_sysubrc    TYPE sysubrc,
         l_error_text TYPE string.
    l_sysubrc = sy-subrc.
    CALL METHOD http_client->get_last_error
      IMPORTING
        code    = l_sysubrc
        message = l_error_text.
  ENDIF.
"Read HTTP RETURN CODE
DATA:http_status_code TYPE i,
     status_text      TYPE string.
  CALL METHOD http_client->response->get_status
    IMPORTING
      code   = http_status_code
      reason = status_text
      .
  WRITE: / 'HTTP_STATUS_CODE = ',
          http_status_code,
         / 'STATUS_TEXT = ',
         status_text.
"READ RESPONSE DATA
DATA:w_result TYPE string.
  CALL METHOD http_client->response->get_cdata
    RECEIVING data = w_result .
* 获取返回的数据
  DATA: r_value    TYPE string,
        r_value1   TYPE string,
        r_fields   TYPE tihttpnvp,
        r_h_fields TYPE tihttpnvp.
  http_client->response->get_header_fields( CHANGING fields =  r_h_fields ). "返回表数据

相关文章
|
2月前
|
文字识别
文字识别OCR常见问题之拦截扫描件的识别如何解决
文字识别OCR(Optical Character Recognition)技术能够将图片或者扫描件中的文字转换为电子文本。以下是阿里云OCR技术使用中的一些常见问题以及相应的解答。
|
9月前
|
存储 BI API
使用 ABAP 代码制作手机能够扫描的二维码(QRCode)试读版
使用 ABAP 代码制作手机能够扫描的二维码(QRCode)试读版
|
3天前
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
29天前
|
文字识别 开发工具 数据安全/隐私保护
印刷文字识别产品使用合集之可以识别一张电子发票有多页(多张图片,或者一个PDF文件)的这种发票吗
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
29天前
|
文字识别
印刷文字识别产品使用合集之可以支持对哪些类型的票据进行识别支持数电发票的ocr识别吗
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
2月前
|
文字识别
印刷文字识别产品使用合集之证件扫描的置信度字段,这个有什么用
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
|
2月前
|
文字识别 安全 API
阿里云文字识别OCR的发票凭证识别功能可以通过API接口的形式进行调用
【2月更文挑战第5天】阿里云文字识别OCR的发票凭证识别功能可以通过API接口的形式进行调用
149 5
|
2月前
|
机器学习/深度学习 文字识别 API
文字识别OCR常见问题之发票真伪查询有接口如何解决
文字识别OCR(Optical Character Recognition)技术能够将图片或者扫描件中的文字转换为电子文本。以下是阿里云OCR技术使用中的一些常见问题以及相应的解答。
|
3天前
|
文字识别
文本,文字识别,PaddleOCR,如何删除,PaddleOCR详解,检测,方向分类器,识别,检测的意思是检查字符的位置,查像素坐标,方向分类器,能够实现180度的图像,字符识别是把识别字符
文本,文字识别,PaddleOCR,如何删除,PaddleOCR详解,检测,方向分类器,识别,检测的意思是检查字符的位置,查像素坐标,方向分类器,能够实现180度的图像,字符识别是把识别字符
|
3天前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片