五分钟,零基础也能入门 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.mzph.cn/news/774518.shtml

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

相关文章

基于RAG的大模型知识库搭建

什么是RAG RAG(Retrieval Augmented Generation),即检索增强生成技术。 RAG优势 部分解决了幻觉问题。由于我们可以控制检索内容的可靠性,也算是部分解决了幻觉问题。可以更实时。同理,可以控制输入给大模型上下文内容的时效性&#xff0c…

Day50:WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

目录 文件包含-原理&分类&利用&修复 文件读取 文件写入 代码执行 远程利用思路 黑盒利用-VULWEB 白盒利用-CTFSHOW-伪协议玩法 78-php&http协议 79-data&http协议 80-81-日志包含 87-php://filter/write&加密编码 88-data&base64协议 …

17、GateWay和Sentinel继承实现服务限流

注:本篇文章主要参考周阳老师讲解的cloud进行整理的! 1、需求说明 cloudalibaba-sentinel-gateway9528 保护 cloudalibaba-provider-payment9001 2、启动nacos服务器8848 startup.cmd -m standalone 3、启动sentinel服务器8080 java -jar sentinel-dash…

企业微信变更主体公证怎么弄?

企业微信变更主体有什么作用?现在很多公司都用企业微信来加客户,有时候辛辛苦苦积累了很多客户,但是公司却因为各种各样的原因需要注销,那么就需要通过企业微信变更主体的方法,把企业微信绑定的公司更改为最新的。企业…

恶意勒索软件VirLock,通过ApkAnalyser一键提取安卓应用APK敏感信息

恶意勒索软件VirLock,通过ApkAnalyser一键提取安卓应用APK敏感信息。 ############################# 免责声明:本文仅作收藏学习之用,亦希望大家以遵守《网络安全法》相关法律为前提学习,切勿用于非法犯罪活动,对于恶…

python和c语言的区别是什么

Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言。本萌新也刚开始接触Python,发现Python与其他语言确实有…

linux查找指定目录下包含指定字符串文件,包含子目录

linux查找指定目录下包含指定字符串的文件,包含子目录 linux查找指定目录下包含指定字符串的指定文件格式,包含子目录 指定目录 cd /home/www/linux查找指定目录下包含指定字符串的文件,包含子目录 grep -r "指定字符串"注释 gr…

测试开发工程师(QA)职业到底需要干些什么?part6:数据测试工程师QA

常见任务和工作内容 作为数据测试工程师QA(Quality Assurance),您的主要职责是确保数据的质量、准确性和一致性。以下是数据测试工程师QA的一些常见任务和工作内容: 数据验证和准确性测试:您将负责验证数据的准确性和…

Python基础教程:基本数据类型

基本数据类型 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组) 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合) Numbers(数字) 数字数据类型用于存储数值。 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对…

【爬虫基础】第1讲 网络爬虫基本知识

什么是网络爬虫 网络爬虫(Web crawler)是一种自动化程序,用于在互联网上收集信息。它可以通过扫描和解析网页的超链接,自动访问网页并抓取所需的数据。网络爬虫常用于搜索引擎和数据采集工具中。 作用 通过有效的爬虫手段批量采…

鸿蒙HarmonyOS应用开发——组件级配置

在开发应用时,需要配置应用的一些标签,例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。 应用包名配置 应用需要在工程的AppScope目录下的 app.json5配置文件 中配置bundleName标签,该标签用于标识应用…

班级综合测评管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. …

Vitest 单元测试方案

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

鸿蒙OS开发案例:【API9】遍历沙漏文件夹并输入文件的大小

1.获取打印文件大小 /*** 获取打印文件大小*/static getFileSize(byteNum: number) {if (byteNum < 0) {return "shouldnt be less than zero!";} else if (byteNum < 1024) {return ${byteNum.toFixed(3)}B;} else if (byteNum < 1048576) {return (byteNu…

Mysql各种日志管理

文章目录 事务日志事务日志的记录过程事务日志类型事务日志的相关变量 错误日志二进制日志功能作用文件的构成日志格式查看日志删除日志 通用日志慢查询日志 Mysql日志记录着数据库在运行过程中的各种操作&#xff0c;帮助管理员定位查找问题。 事务日志 事务日志(Transaction…

(原型与原型链)前端八股文修炼Day5

一 原型链的理解 原型链定义&#xff1a; 原型链是 JavaScript 中实现对象继承的关键机制之一&#xff0c;它是一种对象之间的关系&#xff0c;通过这种关系&#xff0c;一个对象可以继承另一个对象的属性和方法。 原型链的组成&#xff1a; 每个对象都有一个指向另一个对象的…

Vue3尚硅谷张天禹笔记

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

每日一题 --- 删除链表的倒数第 N 个结点[力扣][Go]

删除链表的倒数第 N 个结点 题目&#xff1a;19. 删除链表的倒数第 N 个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#x…

zotero+word优化管理参考文献

写论文&#xff0c;整理参考文献&#xff0c;管理参考文献很麻烦&#xff0c;参考文献格式罗列很麻烦&#xff0c;论文需要修改时&#xff0c;重新调整参考文献顺序很麻烦。 zoteroword可以很好的帮助解决这个问题。 Step1 zotero软件安装 默认word你已经安装好了 step2 安…

linux下的打包/解包命令(tar,zip/unzip)

目录 打包/解包 作用 zip -r选项 unzip -d选项 如果不使用递归压缩 -l / -v选项 tar 介绍 选项 示例 打包/解包 作用 使多个文件变成一个文件,不易造成数据缺失使下载时间变短 zip 将目录或文件压缩成zip格式 -r选项 递归式压缩某目录及其所有子目录中的文件 如果不…