当前位置:   article > 正文

文字识别tesseract--ORC(py版)_python 文字识别

python 文字识别
简介

一个常用的 Python 库用于识别图片中的文字是 Tesseract。Tesseract 是一个免费的开源 OCR(Optical Character Recognition)引擎,可以识别多种语言的文本。

1. 下载安装

下载地址:Index of /tesseract

选择最新的版本进行下载,下载完成后,解压安装在自己设定的安装路径,一直选择next即可完成安装。

2. 添加环境变量

在win10为例,

(1)在高级设置的环境变量中设置Path路径

(2)添加新的变量名:TESSDATA_PREFIX,添加以下数据,添加语言包的路径

F:\Tesseract-OCR\tessdata
3. 测试安装和语言包

打开命令提示符,查看版本信息,输入

tesseract -v

查看语言包

tesseract --list-langs

4. 安装库
  1. pip install pytesseract
  2. pip install Pillow

pytesseract提供文字识别

Pillow提供打开图片,截图,图片处理

5. 图片预处理

为了提高图片的识别率, 需要对图片进行预处理。

(1)截取识别区。

这一步是为了缩小识别的范围,减少不必要的文字干扰。

代码:

  1. #截图函数
  2. def cropped_images():
  3. image = Image.open(file)
  4. # 获取图像的宽度和高度
  5. width, height = image.size
  6. # 设置截取区域的左下角和右上角坐标
  7. left = 0
  8. top = height - int(height*0.25) # 截取区域的高度为 300 像素
  9. right = int(width*0.6) # 截取区域的宽度为 400 像素
  10. bottom = height
  11. # 根据截取区域坐标进行截图
  12. cropped_image = image.crop((left, top, right, bottom))
  13. # 保存截图后的图像
  14. cropped_image.save(cropped_image_path)
  15. print("截图好了")
  16. image.close

(2)图片灰化,二度化

减少背景中的物体和光线亮度对图片的文字的影响,使图片的文字更加清晰。

代码:

  1. # 建议图像识别前,先对图像进行灰度化和 二值化,以提高文本识别率
  2. def image_conert_point():
  3. image = Image.open(cropped_image_path)
  4. # image = Image.open(image)
  5. Img = image.convert('L') # 灰度化
  6. #自定义灰度界限,这里可以大于这个值为黑色,小于这个值为白色。threshold可根据实际情况进行调整(最大可为255)。
  7. threshold = 180
  8. table = []
  9. for i in range(256):
  10. if i < threshold:
  11. table.append(0)
  12. else:
  13. table.append(1)
  14. photo = Img.point(table, '1') #图片二值化
  15. #保存处理好的图片
  16. photo.save(cropped_image_path)
  17. print("图像进行灰度化和二值化成功!!")
  18. image.close
6. 文字识别
  1. # 使用 pytesseract 进行文字识别
  2. def tesseract():
  3. image = Image.open(cropped_image_path)
  4. text = pytesseract.image_to_string(image,lang='chi_sim')
  5. # 输出识别的文字
  6. print("图片中的文字内容:")
  7. print(text)
  8. matchtext(text)
7. 提取文字

正则表达式

  1. #提取关键字 正则表达式
  2. # 提取地点中的公司名字:匹配以 "地点:" 开头,后面跟着地点名称的字符串,并去除空格和特殊字符
  3. def matchtext(text):
  4. pattern = r'地[ ].*?\s+(.*?)\s+'
  5. match = re.search(pattern, text)
  6. print("正则提取:",match)
  7. company_name = re.sub(r"[^\w\s]", "", match.group(1)) if match else None
  8. # 输出提取到的公司名字
  9. if company_name :
  10. print("公司名字:", company_name)
  11. else:
  12. print("提取失败!!")

pattern:匹配模式

text:匹配文本

去特殊符号和空格

re.sub(r"[^\w\s]", "", match.group(1))

8. 完整代码
  1. import pytesseract
  2. from PIL import Image
  3. import re
  4. # pytesseract.pytesseract.tesseract_cmd = r'F:\Tesseract-OCR\tesseract.exe'
  5. # 打开图片
  6. file = "C:/Users/xwl/Desktop/py测试/test8.jpg"
  7. cropped_image_path= "C:/Users/xwl/Desktop/py测试/crp/test1.jpg"
  8. #截图函数
  9. def cropped_images():
  10. image = Image.open(file)
  11. # 获取图像的宽度和高度
  12. width, height = image.size
  13. # 设置截取区域的左下角和右上角坐标
  14. left = 0
  15. top = height - int(height*0.25) # 截取区域的高度为 300 像素
  16. right = int(width*0.6) # 截取区域的宽度为 400 像素
  17. bottom = height
  18. # 根据截取区域坐标进行截图
  19. cropped_image = image.crop((left, top, right, bottom))
  20. # 保存截图后的图像
  21. cropped_image.save(cropped_image_path)
  22. print("截图好了")
  23. image.close
  24. # 建议图像识别前,先对图像进行灰度化和 二值化,以提高文本识别率
  25. def image_conert_point():
  26. image = Image.open(cropped_image_path)
  27. # image = Image.open(image)
  28. Img = image.convert('L') # 灰度化
  29. #自定义灰度界限,这里可以大于这个值为黑色,小于这个值为白色。threshold可根据实际情况进行调整(最大可为255)。
  30. threshold = 180
  31. table = []
  32. for i in range(256):
  33. if i < threshold:
  34. table.append(0)
  35. else:
  36. table.append(1)
  37. photo = Img.point(table, '1') #图片二值化
  38. #保存处理好的图片
  39. photo.save(cropped_image_path)
  40. print("图像进行灰度化和二值化成功!!")
  41. image.close
  42. # 使用 pytesseract 进行文字识别
  43. def tesseract():
  44. image = Image.open(cropped_image_path)
  45. text = pytesseract.image_to_string(image,lang='chi_sim')
  46. # 输出识别的文字
  47. print("图片中的文字内容:")
  48. print(text)
  49. matchtext(text)
  50. #提取关键字 正则表达式
  51. # 提取地点中的公司名字:匹配以 "地点:" 开头,后面跟着地点名称的字符串,并去除空格和特殊字符
  52. def matchtext(text):
  53. pattern = r'地[ ].*?\s+(.*?)\s+'
  54. match = re.search(pattern, text)
  55. print("正则提取:",match)
  56. company_name = re.sub(r"[^\w\s]", "", match.group(1)) if match else None
  57. # 输出提取到的公司名字
  58. if company_name :
  59. print("公司名字:", company_name)
  60. else:
  61. print("提取失败!!")
  62. # 图片路径
  63. # image_path = "C:/Users/xwl/Desktop/py测试/test1.jpg"
  64. def autorunning():
  65. # 截图
  66. cropped_images()
  67. # 图片灰度化和二值化预处理
  68. image_conert_point()
  69. #tesseract orc 识别处理
  70. tesseract()
  71. autorunning()
9. 扩展--正则表达式

正则表达式(Regular Expression)是一种强大的模式匹配工具,用于在字符串中搜索、匹配和替换文本。Python 提供了 re 模块来支持正则表达式的使用。

下面是 Python 中正则表达式的基本使用介绍:

  1. 导入 re 模块:首先,需要导入 re 模块,以便使用其中提供的函数和方法。
python复制代码import re
  1. 创建正则表达式对象:要使用正则表达式,需要创建一个正则表达式对象,可以使用 re.compile() 函数来编译正则表达式模式。
python复制代码pattern = re.compile(r'正则表达式模式')
  1. 匹配和搜索文本:使用正则表达式对象的 match()、search() 或 findall() 方法来匹配和搜索文本。
  • match(pattern, string):从字符串的开头开始匹配模式。
  • search(pattern, string):在字符串中搜索并返回第一个匹配的结果。
  • findall(pattern, string):搜索并返回所有匹配的结果。
  1. python复制代码result = pattern.match(string)
  2. result = pattern.search(string)
  3. results = pattern.findall(string)
  1. 使用匹配结果:根据匹配结果的需要,可以获取匹配的内容或位置等信息。
  1. python复制代码if result:
  2. matched_text = result.group() # 获取匹配到的文本
  3. start_position = result.start() # 获取匹配开始的位置
  4. end_position = result.end() # 获取匹配结束的位置
  1. 替换文本:使用 sub(pattern, repl, string) 方法可以将匹配到的文本替换为指定的内容。
python复制代码new_string = re.sub(pattern, replacement, string)
  1. 正则表达式模式语法:正则表达式模式由各种元字符、字符类、限定符和组合等构成。以下是一些常用的元字符和语法:
  • .:匹配任意单个字符,但不包括换行符。
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • []:定义一个字符类,匹配其中的任意一个字符。
  • \d:匹配任意一个数字字符。
  • \w:匹配任意一个字母、数字或下划线字符。
  • \s:匹配任意一个空白字符(空格、制表符等)。

这只是正则表达式的基础介绍,正则表达式还有更多功能和语法。您可以查阅 Python 官方文档中关于 re 模块的更详细信息,以及参考一些在线的正则表达式教程和工具来学习更多内容。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号