赞
踩
一个常用的 Python 库用于识别图片中的文字是 Tesseract。Tesseract 是一个免费的开源 OCR(Optical Character Recognition)引擎,可以识别多种语言的文本。
下载地址:Index of /tesseract
选择最新的版本进行下载,下载完成后,解压安装在自己设定的安装路径,一直选择next即可完成安装。
在win10为例,
(1)在高级设置的环境变量中设置Path路径
(2)添加新的变量名:TESSDATA_PREFIX,添加以下数据,添加语言包的路径
F:\Tesseract-OCR\tessdata
打开命令提示符,查看版本信息,输入
tesseract -v
查看语言包
tesseract --list-langs
- pip install pytesseract
- pip install Pillow
pytesseract提供文字识别
Pillow提供打开图片,截图,图片处理
为了提高图片的识别率, 需要对图片进行预处理。
(1)截取识别区。
这一步是为了缩小识别的范围,减少不必要的文字干扰。
代码:
- #截图函数
- def cropped_images():
- image = Image.open(file)
- # 获取图像的宽度和高度
- width, height = image.size
- # 设置截取区域的左下角和右上角坐标
- left = 0
- top = height - int(height*0.25) # 截取区域的高度为 300 像素
- right = int(width*0.6) # 截取区域的宽度为 400 像素
- bottom = height
- # 根据截取区域坐标进行截图
- cropped_image = image.crop((left, top, right, bottom))
- # 保存截图后的图像
- cropped_image.save(cropped_image_path)
- print("截图好了")
- image.close
(2)图片灰化,二度化
减少背景中的物体和光线亮度对图片的文字的影响,使图片的文字更加清晰。
代码:
- # 建议图像识别前,先对图像进行灰度化和 二值化,以提高文本识别率
- def image_conert_point():
- image = Image.open(cropped_image_path)
- # image = Image.open(image)
- Img = image.convert('L') # 灰度化
- #自定义灰度界限,这里可以大于这个值为黑色,小于这个值为白色。threshold可根据实际情况进行调整(最大可为255)。
- threshold = 180
- table = []
- for i in range(256):
- if i < threshold:
- table.append(0)
- else:
- table.append(1)
- photo = Img.point(table, '1') #图片二值化
- #保存处理好的图片
- photo.save(cropped_image_path)
- print("图像进行灰度化和二值化成功!!")
- image.close
- # 使用 pytesseract 进行文字识别
- def tesseract():
- image = Image.open(cropped_image_path)
- text = pytesseract.image_to_string(image,lang='chi_sim')
- # 输出识别的文字
- print("图片中的文字内容:")
- print(text)
- matchtext(text)
正则表达式
- #提取关键字 正则表达式
- # 提取地点中的公司名字:匹配以 "地点:" 开头,后面跟着地点名称的字符串,并去除空格和特殊字符
- def matchtext(text):
- pattern = r'地[ ].*?\s+(.*?)\s+'
- match = re.search(pattern, text)
- print("正则提取:",match)
- company_name = re.sub(r"[^\w\s]", "", match.group(1)) if match else None
- # 输出提取到的公司名字
- if company_name :
- print("公司名字:", company_name)
- else:
- print("提取失败!!")
pattern:匹配模式
text:匹配文本
去特殊符号和空格
re.sub(r"[^\w\s]", "", match.group(1))
-
- import pytesseract
- from PIL import Image
- import re
- # pytesseract.pytesseract.tesseract_cmd = r'F:\Tesseract-OCR\tesseract.exe'
- # 打开图片
- file = "C:/Users/xwl/Desktop/py测试/test8.jpg"
- cropped_image_path= "C:/Users/xwl/Desktop/py测试/crp/test1.jpg"
-
- #截图函数
- def cropped_images():
- image = Image.open(file)
- # 获取图像的宽度和高度
- width, height = image.size
- # 设置截取区域的左下角和右上角坐标
- left = 0
- top = height - int(height*0.25) # 截取区域的高度为 300 像素
- right = int(width*0.6) # 截取区域的宽度为 400 像素
- bottom = height
- # 根据截取区域坐标进行截图
- cropped_image = image.crop((left, top, right, bottom))
- # 保存截图后的图像
- cropped_image.save(cropped_image_path)
- print("截图好了")
- image.close
-
- # 建议图像识别前,先对图像进行灰度化和 二值化,以提高文本识别率
- def image_conert_point():
- image = Image.open(cropped_image_path)
- # image = Image.open(image)
- Img = image.convert('L') # 灰度化
- #自定义灰度界限,这里可以大于这个值为黑色,小于这个值为白色。threshold可根据实际情况进行调整(最大可为255)。
- threshold = 180
- table = []
- for i in range(256):
- if i < threshold:
- table.append(0)
- else:
- table.append(1)
- photo = Img.point(table, '1') #图片二值化
- #保存处理好的图片
- photo.save(cropped_image_path)
- print("图像进行灰度化和二值化成功!!")
- image.close
-
- # 使用 pytesseract 进行文字识别
- def tesseract():
- image = Image.open(cropped_image_path)
-
- text = pytesseract.image_to_string(image,lang='chi_sim')
-
- # 输出识别的文字
- print("图片中的文字内容:")
- print(text)
- matchtext(text)
-
- #提取关键字 正则表达式
- # 提取地点中的公司名字:匹配以 "地点:" 开头,后面跟着地点名称的字符串,并去除空格和特殊字符
- def matchtext(text):
- pattern = r'地[ ].*?\s+(.*?)\s+'
- match = re.search(pattern, text)
- print("正则提取:",match)
- company_name = re.sub(r"[^\w\s]", "", match.group(1)) if match else None
- # 输出提取到的公司名字
- if company_name :
- print("公司名字:", company_name)
- else:
- print("提取失败!!")
- # 图片路径
- # image_path = "C:/Users/xwl/Desktop/py测试/test1.jpg"
-
- def autorunning():
- # 截图
- cropped_images()
- # 图片灰度化和二值化预处理
- image_conert_point()
- #tesseract orc 识别处理
- tesseract()
- autorunning()
正则表达式(Regular Expression)是一种强大的模式匹配工具,用于在字符串中搜索、匹配和替换文本。Python 提供了 re 模块来支持正则表达式的使用。
下面是 Python 中正则表达式的基本使用介绍:
python复制代码import re
python复制代码pattern = re.compile(r'正则表达式模式')
- python复制代码result = pattern.match(string)
- result = pattern.search(string)
- results = pattern.findall(string)
- python复制代码if result:
- matched_text = result.group() # 获取匹配到的文本
- start_position = result.start() # 获取匹配开始的位置
- end_position = result.end() # 获取匹配结束的位置
python复制代码new_string = re.sub(pattern, replacement, string)
这只是正则表达式的基础介绍,正则表达式还有更多功能和语法。您可以查阅 Python 官方文档中关于 re 模块的更详细信息,以及参考一些在线的正则表达式教程和工具来学习更多内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。