当前位置:   article > 正文

第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR_opencv ocr识别(1)_ocropus安装python

ocropus安装python

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

result = “H3llo, W0r1d!”

进行文字后处理

processed_text = postprocess_text(result)

打印处理后的结果

print(processed_text)


在上述示例中,我们定义了一个 `postprocess_text()` 函数来执行文字后处理操作。这个函数使用正则表达式 `re.sub()` 来去除非字母和数字的字符,只保留字母和数字。你可以根据实际需求定制自己的规则来去除其他特定字符。


除了去除噪声外,文字后处理还可以用于校正识别错误和整理识别结果的格式。校正错误的方法可以根据实际情况选择,例如使用拼写纠正算法或者通过与词典进行比对来进行修正。整理格式的方法也可以根据需求进行定制,例如添加分隔符、调整字母大小写等。


在示例代码中,我们假设识别结果存储在 `result` 变量中,然后将其传递给 `postprocess_text()` 函数进行后处理。处理后的结果存储在 `processed_text` 变量中,并打印输出。


请注意,这只是一个简单的示例代码,实际的文字后处理操作可能会更加复杂,需要根据具体需求进行定制。你可以根据实际情况来编写适合你的后处理函数,以提高文字识别结果的准确性和质量。


### 六、OpenCV结合Tesseract OCR库实现文字识别示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/993ac2c8127f4238b741794c6be55c58.jpg)以下是一个示例代码,展示了如何结合 OpenCV 和 Tesseract OCR 进行文字识别:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

import cv2
import pytesseract

读取图像

image = cv2.imread(‘image.jpg’)

灰度化

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

二值化

_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

使用 Tesseract 进行文字识别

result = pytesseract.image_to_string(binary, lang=‘eng’)

打印识别结果

print(result)


在上述示例中,我们首先使用 `cv2.imread()` 函数读取图像文件,将图像存储在 `image` 变量中。


接下来,使用 `cv2.cvtColor()` 函数将彩色图像转换为灰度图像,将结果存储在 `gray` 变量中。


然后,使用 `cv2.threshold()` 函数对灰度图像进行二值化处理,将结果存储在 `binary` 变量中。在这个示例中,我们使用了 OTSU 自适应阈值算法。


最后,使用 `pytesseract.image_to_string()` 函数将二值图像传递给 Tesseract OCR 引擎进行文字识别。通过指定 `lang` 参数来选择使用的语言,这里使用了英文 `'eng'`。


识别结果会存储在 `result` 变量中,你可以根据需要进行后续处理或打印输出。


请注意,运行此代码之前,你需要先安装并配置好 OpenCV 和 Tesseract OCR。你可以通过 `pip install opencv-python` 和 `pip install pytesseract` 命令来安装相应的库。同时,确保已经下载并安装了 Tesseract OCR 的语言数据包,以支持相应语言的识别。


这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行图像预处理、文字区域检测等步骤,以达到更好的文字识别效果。你还可以通过调整 Tesseract OCR 的参数来优化识别结果,例如设置字典、调整识别方式等。


### 七、OpenCV结合OCRopus库文字识别示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/d09056c3ce6a4a77839c1e13d4bd5219.jpg)OCRopus 是一个基于 Tesseract 的 OCR 引擎,它提供了更多的自定义和扩展性,允许你根据特定需求进行训练和优化,以提高文字识别的效果。下面是一个使用 OpenCV 结合 OCRopus 进行文字识别的示例代码:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

import cv2
from ocropy import ocrolib

读取图像

image = cv2.imread(‘image.jpg’)

灰度化

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

二值化

_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

保存图像到临时文件

cv2.imwrite(‘temp.png’, binary)

使用 OCRopus 进行文字识别

ocrolib.iopen(‘temp.png’).binarize().write_page(‘temp.ocropus’)
ocrolib.tesseract_page(‘temp.ocropus’).write_text()

读取识别结果

with open(‘temp.txt’, ‘r’, encoding=‘utf-8’) as file:
result = file.read()

打印识别结果

print(result)


在上述示例中,我们首先使用 `cv2.imread()` 函数读取图像文件,将图像存储在 `image` 变量中。


接下来,使用 `cv2.cvtColor()` 函数将彩色图像转换为灰度图像,将结果存储在 `gray` 变量中。


然后,使用 `cv2.threshold()` 函数对灰度图像进行二值化处理,将结果存储在 `binary` 变量中。在这个示例中,我们使用了 OTSU 自适应阈值算法。


接下来,我们将二值图像保存到临时文件 `temp.png` 中,以便 OCRopus 进行处理。


然后,使用 OCRopus 的 `ocrolib` 模块来进行文字识别。我们首先使用 `ocrolib.iopen()` 函数打开二值图像文件,然后使用 `.binarize()` 方法对图像进行二值化处理,并将处理结果保存为 OCRopus 的页面格式 `temp.ocropus`。


接着,使用 `ocrolib.tesseract_page()` 函数对页面进行 OCR 识别,并将识别结果保存为文本文件 `temp.txt`。


最后,我们读取文本文件中的识别结果,并将其存储在 `result` 变量中。你可以根据需要进行后续处理或打印输出。


请注意,在运行此代码之前,你需要先安装并配置好 OCRopus 和 Tesseract OCR。你可以通过 `pip install ocropy` 命令来安装 OCRopus。同时,确保已经下载并安装了 Tesseract OCR 的语言数据包,以支持相应语言的识别。


这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行图像预处理、文字区域检测等步骤,以达到更好的文字识别效果。你还可以根据需要调整 OCRopus 的参数和配置文件,以优化识别结果。


### 八、OpenCV 结合Google Cloud Vision API 文字识别示例代码


要结合 OpenCV 和 Google Cloud Vision API 进行文字识别,你需要先设置好 Google Cloud 平台的相关服务,并安装 `google-cloud-vision` 库。下面是一个示例代码,展示了如何使用 OpenCV 结合 Google Cloud Vision API 进行文字识别:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

import cv2
from google.cloud import vision

读取图像

image = cv2.imread(‘image.jpg’)

将图像转换为字节流

_, img_encoded = cv2.imencode(‘.jpg’, image)
img_bytes = img_encoded.tobytes()

使用 Google Cloud Vision API 进行文字识别

client = vision.ImageAnnotatorClient()
image = vision.Image(content=img_bytes)
response = client.text_detection(image=image)
texts = response.text_annotations

打印识别结果

for text in texts:
print(text.description)


在上述示例中,我们首先使用 `cv2.imread()` 函数读取图像文件,将图像存储在 `image` 变量中。


然后,我们使用 `cv2.imencode()` 函数将图像编码为 JPG 格式的字节流,然后将其转换为字节字符串 `img_bytes`。


接下来,我们使用 `google-cloud-vision` 库中的 `ImageAnnotatorClient` 类创建一个 Cloud Vision API 的客户端。


然后,我们将图像字节字符串传递给 `vision.Image` 类创建一个图像对象 `image`。


接着,我们使用 `client.text_detection()` 方法对图像进行文字识别,返回一个包含文字信息的响应对象 `response`。


最后,我们从响应对象中提取出识别结果 `texts`,并遍历打印每个文字块的内容。


请注意,在运行此代码之前,你需要先在 Google Cloud 平台上创建一个项目,并启用 Vision API 服务。然后,你需要安装 `google-cloud-vision` 库,并配置好你的身份验证凭据。


此外,你还可以根据需要,使用 Cloud Vision API 的其他功能,如检测文字语言、识别文本坐标等。具体的 API 使用方法和参数设置可以参考 Google Cloud Vision API 的官方文档。


这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行图像预处理、文字区域检测等步骤,以达到更好的文字识别效果。同时,你需要根据你的实际需求和云平台的限制,选择适合的服务套餐和配置。


### 九、OpenCV结合图像预处理技术文字识别示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/74f9d29861fa4def914a56acf43439eb.jpg)在文字识别之前,进行图像预处理是提高识别准确性的重要步骤。OpenCV 提供了丰富的图像处理函数和算法,可以用于各种预处理技术。以下是一些常见的预处理技术示例代码:


1. 灰度化:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

import cv2

读取彩色图像

image = cv2.imread(‘image.jpg’)

将图像转换为灰度图像

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)


2. 二值化:



  • 1
  • 2
  • 3
  • 4
  • 5

import cv2

读取灰度图像

gray = cv2.imread(‘gray_image.jpg’, 0)

使用固定阈值二值化

_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

使用自适应阈值二值化

binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)


3. 去噪:



  • 1
  • 2
  • 3
  • 4
  • 5

import cv2

读取图像

image = cv2.imread(‘image.jpg’)

使用中值滤波去除噪声

denoised = cv2.medianBlur(image, 5)

使用高斯滤波去除噪声

denoised = cv2.GaussianBlur(image, (5, 5), 0)


4. 图像增强:



  • 1
  • 2
  • 3
  • 4
  • 5

import cv2
import numpy as np

读取图像

image = cv2.imread(‘image.jpg’)

灰度化

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

直方图均衡化

equalized = cv2.equalizeHist(gray)

自适应直方图均衡化

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
adaptive_equalized = clahe.apply(gray)


这些是一些常见的图像预处理技术示例代码,你可以根据具体情况选择适合的预处理步骤和参数。在实际应用中,可能需要结合多种预处理技术,并进行参数调整和优化,以获得最佳的文字识别效果。


请注意,在使用 OpenCV 进行图像预处理时,可以根据图像的特点和需求选择适当的函数和算法。同时,还可以结合其他图像处理库或算法,如 PIL、numpy 等,以实现更复杂的图像处理任务。


这些示例代码只是为了演示常见的图像预处理技术,并不能覆盖所有情况。在实际应用中,你可能需要根据具体需求进行更详细和复杂的图像处理操作。


### 十、OpenCV结合文字区域检测技术文字识别示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/366d3b4d6e074296bcb9e41950ee18f2.jpg)在文字识别过程中,确定图像中的文字区域是一个关键步骤。OpenCV 提供了多种文字区域检测技术的实现方法,包括边缘检测、轮廓检测和连通组件分析。以下是一些示例代码,展示了如何使用 OpenCV 结合这些技术来识别文字区域:


1. 边缘检测:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

import cv2

读取图像

image = cv2.imread(‘image.jpg’)

灰度化

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Canny 边缘检测

edges = cv2.Canny(gray, 50, 150)


2. 轮廓检测:



  • 1
  • 2
  • 3
  • 4
  • 5

import cv2

读取图像

image = cv2.imread(‘image.jpg’)

灰度化

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

二值化

_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

查找轮廓

contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)


3. 连通组件分析:



  • 1
  • 2
  • 3
  • 4
  • 5

import cv2

读取图像

image = cv2.imread(‘image.jpg’)

灰度化

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

二值化

_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

连通组件分析

_, labels, stats, _ = cv2.connectedComponentsWithStats(binary)


在上述示例中,我们首先使用 `cv2.imread()` 函数读取图像文件,将图像存储在 `image` 变量中。


然后,我们根据需要进行灰度化操作,将彩色图像转换为灰度图像。


接下来,我们可以选择使用边缘检测的方法,如 `cv2.Canny()` 函数,或者使用轮廓检测的方法,如 `cv2.findContours()` 函数,来获取图像中的文字区域的边缘或轮廓信息。


另外,我们还可以使用连通组件分析的方法,如 `cv2.connectedComponentsWithStats()` 函数,来获取图像中的文字区域的连通组件信息。


请注意,这些示例代码只是为了演示常见的文字区域检测技术,并不能覆盖所有情况。在实际应用中,你可能需要根据具体需求和图像特点,选择适合的方法和参数,并进行适当的后处理和优化,以获得准确的文字区域。


同时,你还可以结合其他图像处理技术,如形态学操作、角点检测等,来进一步提高文字区域的检测效果。


### 十一、归纳总结


![在这里插入图片描述](https://img-blog.csdnimg.cn/263e2d0e129e4649851f7e568d883a32.png)OpenCV 是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉功能。结合 OCR(Optical Character Recognition)技术,可以实现文字识别的功能。下面是关于 OpenCV 文字识别与 OCR 的一些归纳总结知识点:


1. 图像预处理:在文字识别之前,通常需要对图像进行预处理,以提高识别准确性。常见的预处理技术包括灰度化、二值化、去噪、图像增强等。OpenCV 提供了丰富的图像处理函数和算法,可以用于这些预处理步骤。
2. 文字区域检测:确定图像中的文字区域是文字识别的关键步骤。常用的文字区域检测技术包括边缘检测、轮廓检测、连通组件分析等。OpenCV 提供了这些功能的实现方法,可以帮助你找到图像中的文字区域。
3. OCR 引擎:OCR 引擎是实现文字识别的核心组件。OpenCV 并没有内置 OCR 功能,但可以与其他 OCR 引擎集成,如 Tesseract、OCRopus 等。这些 OCR 引擎提供了强大的文字识别能力,可以识别多种语言和字体的文字。
4. 文字识别流程:文字识别通常包括图像预处理、文字区域检测和文字识别三个主要步骤。通过使用 OpenCV 进行图像预处理和文字区域检测,再结合 OCR 引擎进行文字识别,可以实现完整的文字识别流程。
5. 参数调优:在进行文字识别时,需要根据具体情况进行参数调优,以获得最佳的识别效果。例如,在图像预处理中,可以调整灰度化方法、二值化阈值等参数;在文字区域检测中,可以选择合适的边缘检测算法、轮廓检测方法等。
6. 多语言支持:OCR 引擎通常支持多种语言的文字识别。你可以根据需要选择合适的语言模型和字库,以支持相应语言的识别。
7. 性能优化:文字识别可能涉及大量的图像处理和计算操作,对计算资源要求较高。为了提高性能,可以采用多线程、GPU 加速等技术手段,以加快文字识别的速度。![在这里插入图片描述](https://img-blog.csdnimg.cn/e1fa008e35544410a6e83e90b926beb0.png)


这些是关于 OpenCV 文字识别与 OCR 的一些归纳总结知识点。在实际应用中,需要根据具体需求和场景,选择合适的方法和工具,进行适当的参数调优和优化,以获得准确和高效的文字识别结果。



### 最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~  

给大家准备的学习资料包括但不限于:  

Python 环境、pycharm编辑器/永久激活/翻译插件  

python 零基础视频教程  

Python 界面开发实战教程  

Python 爬虫实战教程  

Python 数据分析实战教程  

python 游戏开发实战教程  

Python 电子书100本  

Python 学习路线规划

![](https://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/818169
推荐阅读
相关标签
  

闽ICP备14008679号