五分钟,零基础也能入门 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%免费

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前缀和算法(1)

一维前缀和[模板] 一、题目描述 OJ题目链接&#xff1a;【模板】前缀和_牛客题霸_牛客网 二、思路解析 三、代码 #include <iostream> using namespace std; const int N 100010; long long arr[N], dp[N]; int n, q; int main() {cin >> n >> q;// 读取…

Spring Data Elasticsearch 与ES版本对应关系记录

参考&#xff1a; Versions :: Spring Data Elasticsearch

0基础 三个月掌握C语言(15)

动态内存管理 为什么要有动态内存分配 我们已经掌握的内存开辟⽅式有&#xff1a; int val 20; //在栈空间上开辟四个字节 char arr[10] {0}; //在栈空间上开辟10个字节的连续空间 但上述的开辟空间的⽅式有两个特点&#xff1a; • 空间开辟⼤⼩是固定的。 • 数组…

让AI给你写代码(七)- 结合语意匹配,引导AI小助手逐步完善代码,新增功能(下)案例说明

结合上一篇 让AI给你写代码&#xff08;六&#xff09;- 结合语意匹配&#xff0c;引导AI小助手逐步完善代码&#xff0c;新增功能&#xff08;上&#xff09; 我们看一个实际的通过提示引导小助手逐步集成构建代码的实例 例子很简单&#xff1a; 获得指定股票最近一定时间的&a…

GNU Radio之OFDM Carrier Allocator底层C++实现

文章目录 前言一、OFDM Carrier Allocator 简介二、底层 C 实现1、make 函数2、ofdm_carrier_allocator_cvc_impl 函数3、calculate_output_stream_length 函数4、work 函数5、~ofdm_carrier_allocator_cvc_impl 函数 三、OFDM 数据格式 前言 OFDM Carrier Allocator 是 OFDM …

Docker进阶:Docker Swarm —弹性伸缩调整服务的副本数量

Docker进阶&#xff1a;Docker Swarm —弹性伸缩调整服务的副本数量 1、 创建一个Nginx服务&#xff08;Manager节点&#xff09;2、查看服务状态&#xff08;Manager节点&#xff09;3、测试访问&#xff08;Worker节点&#xff09;4、查看服务日志&#xff08;Manager节点&am…

mysql 高阶语句 与视图

目录 一 前言 二 msql 高阶语句使用方法 &#xff08;一&#xff09; 查询并排序&#xff08;order by&#xff09; 1&#xff0c;排序方式 2&#xff0c;查询指定列 并排序 3, 条件判断&#xff08;过滤指定行&#xff09; 再查询指定列 并排序 4&#xff0c;查…

IDEA的Scala环境搭建

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

IDEA2023版本创建spring boot项目时,Java版本无法选择Java8问题解决

先简单说下出现本问题的原因&#xff1a; spring boot3.0发布时提到未来Java17将会成为主流版本&#xff0c;所有的Java EE Api都需要迁移到Jakarta EE上来。而spring boot3.0及以上版本已经不支持Java8了&#xff0c;支持Java17及以上版本。同时官方支持项目初始化的 Spring B…

智慧公厕的全域感知、全网协同、全业务融合和全场景智慧赋能

公共厕所是城市的重要组成部分&#xff0c;为市民提供基本的生活服务。然而&#xff0c;传统的公厕管理模式存在诸多问题&#xff0c;如排队等候时间长、卫生状况差、空气质量差等&#xff0c;严重影响市民的出行和生活质量。为了解决这些问题&#xff0c;智慧公厕应运而生&…

以智慧公厕建设助推城市的高质量发展

近年来&#xff0c;随着城市化进程的加快&#xff0c;城市基础设施建设日益完善&#xff0c;其中智慧公厕的建设成为了城市高质量发展的重要组成部分。智慧公厕以其智能化管理、数字化使用和信息化运行的特点&#xff0c;将公共厕所的管理水平提升到了一个全新的高度&#xff0…

YOLOv9改进策略:IoU优化 | Wasserstein Distance Loss,助力小目标涨点

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文独家改进&#xff1a;基于Wasserstein距离的小目标检测评估方法 Wasserstein Distance Loss | 亲测在多个数据集能够实现涨点&#xff0c;对小目标、遮挡物性能提升明显 &#x1f4a1;&#x1f4a1;&#x1f4a1;MS COCO和PASC…