关于python:提高图片ocr识别正确率

87次阅读

共计 1756 个字符,预计需要花费 5 分钟才能阅读完成。

这个问题其实是上一篇文章的遗留问题。
解决这个问题的方法次要有两个:1. 进步图片的清晰度;2. 升高辨认的错误率。

1. 进步图片的清晰度

上一篇文章中用到的办法是从 pdf 中读取二进制之后,间接生成 image,两头调整图片分辨率的参数。
这里采纳另外一种办法,能够进步图片的清晰度。
上代码:

if __name__ == '__main__':
    pdf = "***** 医案选编.pdf"
    doc = fitz.open(pdf)
    pdf_name = os.path.splitext(pdf)[0]

    for pg in range(44,45):
        page = doc[pg]
        rotate = int(0)
        # 每个尺寸的缩放系数为 10,这将为咱们生成分辨率进步 100 倍的图像。# zoom_x, zoom_y = 10, 10
        zoom_x, zoom_y = 2, 2 # 通过测试,2* 2 的识别率最高。trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
        pm = page.getPixmap(matrix=trans, alpha=False)
        pm.writePNG('%s.png' % pdf_name)

2. 升高谬误识别率

通过下面的步骤,能够失去一个比原来清晰的图片。但实际上,进步还是比拟无限。在筹备放弃的时候,用 qq 截图辨认了一下,居然比我调用的 api 要好得多,有点想不通啊,不至于技术差异这么大。起初去翻了一下腾讯的这个辨认服务的技术文档,忽然意识到问题在哪里了。我调用的百度辨认服务是标准版(general_basic),过后没留神,起初特意又查了一下文档,识别率只有 91% 左右。于是,用百度的高精度版(accurate_basic)api 调用试了一下,果然简直没有什么错别字了。然而,这里不得不说一下,百度的 api 文档没有腾讯的不便。

关上百度的高精度版(accurate_basic)ocr 辨认技术文档:

点击 API 文档 -》通用场景文字辨认 -》通用文字辨认(高精度版)

找到 Python 的这段示例代码,红色框中就是高精度版的参数。
上代码,上篇文字的 ocr_baidu 函数加了一个参数,其实返回值类型都是一样的:

def ocr_baidu(filename, access_token, type="general_basic"):
    # encoding:utf-8
    '''通用文字辨认'''
    if type == "general_basic":
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
    elif type == "accurate_basic":
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
    # 二进制形式关上图片文件
    f = open(filename, 'rb')
    img = base64.b64encode(f.read())

    params = {"image": img}
    # access_token = '[调用鉴权接口获取的 token]'
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        # print(response.json())
        for words in response.json().get("words_result"):
        #     # print(words.get("words"))
            print(words)
        return response.json().get("words_result")
    else:
        return None

这样下来,识别率进步很多,简直没有错别字了。不过申请的收费调用次数一个月都只有 1000 次,这一本 pdf 下来就用了近 900 次,看来得花钱了。费用来说,百度应该是最贵的,目前是 49 元 5 万次,还是首次的优惠价格。

失常价格是 5 万次 1012 元,哈哈,用不起啊。

正文完
 0