利用opencv识别文本

你好呀

首先安装好pycharm,我所使用的语言是python,并且利用Tesseract,安装的教程Tesseract OCR 安装过程_清都散闲客的博客-CSDN博客首先选择网站Tesseract User Manual | tessdocTesseract documentationhttps://tesseract-ocr.github.io/tessdoc/Home.html因为我需要的是windows,所以选择如下,可以根据自己的实际情况安排自己的下载内容:然后选择版本:下载之后自行安装。作者配合pycharm使用,后续增加识别文本的项目练习...https://blog.csdn.net/qq_41059950/article/details/122890276首先在pycharm中建立文件夹,点击在File中settings

在这里我们安装opencv-python,和pytesseract。到这一步,准备活动就基本完成了。

 然后创建一个.py文件,开始我们的项目吧。

我默认你有一点点opencv的基础和python的基础。

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = "C:\\Program Files\\Tesseract-OCR\\tesseract.exe"
#添加的是你的tesseract的绝对路径,还要加上他的exe执行文件

 下面读取一张照片,只要包含英文字母和数字就可以,这个随你喜欢,我的是这个

import cv2
import pytesseract

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

img = cv2.imread('Rescources/textone.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
print(pytesseract.image_to_string(img))

cv2.imshow('img',img)
cv2.waitKey(0)

首先你可以通过pytesseract.image_to_string()函数,检测出图片上的英文字母和数字

 其次我们可以通过函数pytesseract.image_to_boxes()打印出每个数字或者字母的坐标,为后续的步骤做准备。

import cv2
import pytesseract

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

img = cv2.imread('Rescources/textone.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#print(pytesseract.image_to_string(img))
print(pytesseract.image_to_boxes(img))


cv2.imshow('img',img)
cv2.waitKey(0)

 接下来先完成字符检测。我们要给识别出来的英文和数字加个方框。

import cv2
import pytesseract

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

img = cv2.imread('Rescources/textone.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#print(pytesseract.image_to_string(img))
#print(pytesseract.image_to_boxes(img))


### Detecting Characters  检测字符
Himg,Wimg,_ = img.shape
boxes = pytesseract.image_to_boxes(img)
for box in boxes.splitlines():
    #print(box)
    box = box.split(' ')
    #print(box)
    x,y,w,h = int(box[1]),int(box[2]),int(box[3]),int(box[4])#坐标是以左下角为中心,所以下面计算坐标要换算
    cv2.rectangle(img,(x,Himg-y),(w,Himg-h),(0,0,255),2)
    cv2.putText(img,box[0],(x,Himg-y+20),cv2.FONT_HERSHEY_DUPLEX,1,(0,50,255),2)


cv2.imshow('img',img)
cv2.waitKey(0)

这一步基本上没啥难度,就是在获取的坐标上做文章而已。

 当然我们我们只完成这点操作是远远不够的,我们要识别单词

import cv2
import pytesseract

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

img = cv2.imread('Rescources/textone.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#print(pytesseract.image_to_string(img))
#print(pytesseract.image_to_boxes(img))


### Detecting Words 检测单词
Himg,Wimg,_ = img.shape
boxes = pytesseract.image_to_data(img)
print(boxes)
for x,b in enumerate(boxes.splitlines()):#如果是单词被识别出来,会返回12个参数
    if x!=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.rectangle(img, (x,y), (w+x, h+y), (0, 0, 255), 2)
            cv2.putText(img, b[11], (x,y), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 50, 255), 2)


cv2.imshow('img',img)
cv2.waitKey(0)

 你也可以更改配置来自由的选择自己识别的是什么,比如说只识别数字,这是ome 和psm的具体参数代表的意思。

 

cong = r'--oem 3 --psm 6 outputbase digits'#添加命令
boxes = pytesseract.image_to_data(img,config=cong)

只需要在上面一个程序中增加和修改这些即可

import cv2
import pytesseract

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

img = cv2.imread('Rescources/textone.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#print(pytesseract.image_to_string(img))
#print(pytesseract.image_to_boxes(img))


### Detecting Words 检测单词
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()
        if len(b)==12:#判断是否返回的是单词,利用是否是十二个参数
            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), 2)
            cv2.putText(img, b[11], (x,y), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 50, 255), 2)


cv2.imshow('img',img)
cv2.waitKey(0)

 

ok,这次的小项目就到这里啦,下次见。

  • 4
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值