form1.cn
Make a little progress every day

Python中调用pytesseract动态库实现识别图片中的文字

22th of April 2020 Linux tensorflow 2123

简介:

Tesseract是python的光学字符识别(OCR)工具。也就是说,它将识别并读取嵌入图像中的文本。

所谓 OCR 是图像识别领域中的一个子领域,该领域专注于对图片中的文字信息进行识别并转换成能被常规文本编辑器编辑的文本。

Tesseract 已经有 30 年历史,开始它是惠普实验室的一款专利软件,然后在 2005 年开源,自 2006 年后由 Google 赞助进行后续的开发和维护。


目的:

将一个目录中所有图片中的文字进行识并统计字数,同时累加写入到txt中


第一步安装所需要的库(我使用的是python 3.6)

pip install Pillow
pip install pytesseract


第二步下载tesseract.exe文件

源码:https://github.com/tesseract-ocr/tesseract(无需下载)
下载地址:https://digi.bib.uni-mannheim.de/tesseract/


第三步安装tesseract

双击下载的安装文件,安装到你的电脑(我安装在:E:\Program Files\Tesseract-OCR)


第四步配置环境变量(必须否则会报错)

变量名:TESSDATA_PREFIX
变量值:E:\Program Files\Tesseract-OCR\tessdata


第五步修改pytesseract.py(必须否则会报错)

打开
C:\python36\Lib\site-packages\pytesseract\pytesseract.py
里面大概在24或26行
tesseract_cmd = 'tesseract'
改为
tesseract_cmd = 'E:/Program Files/Tesseract-OCR/tesseract.exe'


第六步下载中文字体包(如果你要识别中文的话)

https://github.com/tesseract-ocr/tessdata
找到chi_sim.traineddata,下载到本地后存放到E:\Program Files\Tesseract-OCR\tessdata目录
运行 E:\Program Files\Tesseract-OCR\tesseract --list-langs 可以查看你目前支持的字体库


第七步上代码如下:

'''用开源ocr识别图片中的字'''

import pytesseract
from PIL import Image
import re
import os
import string

def imgtostr(imgpath):
    '''识别图片中所有字'''
    image = Image.open(imgpath)
    text=pytesseract.image_to_string(image,lang='chi_sim') #调用识别引擎识别
    text=text.replace(" ","") #去空格
    text=text.replace("\n","") #去换行
    return get_chinese_color(text)


def get_chinese_color(color_name):
    '''正则匹配中文'''
    color_str = "[\u4E00-\u9FFF]+"
    res = re.findall(color_str, color_name)
    return "".join(res)

def writefile(strstr):
    '''将文字累加写入txt'''
    with open('G:/word.txt',"a", encoding= "utf-8") as f:
    f.write(strstr)
    f.write("\n\n")

def str_count(str):
    '''找出字符串中的中英文、空格、数字、标点符号个数'''
    count_en = count_dg = count_sp = count_zh = count_pu = 0

    for s in str:
        # 英文
        if s in string.ascii_letters:
            count_en += 1
        # 数字
        elif s.isdigit():
            count_dg += 1
        # 空格
        elif s.isspace():
            count_sp += 1
        # 中文,除了英文之外,剩下的字符认为就是中文
        elif s.isalpha():
            count_zh += 1
        # 特殊字符
        else:
            count_pu += 1
    return count_zh



if __name__ == '__main__':

    path = 'G:/ywfanduimg'
    
    for foldName, subfolders, filenames in os.walk(path):
        toltal = 0
        for fe in filenames:
            grpaimg = path + '/' + fe
            print(grpaimg)
            textddd = imgtostr(grpaimg)
            print(textddd)
            print('字数:' + str(str_count(textddd)))
            writefile(textddd + "\n字数:" + str(str_count(textddd)) + "\n")
            toltal = toltal + str_count(textddd)
    
    
    endstr = '总字数:' + str(toltal)
    writefile(endstr)
    print(endstr)