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

一. 前言

最近在研究 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)
  • ❗如果此时未优化执行的情况下 ,大概率是识别不出来的
  • ❓主要原因在于图片没有做合适的处理,或者语言包未加载

image.png

image.png

  • 对于英文文字, 使用英文模型的效果还是很好的,一段复杂的代码基本上能够识别清楚
  • 对于中文文字 ,整体效果就比较差了

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

四. 深入原理

4.1 什么叫灰度化 ?

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

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

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

image.png

问题一 :通道是什么 ?

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

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

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

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

4.2 什么是语言包

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

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

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

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

4.3 优化图像的方式

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

  • @ 提高输出质量
  • @ 官方文档目录

其中常见的方式包括 :

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

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

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

image.png

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

4.4 技术原理

image.png

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)

总结

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

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


关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码免费领取保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/493268.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有效三角形的个数【双指针】

1.优化版暴力求解 如果能构成三⻆形,需要满⾜任意两边之和要⼤于第三边。实际上只需让较⼩的两条边之和⼤于第三边即可。将原数组排序,从⼩到⼤枚举三元组,这样三层 for 循环枚举出的三元组只需判断较⼩的两条边之和是否⼤于第三边。 class…

新一代酒店智能客控方案亮相上海酒店展:力合微PLC技术推动酒店智能化升级

3月26日,2024上海国际酒店及商业空间博览会(以下简称:上海酒店展)于上海新国际博览中心开幕。作为行业领先的物联网通信芯片企业,22年专注于PLC(电线通信)技术及芯片,(股…

代理与 XLogin 集成

代理与 XLogin 集成 通过将 Smartdaili 住宅代理与强大的 XLogin 反检测浏览器相匹配来解锁网络数据。 什么是 XLogin? XLogin 是一款防关联浏览器,具有多重指纹保护技术,可通过 Selenium 网络驱动程序实现任务自动化,并为每个…

变量,前世你也许是个过客!

很多书中喜欢将变量比喻成一个容器,比如盒子、碗之类的。但老金认为这个比喻有失妥当。按字面意思理解,变量只是一个可以改变的量,就像函数中的自变量x、因变量y一样。变量本身并不具有存储功能,有存储功能的是内存,所…

rmvb怎么转换为mp4?最简单方法!

各种文件格式层出不穷,而RMVB(RealMedia Variable Bitrate)格式作为一种独特的视频文件格式,其起源可以追溯到上世纪90年代。当时,随着数字视频的崛起,RealNetworks公司迎来了一项重要任务:提供…

【LVGL-平铺视图部件(lv_tileview)】

LVGL-平铺视图部件(lv_tileview) ■ LVGL-平铺视图部件(lv_tileview)■ 示例一:添加到行列中的位置(1,0)表示第1列第0行■ 示例二:滑动方向LV_DIR_RIGHT ,LV_DIR_LEFT■ …

Web Components初探

组件化,标签语义化,是前端发展的趋势。现在流行的组件化框架有React、Vue等,标签语义化在H5中添加的article、dialog等。 Web Components 就是类似的一套技术,允许您创建可重用的定制元素,并且在您的web应用中使用它们…

cesium 创建实体

1、 entity 1.1 entity类型整理 Entity分类 1.2 entity添加 椭圆 const ellipse new Cesium.Entity({position: Cesium.Cartesian3.fromDegrees(114.3, 39.9, 100),ellipse: {semiMinorAxis: 30000, //椭圆的短半轴semiMajorAxis: 40000, //椭圆的长半轴extrudedHeight: 0…

如何使用Fiddler对手机进行弱网测试?(干货教程)

1.首先,fiddler连接手机 1)Tools->Options->Connections->设置端口8888,勾选Allow remote computers to connect 2)配置手机 注:手机和电脑需要在同一局域网下 手机进入网络详情,将代理改为手动 设置主机名、端口 主机…

Python中的变量与常量

变量:在程序运行过程中,值会发生变化的量, 常量:在程序运行过程中,值不会发生变化的量。 无论是变量还是常量,在创建时都会在内存中开辟一块空间,用于保存它的值。 Python 中的变量不需要声明…

基于yolo-world与mobile_sam实现类似lang-segment-anything

lang-segment-anything基于segment-anything 和 GroundingDINO 实现基于语言分割出任意对象,但是segment-anything 模型与GroundingDINO 都是运算量比较大的模型。而mobile_sam号称是sam的同等性能替代品,而yolo-world同样是号称比GroundingDINO 更快更准…

那如何解决信创设配问题呢?怎么成为信创产品?

信创也好、国产化也好都是国家部署的重点工作,所有涉及到的相关行业和部门都必须坚持执行和并且要执行好的重点任务,这一点无容置疑。在信息化层面,随着我国基础水平(芯片、OS、DB、中间件)的提升,信创工作…

vscode c++环境配置

1.基础软件安装 安装Visual Studio Code. 安装C拓展。点击在vscode界面最左侧的Extensions图标(打开快捷键:ctrlshiftX),搜索“C/C”,点击进行安装。 确保已安装gcc. 一般ubuntu系统会预装gcc.在终端窗口中输入如下…

KingSCADA|如何实现文本显示设备的实时通讯状态?

哈喽,你好啊,我是雷工! 在SCADA项目中,有些要求在界面上实时显示SCADA系统与设备的实时通讯状态,来及时了解PLC或其他设备与SCADA系统的通讯状态是否正常,以及简单的通讯异常分析,在KingSCADA中该如何实现通讯状态的文本显示呢? 接下来用简单的样例介绍KingSCADA如何实…

整数的反转

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。 public class _01数字反转 {public static void main(String[] args) {Scanner input n…

IDEA的Scala环境搭建

目录 前言 Scala的概述 Scala环境的搭建 一、配置Windows的JAVA环境 二、配置Windows的Scala环境 编写一个Scala程序 前言 学习Scala最好先掌握Java基础及高级部分知识,文章正文中会提到Scala与Java的联系,简单来讲Scala好比是Java的加强版&#x…

基于 YAML 接口自动化测试框架设计

在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV),或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测…

LeetCode:2642. 设计可以求最短路径的图类(SPFA Java)

目录 2642. 设计可以求最短路径的图类 题目描述: 实现代码与解析: SPFA 原理思路: 2642. 设计可以求最短路径的图类 题目描述: 给你一个有 n 个节点的 有向带权 图,节点编号为 0 到 n - 1 。图中的初始边用数组 e…

20240320-1-梯度下降

梯度下降法面试题 1. 机器学习中为什么需要梯度下降 梯度下降的作用: 梯度下降是迭代法的一种,可以用于求解最小二乘问题。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。…

一文读懂:什么是工单系统?市面上有哪些好用的工单系统?

什么是工单管理系统?工单系统如何帮助企业解决管理问题?市面上有哪些好用的工单管理系统?不同工单管理系统适用于什么企业?工单管理系统如何定价? 5000字长文,我写了整整一天!梳理了大家对工单…