个人知识管理站

分享个人生活、工作、学习过程中各种所学、所见、所闻,有趣的、好玩的、技术积累等各方面的内容。

您尚未登录。

公告

不积跬步无以至千里,不积小流无以成江海,网址:www.itecfun.com

#1 2019-06-03 13:22:36

xuyg
管理员
注册时间: 2015-01-21
帖子: 667

python3.6+pytesseract+PIL 实现图片批量文字识别代码(原创)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2019-06-03 10:12:06
# @Author  : XuYG (xiaoxu04@foxmail.com)
# @Link    : http://www.itecfun.com
# @Version : $V1.0$

import os
from PIL import Image
import pytesseract

class xygORC(object):
	def __init__(self,dir_path,lang,file_name,write_mode):
		'''
		初始化相关参数
		
		Arguments:
			dir_path {[str]} -- [要识别的图片所在目录]
			lang {[str]} -- [tessdata训练数据包的名称,默认采用简体中文识别 chi_sim]
			file_name {[str]} -- [识别的文本保存的文件名称,可自由命名]
			write_mode {[str]} -- [default a+]
		'''
		self.dir_path = dir_path
		self.lang = lang
		self.file_name = file_name
		self.write_mode = write_mode
		self.content = ""

	def recognize(self,image_path,lang):
		'''
		单张图片识别	
		Arguments:
			image_path {[str]} -- [待识别图片路径]
			lang {[str]} -- [tessdata 训练数据包的名称,简体中文用chi_sim进行识别]
		Returns:
			[str] -- [返回识别的本张图片的文字内容]
		'''
		image = Image.open(image_path)
		#使用tessdata chi_sim简体中文训练数据进行识别
		content = pytesseract.image_to_string(image, lang=lang)
		return content
	def save(self,file_name,content,write_mode):
		'''
		保存识别的内容
		Arguments:
			file_name {[str]} -- [保存的文件路径]
			content {[str]} -- [文本内容]
			write_mode {[str]} -- [a,b,r,a+,b+...]
		Returns:
			bool -- [返回保存状态,True or False]
		'''
		#结果保存
		with open(file_name,write_mode) as f:
			f.write(content.replace(' ',''))  #识别后每个字之间有空格,需要去掉空格
			return True
		return False

	def recognize_all(self,dir_path,lang):
		'''
		识别制定目录下所有图片中的文字
		
		Arguments:
			dir_path {[str]} -- [目录路径]
			lang {[str]} -- [tessdata 训练数据包的名称,简体中文用chi_sim进行识别]
		
		Returns:
			[str] -- [目录下所有图片识别后的文字内容]
		'''
		img_list = self.get_file_list(dir_path, [])
		img_list.sort(key=lambda x: os.path.getmtime(x))
		content = ""
		for img in img_list:
			text = self.recognize(img, lang)
			content +=text +"\n "
			print("'{0}'已识别完成!".format(img))
		return content

	def get_file_list(self,dir, file_list):
		'''
		获取指定目录下所有待识别的jpg、png图片列表
		并按时间排序后返回
		
		Arguments:
			dir {[str]} -- [图片存放目录]
			file_list {[list]} -- [图片列表]
		
		Returns:
			[list] -- [目录下所有图片列表]
		'''
		newDir = dir
		if os.path.isfile(dir):
			ext = os.path.splitext(dir)[-1]
			if ext == ".jpg" or ext ==".png":
				file_list.append(dir)
		elif os.path.isdir(dir):
			for file in os.listdir(dir):
				newDir = os.path.join(dir, file)
				self.get_file_list(newDir, file_list)
		return file_list

	def main(self):
		'''
		主函数入口
		'''
		self.content = self.recognize_all(self.dir_path, self.lang)
		self.save(self.file_name, self.content, write_mode)


if __name__ == '__main__':
	dir_path ='E:\\国家政策\\政策学习01:国家大数据战略与社会治理革命' 
	lang  ='chi_sim'  #tessdata chi_sim训练数据包的名称
	file_name = "政策学习.txt" #要保存的识别文字的文件名称,可自由命名
	write_mode ="a+" #以文件末尾追加的形式进行写入
	os.chdir(dir_path) ##将工作目录切换到图片所在目录,主要目的是将文件保存在图片所在目录,方便查阅

	myorc = xygORC(dir_path,lang,file_name,write_mode)

	myorc.main()

离线

页脚

©2019 YG Wang 备案号: 赣ICP备19010196号-1