👈👈👈 欢迎点赞收藏关注哟
首先分享之前的所有文章 >>>> 😜😜😜
文章合集 : 🎁 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 环境准备
1 | java复制代码// S1 : 安装依赖 |
3.2 初代代码展示
1 | python复制代码import cv2 |
- ❗如果此时未优化执行的情况下 ,
大概率是识别不出来的
- ❓主要原因在于图片没有做合适的处理,或者语言包未加载
- 对于
英文文字
, 使用英文模型的效果还是很好的,一段复杂的代码基本上能够识别清楚 - 对于
中文文字
,整体效果就比较差了
识别了又好像没识别,这说明在不进行任何优化的前提下,文字识别的准确率并不高
。所以在生产上使用之前,我们要在代码和模型层面进行一定的优化
,以达到预期的效果。
四. 深入原理
4.1 什么叫灰度化 ?
将一幅彩色图像转换为灰度图像的过程 ,一般情况下灰度图像只会包含一个通道。
1 | java复制代码// 灰度化图像 |
问题一 :通道是什么 ?
图像中有很多分量
用来描述一些信息
,常见的有颜色通道 ,深度通道 , alpha 通道等。
一般常规的彩色图像包含三个颜色通道 :红色、绿色和蓝色(或多或少都听过,这就是三原色)。
问题二 : 为什么要灰度化 ?
- 三通道
颜色过于复杂
,处理难度更大
- 通过灰度图像消除颜色信息的干扰
- 避免光照 ,文字颜色 ,背景对识别的影响
4.2 什么是语言包
之前在环境配置的时候也提到过,为了更好的识别中文,需要添加语言包。
Tesseract 的语言包可以帮助 Tesseract 引擎识别特定语言文本的模型文件。
我们需要下载特定的语言包,放在 tessdata
目录下即可。 Tesseract 可以同时兼容多个语言包。也可以自己训练语言包。
@ tesseract-ocr.github.io/tessdoc/Dat…
4.3 优化图像的方式
如果真的需要深度使用,建议认真阅读官方文档 ,在官方文档中提供了大量提高质量的案例 :
其中常见的方式包括 :
- 重新缩放 : 修改图片的尺寸 ,通过这种方式扩大图片的间隔,提高识别率
- 二值化 : 灰度化就是二值化的一种,目的是减少复杂的颜色
- 降噪
通常最常见的就是图像的缩放处理
解决的方案是对图片进行缩放或者切割 ,首先我们看一下图像缩放后的效果 :
- 原本以为还需要优化很久 ,但是简单扩大一下效果就很明显了
4.4 技术原理
Tesseract 同样是一种基于机器学习计算的实现功能 , 在使用上一样基于大模型实现。
- Tesseract 基于卷积神经网络 (CNN) 的模型
- Tesseract 通过不同的组件计算模型文件 ,可以计算单语言模型文件,也可以计算多语言模型文件
- 在使用时 ,可以使用多个 .traineddata 文件进行分析
- 入门阶段就不涉及模型的训练了,毕竟我也还不会
五. 最终结果
1 | java复制代码import cv2 |
总结
这篇是第一篇学习的文档 ,重在了解这种使用方式。
后续会扩展到 复杂图像
以及 业务级使用
。欢迎关注。
参考文档
zhuanlan.zhihu.com/p/110647131
本文转载自: 掘金