Opencv学习项目3——pytesseract

上一次我们使用pytesseract.image_to_data(img)来检测文本,这次我们来只检测数字

项目演示

可以看到,我们只检测了数字其他的并没有检测出来

代码实现

前面两次介绍了opencv的画矩形和设置文本,这次就直接用了,不太明白的可以看之前的博客

复制代码
import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'

# 读取图像
img = cv2.imread('3.jpg')
# 将图像从 BGR 格式转换为 RGB 格式(因为 pytesseract 使用 RGB 格式)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

himg, wimg, _ = img.shape
#只读取数字
cong=r'--oem 3 --psm 6 outputbase digits'
boxes = pytesseract.image_to_data(img,config=cong)
print(boxes)
for x,b in enumerate(boxes.splitlines()):
    if x!=0:
        b = b.split()
        print(b)
        if (len(b)==12 and b[10]!='0.000000' ):
            x,y,w,h = int(b[6]),int(b[7]),int(b[8]),int(b[9])
            cv2.rectangle(img,(x,y),(w+x,h+y),(0,0,255),3)
            cv2.putText(img,b[11],(x+20,y-10),cv2.FONT_HERSHEY_COMPLEX,1,(50,50,255),2)

# 显示带有文本框和识别结果的图像
cv2.imshow( 'result', img)
# 等待按键输入来关闭窗口
cv2.waitKey(0)
# 关闭所有打开的窗口
cv2.destroyAllWindows()

在 Tesseract OCR 中,config 参数用于传递额外的配置选项,以控制 OCR 引擎的行为。 r'--oem 3 --psm 6 outputbase digits' 包含了三个选项,各自的作用如下:

  1. --oem 3:

    • 描述:选择 OCR 引擎模式(OEM)。
      • 0: 仅使用传统的 Tesseract OCR 引擎。
      • 1: 仅使用基于 LSTM 的 OCR 引擎。
      • 2: 同时使用两种引擎,并结合结果。
      • 3: 自动选择最合适的引擎(默认)。
    • 作用--oem 3 表示让 Tesseract 自动选择最合适的 OCR 引擎。
  2. --psm 6:

    • 描述:设置页面分割模式(PSM)。
      • 0: 方向和脚本检测(OSD)仅。
      • 1: 自动分页与 OSD。
      • 2: 自动分页,但不使用 OSD 或 OCR。
      • 3: 全自动分页,但不使用 OSD。
      • 4: 假设单列文本。
      • 5: 假设垂直对齐的单列文本。
      • 6: 假设统一间距的段落文本。
      • 7: 假设图像为单行文本。
      • 8: 假设图像为单个单词。
      • 9: 假设图像为单个单词的圆圈。
      • 10: 假设图像为单个字符。
    • 作用--psm 6 表示假设输入图像是一个有统一间距的段落文本。
  3. outputbase digits:

    • 描述:这种配置指示 Tesseract 仅识别数字。
    • 作用outputbase digits 配置 Tesseract 只输出数字字符,而忽略字母和其他字符。

通过组合这些选项,r'--oem 3 --psm 6 outputbase digits' 的作用是:

  • 使用自动选择的最合适的 OCR 引擎。
  • 假设输入图像包含一个有统一间距的段落文本。
  • 仅识别和提取数字字符。

大家可以发现我在代码写了一句

复制代码
if (len(b)==12 and b[10]!='0.000000' ):

这个是因为读取数字文本时他将Z错认为"2"了,但是他的置信度为0,因此使用置信度为0将其筛出

如果不将其筛除则会出现这样的情况。

不过最后还是完美解决了,得到了只检测数字的结果

完成了,有兴趣的可以关注一下,近期一直更新,大佬勿喷

相关推荐
Ankie Wan3 分钟前
notepad++技巧:查找和替换:扩展 or 正则表达式
python·正则表达式·notepad++
带娃的IT创业者3 分钟前
《AI大模型趣味实战》智能Agent和MCP协议的应用实例:搭建一个能阅读DOC文件并实时显示润色改写过程的Python Flask应用
人工智能·python·flask
一只韩非子8 分钟前
什么是MCP?为什么引入MCP?(通俗易懂版)
人工智能·aigc·mcp
JavaEdge在掘金10 分钟前
启动nginx报错,80 failed (97: Address family not supported by protocol)
python
新智元11 分钟前
毛骨悚然!o3 精准破译照片位置,只靠几行 Python 代码?人类在 AI 面前已裸奔
人工智能·openai
纪元A梦17 分钟前
华为OD机试真题——绘图机器(2025A卷:100分)Java/python/JavaScript/C++/C/GO最佳实现
java·javascript·c++·python·华为od·go·华为od机试题
程序员小远30 分钟前
接口测试和单元测试详解
自动化测试·软件测试·python·测试工具·单元测试·测试用例·接口测试
Tech Synapse38 分钟前
电商商品推荐系统实战:基于TensorFlow Recommenders构建智能推荐引擎
人工智能·python·tensorflow
帅帅的Python39 分钟前
2015-2023 各省 GDP 数据,用QuickBI 进行数据可视化——堆叠图!
大数据·人工智能
聿小翼42 分钟前
selenium-wire 与 googletrans 的爱恨情仇
python