提高图片ocr识别正确率

这个问题其实是上一篇文章的遗留问题。
解决这个问题的办法主要有两个: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识别技术文档:
提高图片ocr识别正确率_第1张图片
点击API文档-》通用场景文字识别-》通用文字识别(高精度版)
提高图片ocr识别正确率_第2张图片
找到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万次,还是首次的优惠价格。
提高图片ocr识别正确率_第3张图片
正常价格是5万次1012元,哈哈,用不起啊。

你可能感兴趣的:(python人工智能图像识别)