zoukankan      html  css  js  c++  java
  • 接入百度大脑表格文字识别技术,快速降低信息电子化录入成本

    使用表格文字识别技术,对个人、商品、公示内容等纸质信息登记表进行识别,快速实现表格内容的电子化,用于登记信息的结构化整理和统计,大幅度降低信息电子化工作的人力录入成本,提升信息管理的便捷性

    一.平台接入

    此步骤比较简单,不多阐述。可参照之前文档:

    https://ai.baidu.com/forum/topic/show/943162

    二.分析接口文档

    1.打开API文档页面,分析接口要求

    https://ai.baidu.com/docs#/OCR-API/87932804

       (1)接口描述

    对图片中的表格文字内容进行提取和识别,结构化输出表头、表尾及每个单元格的文字内容。支持识别常规表格及含合并单元格表格,并可选择以JSON或Excel形式进行返回。

    (2)请求说明

    需要用到的信息有:

    请求URL:https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request

    Header格式:Content-Type:application/x-www-form-urlencoded

    Body中放置请求参数,参数详情如下:

    本接口为异步接口,分为两个API:提交请求接口、获取结果接口。这里有一个关键参数:is_sync,取值为“false”,需通过获取结果接口获取识别结果;取值为“true”,同步返回识别结果,无需调用获取结果接口。当然,能一次搞定的绝不用两次,只需设置该参数为“true”即可。

    (3)返回参数                               

    返回示例

    {"result":
    
    {"result_data":"http://bj.bcebos.com/v1/ai-edgecloud/4F00EC7AED4E4827BD517CB105E56DEB?authorization=bce-auth-v1%2Ff86a2044998643b5abc89b59158bad6d%2F2019-08-10T07%3A28%3A13Z%2F172800%2F%2F374c64232876bcbe78a54105e438a97376f530788e5386e04f67d0cba4935f3d",
    
    "ret_msg":"xe5xb7xb2xe5xaex8cxe6x88x90",
    
    "percent":100,
    
    "ret_code":3},
    
    "log_id":1565422091617865}

    2.获取access_token

    # encoding:utf-8
    
    import base64
    
    import urllib
    
    import urllib2
    
    
    
    request_url = " https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request "
    
    # 二进制方式打开视频文件
    
    f = open('[本地文件]', 'rb')
    
    img = base64.b64encode(f.read())
    
    params = {"data": data }
    
    params = urllib.urlencode(params)
    
    access_token = '[调用鉴权接口获取的token]'
    
    request_url = request_url + "?access_token=" + access_token
    
    request = urllib2.Request(url=request_url, data=params)
    
    request.add_header('Content-Type', 'application/x-www-form-urlencoded')
    
    response = urllib2.urlopen(request)
    
    content = response.read()
    
    if content:
    
    print content

    三.识别结果

    1.

    识别结果:

    2.

    识别结果:

     3.

    识别结果:

    4.

    识别结果:

    结论:

    识别结果方面:采用不同形式的复杂表格进行测试,识别结果比较准确,能够大大减少信息录入工作。

    处理速度方面:每张图片处理时间在3-5s,可以接受。

    四.源码共享

    # -*- coding: utf-8 -*-
    
    #!/usr/bin/env python
    
    import urllib
    
    import urllib.parse
    
    import urllib.request
    
    import base64
    
    import json
    
    import time
    
    #client_id 为官网获取的AK, client_secret 为官网获取的SK
    
    client_id = '*******************'
    
    client_secret = '*********************'
    
    
    
    #获取token
    
    def get_token():
    
        host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
    
        request = urllib.request.Request(host)
    
        request.add_header('Content-Type', 'application/json; charset=UTF-8')
    
        response = urllib.request.urlopen(request)
    
        token_content = response.read()
    
        if token_content:
    
            token_info = json.loads(token_content.decode("utf-8"))
    
            token_key = token_info['access_token']
    
        return token_key
    
    
    
         # 读取图片
    
    def get_file_content(filePath):
    
        with open(filePath, 'rb') as fp:
    
            return fp.read()
    
    
    
    
    
    #获取表格信息
    
    def get_license_plate(path):
    
    
    
        request_url = "https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request"
    
       
    
        f = get_file_content(path)
    
        access_token=get_token()
    
        print (access_token)
    
        img = base64.b64encode(f)
    
    #    params = {"image": img,"is_sync": 'true',"request_type": 'json'}
    
        params = {"image": img,"is_sync": 'true',"request_type": 'excel'}
    
        params = urllib.parse.urlencode(params).encode('utf-8')
    
        request_url = request_url + "?access_token=" + access_token
    
        tic = time.clock()
    
        request = urllib.request.Request(url=request_url, data=params)
    
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
    
        response = urllib.request.urlopen(request)
    
        content = response.read()
    
        toc = time.clock()
    
        print('处理时长: '+'%.2f'  %(toc - tic) +' s')
    
        if content:
    
            print (content)
    
            license_plates = json.loads(content.decode("utf-8"))
    
            excel_url = license_plates['result']['result_data']
    
            excel = urllib.request.urlopen(excel_url)
    
            with open("sbg.xls", "wb") as code:
    
                code.write(excel.read())
    
            return content
    
        else:
    
            return ''
    
    
    
    image_path='F:paddlesbgs6.jpg'
    
    get_license_plate(image_path)

    五.意见建议

    1.整体识别效果还是不错的,识别结果的精确度还有待提高,细节处理还可以更完善。比如复杂表格识别文字串行,个别文字丢失或错误等。

    2.对表格中有手写体文字的识别效果不好,建议增加对手写输入的识别。

    作者:wangwei8638 

  • 相关阅读:
    大物—⑦热力学基础1
    组原——③系统总线
    组原——①计算机系统概论
    递归
    字符串
    Linux下安装glibc-2.14,解决“`GLIBC_2.14' not found”问题
    libc.so.6被删除修复ln: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
    正则表达式高级用法(分组与捕获)
    查看Android应用包名、Activity的几个方法
    logcat随笔
  • 原文地址:https://www.cnblogs.com/AIBOOM/p/11725472.html
Copyright © 2011-2022 走看看