OCR文字识别

文章目录

    • 1.中文识别
    • 2.英文识别
    • 3.调用百度智能云接口

1.中文识别

pip install cnocr,安装cnocr模块,运用多行识别函数对图像中的中文进行识别。

from cnocr import CnOcr
 ocr = CnOcr()
 res = ocr.ocr('../image/文字识别.png')
 print('内容: ',res)

识别效果如下:

image-20220521074345241

2.英文识别

安装Tesseract,配置环境变量Tesseract-OCR,导入pytesseract模块,识别的代码如下:

import pytesseract
from PIL import Image
image = Image.open('../image/英文识别.png')
code = pytesseract.image_to_string(image, lang='eng')
print(code)

注意修改pytesseract里的tesseract_cmd

tesseract_cmd = r'D:\Tesseract-OCR\tesseract.exe'

识别效果如下:

OCR文字识别_第1张图片

cmd命令行 tesseract image.png result


3.调用百度智能云接口

https://cloud.baidu.com/doc/OCR/s/wkibizyjk

pip install baidu-aip

pip install chardet

from aip import AipOcr
import os

""" 百度云申请到的端口信息 """
APP_ID = '26283176'
API_KEY = 'gPjzMcIxqGWzztCDIRSk3tYl'
SECRET_KEY = '5WpXIiRnnkGEZ85emHg6shSugEsKVGsY'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
""" 读取文件 """

def get_file_content(filePath):
    with open(filePath, "rb") as fp:
        return fp.read()

image = get_file_content('../image/文字识别.png')
# 调用通用文字识别(高精度版)
res_image = client.basicAccurate(image)
def handel_data(data):
    # 文本的信息都藏在res_image字典的‘words_result’键的值里
    # 而这个值是个列表,循环这个列表,找到每一个列表里的字典
    # i['words']找到每一个字典里的值,也就是文本信息
    data = [i['words'] for i in data['words_result']]
    # 将列表的每个值用‘\n’连起来 如果是逗号,将列表的每个值用逗号连接起来
    fenci = '\n'.join(data)
    return fenci
result = handel_data(res_image)
print(result)
with open("文字提取.txt", 'w', encoding='utf-8') as f:
    f.write(result)
import os
# 依次打开当前目录下的所有图片,判断是否为图片格式
for file in os.listdir("../keyframe"):
    if(file.lower().endswith('.jpg')):
        print(file)

依次识别文件夹中的多张图片的文字并存入同一个文档中

from aip import AipOcr
import os
""" 百度云申请到的端口信息 """
APP_ID = '26283176'
API_KEY = 'gPjzMcIxqGWzztCDIRSk3tYl'
SECRET_KEY = '5WpXIiRnnkGEZ85emHg6shSugEsKVGsY'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

""" 读取文件 """
# "w"代表以可写入的方式打开文档
f = open("文字提取.txt", "w", encoding='utf-8')
# 循环遍历文件夹中的每一个内容
for pic_name in os.listdir("../keyframe"):
    # 如果文件的后缀是jpg
    if(pic_name.lower().endswith('.jpg')):
        # 以二进制rb打开并读取
        image = open('../keyframe/'+pic_name, "rb").read()
    else:
        continue
    # 调用百度AI识别图片中的文字
    res_image = client.basicAccurate(image)
    print(res_image)
    try:
        for i in range(int(res_image['words_result_num'])):
            txt = res_image['words_result'][i]['words']
            print(txt)
            if len(txt) > 2:
                f.write(txt + '\n')
    except:
        pass
f.close()

依次识别文件夹中的多张图片的文字并存入多个文档里

import os
import time
from aip import AipOcr

APP_ID = '26283176'
API_KEY = 'gPjzMcIxqGWzztCDIRSk3tYl'
SECRET_KEY = '5WpXIiRnnkGEZ85emHg6shSugEsKVGsY'

# 初始化AipFace对象
aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)

# 定义参数变量
options = {
    'detect_direction': 'true',
    'language_type': 'CHN_ENG',
}
# 得到绝对路径,确保这两个文件和此项目在一个文件夹内
# os.path.join拼接文件路径,自动加‘\n’
# os.path.abspath(__file__)代表本py的绝对路径
# os.path.dirname求父目录
filePath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'frame')
filePath1 = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'txt')
# 要确保存放图片的文件夹里不能有其他文件
pictures = os.listdir(filePath)

class MetaPicture(object):
    def read_picture(self):
        # 一张一张地读取
        for picture in pictures:
            # 每张图片的绝对路径
            picture_path = os.path.join(filePath, picture)
            def get_file_content(filePath):
                # 二进制的方式读取文件
                with open(filePath, 'rb') as fp:
                    return fp.read()
            time.sleep(1)
            # 调用通用文字识别接口(高精度)
            res_image = aipOcr.basicAccurate(get_file_content(picture_path), options)
            print(res_image)
            # 如果有文本信息
            if len(res_image) > 2:
                words_result = res_image['words_result']
            word = ""
            for i in range(len(words_result)):
                word += words_result[i]['words']
                word += "\n"
            # split('.')[0]表示在'.'处切割字符串,0表示取前面的字符串,-1表示取后面的字符串
            with open(filePath1+'\\'+str(picture_path.split('\\')[-1].split('.')[0])+'.txt', 'w') as text:
                text.write(word)

def main():
    metaPicture = MetaPicture()
    metaPicture.read_picture()

if __name__ == '__main__':
    main()

你可能感兴趣的:(python,计算机视觉,opencv,自然语言处理)