文章目录
- 1.中文识别
- 2.英文识别
- 3.调用百度智能云接口
pip install cnocr,安装cnocr模块,运用多行识别函数对图像中的中文进行识别。
from cnocr import CnOcr
ocr = CnOcr()
res = ocr.ocr('../image/文字识别.png')
print('内容: ',res)
识别效果如下:
安装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'
识别效果如下:
cmd命令行 tesseract image.png result
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()