iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >PythonOpencv实战之文字检测OCR
  • 809
分享到

PythonOpencv实战之文字检测OCR

2024-04-02 19:04:59 809人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.相关函数的讲解2.代码展示Detecting WordsDetecting ONLY Digits3.问题叙述4.image_to_data()配置讲解5.项目拓展6.总结与

1.相关函数的讲解

image_to_data()的输出结果是表格形式,输出变量的类型依旧是字符串

你会得到一个这样的列表['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'],我们逐个解释下:

  • level,当前项的层级;
  • page_num,当前项所属页,一般情况下,单张图片的内容均会被分在同一个页;
  • block_num ,当前项所属块,Tesseract会将图像分割为多个不同的block,block会出现1,2,3……等等值;   
  • par_num,当前图像中文字的段落分类;
  • line_num,当前项所属行;
  • word_num,为同一行中当前项所属的单词序号;
  • left\ top\ width\ height,分别为当前项所在矩形区域的左上角坐标、宽度和高度;
  • conf,当前检测字符的置信度,表示项无文字,值为-1,若Tesseract认为当前区域有文字,则其值得范围为0~100;
  • text,即为当前项的文本,若无文字此项为空。

那么关于enumerate()函数,大家可以看看此文。

详解python中enumerate函数的使用

2.代码展示

Detecting Words

import cv2
import pytesseract
import numpy as np
from PIL import ImageGrab
import time
 
 
pytesseract.pytesseract.tesseract_cmd = 'E:\PythonProject\GitHub\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 
##############################################
##### Detecting Words  ######
##############################################
 #[   0          1           2           3           4          5         6       7       8        9        10       11 ]
 #['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text']
 boxes = pytesseract.image_to_data(img)
 for a,b in enumerate(boxes.splitlines()):
        print(b)
         if a!=0:
             b = b.split()
             if len(b)==12:
                 x,y,w,h = int(b[6]),int(b[7]),int(b[8]),int(b[9])
                 cv2.putText(img,b[11],(x,y-5),cv2.FONT_HERSHEY_SIMPLEX,1,(50,50,255),2)
                 cv2.rectangle(img, (x,y), (x+w, y+h), (50, 50, 255), 2)
 
cv2.imshow('img', img)
cv2.waiTKEy(0)

Detecting ONLY Digits

import cv2
import pytesseract
import numpy as np
from PIL import ImageGrab
import time
 
 
pytesseract.pytesseract.tesseract_cmd = 'E:\pythonProject\Github\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 
##############################################
##### Detecting ONLY Digits  ######
##############################################
 hImg, wImg,_ = img.shape
 conf = r'--oem 3 --psm 6 outputbase digits'
 boxes = pytesseract.image_to_boxes(img,config=conf)
 for b in boxes.splitlines():
     print(b)
     b = b.split(' ')
     print(b)
     x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
     cv2.rectangle(img, (x,hImg- y), (w,hImg- h), (50, 50, 255), 2)
     cv2.putText(img,b[0],(x,hImg- y+25),cv2.FONT_HERSHEY_SIMPLEX,1,(50,50,255),2)
 
cv2.imshow('img', img)
cv2.waitKey(0)

3.问题叙述

首先,我遇到的问题有

(1)无效的TeserAct版本:“TeserAct3.02”

 可能是此版本太低了,但我找了找新的版本,在此更新一下路径:

点击此网址  Home · UB-Mannheim/tesseract Wiki · GitHub

自行选择合适的就可以了。

(2)识别效果差

可以看到,将本来不是数字的字母也强行识别出来了,这简直说不过去了。

最后我们看看更改后的效果:

cool,非常的棒,快去试试吧!

对于数字又强差人意了,所以说它这个本身还是存在一点的问题。我觉得影响不大,你觉得不舒服,可以换张图试试。

4.image_to_data()配置讲解

oem讲解

OEM _ TESSERACТ_ ONLY      只以最快的速度运行Tesseract

OEM _ CUBE _ ONLY        仅运行多维数据集-精度更高,但速度更慢

OEM _ TESSERACT _ CUBE _ cOMBINED         同时运行并组合结果-最佳精度

OEM _ DEFAULT     在调用init_*0时指定此模式,以指示应根据特定于语言的配置中的变量自动推断上述任何模式。命令行配置,或者如果没有在上面任何一项中指定,则应设置为默认的OEM_ TESSERACT_ ONLY。

psm讲解

PSM _ OSD _ ONLY          仅用于方向和脚本检测。

PSM _ AUTO _ OSD            带有方向和脚本检测的自动页面分割。(OSD)

PSM _ AUTO _ ONLY            自动页面分割,但没有OSD或OCR。                              PSM _ AUTO              完全自动页面分割,但没有OSD。

PSM _ SINGLE _ COLUMN          假设一列大小可变的文本。

PSM _ SINGLE _ BLOCK _ VERT _ TEXT         假设一个统一的垂直对齐文本块。

PSM _ SINGLE _ BLOCK          假设一个统一的文本块(默认值)

PSM _ SINGLE _ LINE          将图像视为单个文本行。

PSM _ SINGLE _ WORD          将图像视为单个单词。

PSM _ CIRCLE _ WORD         将图像视为圆圈中的单个单词。

PSM _ SINGLE _ CHAR         将图像视为单个字符。

PSM _ SPARSE _ TEXT        在没有特定顺序的情况下尽可能多地查找文本。

PSM _ SPARSE _ TEXT _ OSD         具有方向和脚本检测的稀疏文本。

PSM _ RAW _ LINE           将图像视为单个文本行,绕过特定于Tesseract的黑客攻击。

5.项目拓展

import cv2
import pytesseract
import numpy as np
from PIL import ImageGrab
import time
 
pytesseract.pytesseract.tesseract_cmd = 'E:\pythonProject\Github\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
def captureScreen(bbox=(300,300,1500,1000)):
    capScr = np.array(ImageGrab.grab(bbox))
    capScr = cv2.cvtColor(capScr, cv2.COLOR_RGB2BGR)
    return capScr
while True:
    timer = cv2.getTickCount()
    _,img = cap.read()
    #img = captureScreen()
    #DETECTING CHARACTERES
    hImg, wImg,_ = img.shape
    boxes = pytesseract.image_to_boxes(img)
    for b in boxes.splitlines():
        #print(b)
        b = b.split(' ')
        #print(b)
        x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
        cv2.rectangle(img, (x,hImg- y), (w,hImg- h), (50, 50, 255), 2)
        cv2.putText(img,b[0],(x,hImg- y+25),cv2.FONT_HERSHEY_SIMPLEX,1,(50,50,255),2)
    fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);
    #cv2.putText(img, str(int(fps)), (75, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (20,230,20), 2);
    cv2.imshow("Result",img)
    cv2.waitKey(1)
 
 
cv2.imshow('img', img)
cv2.waitKey(0)

进行网络摄像头的实时文字测试

6.总结与评价

我是首次使用Tesseract,体验感很不好,这是我在b站的评论中看到的:

说实话,我还没有学到用算法的地步,学学了解一下就好了,反正我是准备项目实战的中后期去学习深度学习,以及其他的算法学习,这方面我不好说,但它的精度的确是不达标,你们也看到了,居然把文字也识别成了数字。而且开启摄像头识别的也不是很好,识别不完全or识别错误。

以上就是Python OpenCV实战之文字检测OCR的详细内容,更多关于Python Opencv文字检测的资料请关注编程网其它相关文章!

--结束END--

本文标题: PythonOpencv实战之文字检测OCR

本文链接: https://www.lsjlt.com/news/120297.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PythonOpencv实战之文字检测OCR
    目录1.相关函数的讲解2.代码展示Detecting WordsDetecting ONLY Digits3.问题叙述4.image_to_data()配置讲解5.项目拓展6.总结与...
    99+
    2022-11-11
  • Python人脸检测实战之疲劳检测
    目录使用 OpenCV 构建犯困检测器测试疲劳检测器今天我们实现疲劳检测。 如果眼睛已经闭上了一段时间,我们会认为他们开始打瞌睡并发出警报来唤醒他们并引起他们的注意。我们测试一段视频...
    99+
    2022-11-12
  • python实战教程之OCR文字识别方法汇总
    目录方法一: 使用easyocr模块方法二:通过pytesseract调用tesseractTesseract的安装与使用pytesseractcnocr 第二种 Python 开源...
    99+
    2023-05-18
    python ocr文字识别 ocr文字识别算法 python ocr库
  • C++ OpenCV实战之车道检测
    目录前言一、获取车道ROI区域二、车道检测1.灰度、阈值2.获取非零像素点3.绘制车道线总结前言 本文将使用OpenCV C++ 进行车道检测。 一、获取车道ROI区域 原图如图所...
    99+
    2022-11-13
  • Python实战之OpenCV实现猫脸检测
    开发工具 Python版本:3.6.4 相关模块: cv2模块; 以及一些Python自带的模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 原理简介 简单地讲一讲Haar分类器,也...
    99+
    2022-06-02
    OpenCV实现猫脸检测 Python OpenCV图像识别
  • C++OpenCV实战之网孔检测的实现
    目录前言一、HSV通道转换二、图像修复2.1 OpenCV函数实现2.2 MyFunction三、轮廓提取四、效果显示五、源码总结前言 前段时间,有位粉丝私信我,给我发了一张图片,如...
    99+
    2022-11-13
  • JavaCV摄像头实战之实现口罩检测
    目录本篇概览问题提前告知关于百度AI开放平台编码:添加依赖库编码:封装请求和响应百度AI开放平台的代码DetectService接口的实现主程序验证本篇概览 本文是《JavaCV的摄...
    99+
    2022-11-12
  • C++OpenCV实战之标记点检测的实现
    在实际应用中,能够直接利用霍夫圆检测这些理想方法的应用场景是非常少的,更多的是利用拟合的办法去寻找圆形。 大致思路如下,首先先选择要处理的ROI部分,记录下该图的左上点在原图的坐标,...
    99+
    2022-11-13
  • Pygame实战之检测按键正确的小游戏
    目录游戏功能引入包,初始化配置信息初始化游戏提示信息显示随机的字母设置游戏的属性完整代码 游戏功能 游戏开始,屏幕随机显示一个字符,按 Enter 游戏开始,每个字母有10秒的按键时...
    99+
    2022-11-12
  • C++ OpenCV实战之零部件的自动光学检测
    目录一、背景二、基础知识三、代码实现1、实现多窗口展示2、降噪处理3、背景去除4、连通图实现5、计算连通域面积6、轮廓检测四、总结一、背景 首先任务背景是AOI(自动光学检测) 最重...
    99+
    2022-11-13
  • 人脸检测实战终极之OpenCV+Python实现人脸对齐
    目录前言实现面部矫正器导入必要的包对齐人脸展示结果前言 这篇博文的目的是演示如何使用 OpenCV、Python 和面部标志对齐人脸。 给定一组面部标志(输入坐标),我们的目标是将图...
    99+
    2022-11-12
  • Python实战之实现截图识别文字
    目录前言一、获取百度智能云token二、百度借口调用三、搭建窗口化的程序以便于使用四、实现截图的自动保存五、将识别到的文字输出显示在窗口文本框中并将文字发送到剪切板六、提取识别后文字...
    99+
    2022-11-12
  • python实战之用emoji表情生成文字
    一、前言 昨夜刷b站的时候,看到了一条评论,形式如下图,于是心血来潮写了个python脚本,可以根据文字来生成这种由emoji拼接成的“文字”。 二、思路 代码的思路极其简单,这种形式的“文字”可以理解为一张黑白图...
    99+
    2022-06-02
    python生成文字 python emoji表情
  • Python+Pygame实战之文字剧情游戏的实现
    目录前言一、《巨龙之洞》1)小故事2)环境配置3)代码展示4)效果展示二、《太空矿工》1)小故事2)环境配置3)代码展示4)效果展示前言 哈喽!我是你们的栗子同学—&md...
    99+
    2022-12-08
    Python Pygame文字剧情游戏 Python 文字剧情游戏 Python Pygame 游戏
  • Python+Pygame实战之英文版猜字游戏的实现
    目录导语一、运行环境二、素材(图片等)三、代码展示四、效果展示导语 当下的孩子们多少会被电子产品“侵袭”,那么既然都要玩游戏,为什么不选既能玩又能收获知识的呢...
    99+
    2022-11-11
  • 使用Canvas怎么实现文字碰撞检测并抽稀
    使用Canvas怎么实现文字碰撞检测并抽稀?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。计算文字在 canvas 中所占据的范围// 计算文字所需的宽度var&n...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作