五分钟,零基础也能入门 Python 图像文字识别

👈👈👈 欢迎点赞收藏关注哟

首先分享之前的所有文章 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164...
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca...

一. 前言

最近在研究 Python 的一些功能 , 也尝试了一些有趣实现, 这一篇就从实践的角度来研究一下 Python 如何实现图片识别。

众所周知 , Python 的库真的老多了,其中在图像识别上比较突出的就是 OpenCV.

那么基于这个库我们能实现什么功能呢?

二. 参与对象简介

  • OpenCV :一个开源的跨平台计算机视觉库 , 支持 C++ ,Java 和 Python
    • 包括图片的读取写入转换图像增强特征提取等等
  • Tesseract : 光学字符识别 (OCR) 的开源引擎 ,用于讲图像转换为可读的文本

三. 简单使用

3.1 环境准备

java 复制代码
// S1 : 安装依赖
pip install numpy matplotlib

// S2 : 安装 OpenCV
pip install opencv-python

// S3 : 安装物理机上面的 tesseract
https://github.com/UB-Mannheim/tesseract/wiki

- PS : 此处默认使用的是 English 语言包 ,如果需要中文,这里要下载新的语言包
- https://tesseract-ocr.github.io/tessdoc/Data-Files.html
- 下载完成后把文件解压到 /Tesseract-OCR/tessdata 中 

// S4 :准备环境变量
@ https://blog.csdn.net/qq_40147863/article/details/82285920
- 环境变量 系统变量 和 用户变量 里面 加上对应的 Path 即可

## S4 : 安装 Python OCR 识别 
pip install pytesseract


//============================
// 扩展功能 :

// 测试一 : 中文包安装情况
> tesseract --list-langs 
- 如果中文包安装成功,就可以看到多个结果

3.2 初代代码展示

python 复制代码
import cv2
import os
import pytesseract

# S1 : 读取图片
image_path = "C:\\Users\\zzg\\Desktop\\test.png"

# S2 : 识别图片
image = cv2.imread(image_path)

# S3 : 使用 OCR 识别文字
text = pytesseract.image_to_string(image,lang='chi_sim')

# 打印文字
print("识别出文字内容:"+text)
  • ❗如果此时未优化执行的情况下 ,大概率是识别不出来的
  • ❓主要原因在于图片没有做合适的处理,或者语言包未加载
  • 对于英文文字, 使用英文模型的效果还是很好的,一段复杂的代码基本上能够识别清楚
  • 对于中文文字 ,整体效果就比较差了

识别了又好像没识别 ,这说明在不进行任何优化的前提下,文字识别的准确率并不高。所以在生产上使用之前,我们要在代码和模型层面进行一定的优化,以达到预期的效果。

四. 深入原理

4.1 什么叫灰度化 ?

将一幅彩色图像转换为灰度图像的过程 ,一般情况下灰度图像只会包含一个通道。

java 复制代码
// 灰度化图像 
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

// 展示图像
cv2.imshow("Image", gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

问题一 :通道是什么 ?

图像中有很多分量用来描述一些信息 ,常见的有颜色通道 ,深度通道 , alpha 通道等。

一般常规的彩色图像包含三个颜色通道 :红色、绿色和蓝色(或多或少都听过,这就是三原色)。

问题二 : 为什么要灰度化 ?

  • 三通道颜色过于复杂,处理难度更大
  • 通过灰度图像消除颜色信息的干扰
  • 避免光照 ,文字颜色 ,背景对识别的影响

4.2 什么是语言包

之前在环境配置的时候也提到过,为了更好的识别中文,需要添加语言包。

Tesseract 的语言包可以帮助 Tesseract 引擎识别特定语言文本的模型文件。

我们需要下载特定的语言包,放在 tessdata 目录下即可。 Tesseract 可以同时兼容多个语言包。也可以自己训练语言包。

@ tesseract-ocr.github.io/tessdoc/Dat...

4.3 优化图像的方式

如果真的需要深度使用,建议认真阅读官方文档 ,在官方文档中提供了大量提高质量的案例 :

其中常见的方式包括 :

  • 重新缩放 : 修改图片的尺寸 ,通过这种方式扩大图片的间隔,提高识别率
  • 二值化 : 灰度化就是二值化的一种,目的是减少复杂的颜色
  • 降噪

通常最常见的就是图像的缩放处理

解决的方案是对图片进行缩放或者切割 ,首先我们看一下图像缩放后的效果 :

  • 原本以为还需要优化很久 ,但是简单扩大一下效果就很明显了

4.4 技术原理

Tesseract 同样是一种基于机器学习计算的实现功能 , 在使用上一样基于大模型实现。

  • Tesseract 基于卷积神经网络 (CNN) 的模型
  • Tesseract 通过不同的组件计算模型文件 ,可以计算单语言模型文件,也可以计算多语言模型文件
  • 在使用时 ,可以使用多个 .traineddata 文件进行分析
  • 入门阶段就不涉及模型的训练了,毕竟我也还不会

五. 最终结果

java 复制代码
import cv2
import os
import pytesseract


# 读取图片
image_path = "C:\\Users\\zzg\\Desktop\\test2.png"
# 检查文件是否存在
if not os.path.isfile(image_path):
    print("错误:图像文件未找到!")
    exit()

image = cv2.imread(image_path)

# 灰度化图片
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 对图片进行缩放
image_big = cv2.resize(gray_image, dsize=(None, None), fx=3, fy=3, interpolation=cv2.INTER_CUBIC)

# 降噪图片
denoised_image = cv2.GaussianBlur(image_big, (5, 5), 0)

# 使用 OCR 识别文字
text = pytesseract.image_to_string( denoised_image,lang='chi_sim')

# 打印文字
print("识别出文字内容:"+text)

总结

这篇是第一篇学习的文档 ,重在了解这种使用方式。

后续会扩展到 复杂图像 以及 业务级使用。欢迎关注。

参考文档

zhuanlan.zhihu.com/p/110647131

相关推荐
yanlele1 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
ai小鬼头1 小时前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
九年义务漏网鲨鱼1 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
元宇宙时间2 小时前
Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
人工智能·去中心化·区块链
开发者工具分享2 小时前
文本音频违规识别工具排行榜(12选)
人工智能·音视频
萧曵 丶2 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
产品经理独孤虾2 小时前
人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像
人工智能·机器学习·ai·大模型·产品经理·商品画像·商品工业属性
老任与码2 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
小兵张健2 小时前
武汉拿下 23k offer 经历
java·面试·ai编程
蹦蹦跳跳真可爱5892 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉