python自学:识别多张图片中的文字并保存

文章目录

  • 1.依次导入目录下的图片
  • 2.读入并显示一张图片
    • (1)使用opencv
    • (2)使用PIL库打开图片
    • (3)使用matplotlib打开图片
  • 3.借助百度云完成文字识别
  • 4.将字符串写入txt文件
  • 5.完整代码
  • 6.小结

1.依次导入目录下的图片

先借助函数os.listdir(“path”)导入路径“path”下的所有文件名,然后再分别打开。

// 导入当前目录下的文件名(不包含自身),返回值为元组
file = os.listdir("./")

根据文件名的后缀判断文件格式。

// 先将字符串变为小写,然后判断其是否以‘jpg’结尾
file.lower().endswith('jpg')

使用举例:

// 依次打开当前目录下的所有图片
import os
// 判断是否为图片格式
for file in os.listdir("./"):
    if(file.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm',
                              '.pgm', '.ppm', '.tif', '.tiff'))):
            print(file)

结果:

// 运行结果
01.jpg
handwriting.jpg
tj.jpg
图片1.png

2.读入并显示一张图片

(1)使用opencv

// 打开一张图片
import cv2

image = cv2.imread('01.jpg')
# 通过窗口名关联imshow时的图片,调整图片大小,0表示窗口大小可手动调整(防止图片显示不全)
cv2.namedWindow("窗口名", 0)
cv2.imshow("窗口名", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

关于cv2.namedWindow()参数的说明

(2)使用PIL库打开图片

from PIL import Image
 
picture = Image.open("01.jpg")
// 在win的环境下picture.show的方式为win自带的图像显示应用
picture.show()

关于PIL库的使用

(3)使用matplotlib打开图片

import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片

picture = mpimg.imread('图片1.png')
plt.imshow(picture)
plt.axis('off') # 不显示坐标轴
plt.show()

以绘图的方式打开图片,仅能打开‘png’格式图片。

3.借助百度云完成文字识别

百度云官方文档
一个例子
  百度云文字识别返回值为一个字典,字典中的‘words_result’值中包含识别的内容,而该值为一个元组,元组中每个元素记录了识别的一项结果(内容、可信度等)。

4.将字符串写入txt文件

// 选择“w”形式打开一个文件
f = open("temp.txt", "w", encoding='utf-8')
// 写入一个字符串txt后换行
file.write(txt + '\n')
f.close()

5.完整代码

  将“图片”文件夹中所有图片的字符(包括汉字、英文、一些特殊符号)提取出来,存放在“语录.txtx”中。

//利用百度api实现图片文本识别
import os
from aip import AipOcr

// 百度云申请到的端口信息
APP_ID = '******'
API_KEY = '******'
SECRECT_KEY = '******'
client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)

""" 如果有可选参数 """
options = {}
options["detect_direction"] = "false"
options["probability"] = "true"

f = open("语录.txt", "w", encoding='utf-8')

""" 读取图片(打开文件并判断是否为图片格式) """
for file_name in os.listdir("./图片"):
    if(file_name.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', 
                                   '.pbm','.pgm', '.ppm', '.tif', '.tiff'))):
        image = open('./图片/' + file_name,'rb').read()
    else:
        continue
    """ 带参数调用通用文字识别(高精度版) """
    """ 参数options可缺省"""
    result = client.basicAccurate(image, options)
    print(result)
    try:
        for i in range(int(result['words_result_num'])):
            txt = result['words_result'][i]['words']
            print(txt)
            if len(txt) > 2:
            	// 完成一次内容的写入并换行
                f.write(txt +'\n')
    except:
        pass

f.close()

注:文件“语录.txt” 和 文件夹“图片”跟该代码在同一目录下。

6.小结

  原计划通过图片处理提取出特定的区域(小黑板上的内容),仅对该区域进行识别,避免其他因素的干扰(如背景中、衣服上的字符),但是因为目标轮廓检测方面遇到困难,取消了该环节。因此百度云的文字识别会将图片中的所有字符都提取出来。
  另外在使用百度云时发现以下问题:

python自学:识别多张图片中的文字并保存_第1张图片python自学:识别多张图片中的文字并保存_第2张图片
图一识别结果:

日月往
不可复追

python自学:识别多张图片中的文字并保存_第3张图片python自学:识别多张图片中的文字并保存_第4张图片
图2识别结果

日月既往
不可复追

猜测这个结果可能跟文字在图片中的比例有关。

你可能感兴趣的:(python)