图形验证码文字识别——pytesseract

2023-11-10

一、目的

我们工作中会遇到一些需要把图片中的文字识别出来使用的例子,比如:图形验证码、提取图片中的文章等

如果工作量比较小或者不需要重复执行的话人工就可以啦,但是恰恰一些场景是需要我们实现自动化识别的

这就很烦,急需一个来实现此功能的方法,我们常用的是OCR识别,但是怎么识别?
在这里插入图片描述

二、实现方式

本文主要是通过python的pytesseract库来实现图片中文字的识别,

实际是通过pytesseract调用tesseract的OCR来进行识别图片中的文案内容,然后把识别出的内容进行打印等操作

三、环境准备

  • pytesseract库

    • 安装:pip install pytesseract【因为要调用pytesseract库所以需要提前安装】
  • tesseract

    • 安装:https://blog.csdn.net/Alexa_/article/details/121192132

    • 语言包讲述 :在安装时记得选择语言包,我们常用的是英文、中文(默认是英文):eng、chi_sim(可以在安装包路径\tessdata下查看是.traineddata文件,缺少的话也可以单独下载:https://developer.aliyun.com/article/832266

    • 设置pytesseract.py调用OCR路径: 【安装好pytesseract之后调用会报错原因是没有指定OCR的路径】
      修改文件:pytesseract库所在文件夹的pytesseract.py文件(没设置路径报错文件点击跳转可以快速进入)

四、代码实现

import pytesseract

def images_to_string(num):
	# 打开本地图片,或者网络获取也可以
    name = '验证码\\'+ str(num) +'.png'
    img1 = Image.open(name)
	
    # 获取图片的长宽用于复杂背景图片文字的定位提取
    w, h = img1.size
    print('Original image size: %sx%s' % (w, h))
    # 因为是PNG图片,像素不是直接以RGB保存的,PNG的每个像素里还有透明度
    
    img1rbg = img1.convert('RGB')

    # 读取全部的像素数据
    src_strlist = img1rbg.load()

    # 获取主干颜色用于提取出确定颜色的文字,防止背景干扰
    # 可以打开图片然后画图工具标一下就能获取到想要颜色的坐标
    data = src_strlist[119, 26]
    print(data)

    # 双层循环开始替换全部的像素点颜色确保只保留符合我们要求的文字颜色
    for x in range(0, w):
        for y in range(0, h):
            # 判断当前点颜色是否等于主干颜色
            co = src_strlist[x, y]
            if co[0] < 30 and co[1] <30 :
                src_strlist[x, y] = (0, 0, 0)
            else:
                src_strlist[x, y] = (255, 255, 255)
    # 输出处理过的图片,用于查看
    nume01 = '验证码\\处理\\'+str(num)+ '.png'
    img1rbg.save(nume01)

    # 直接调用内存里的PIL image对象进行图片识别,这里lang是声明识别文字使用的语言包,默认是英文,chi_sim代表中文
    text = pytesseract.image_to_string(img1rbg,lang='chi_sim')
    # 打印结果
    print(text)
   # 保存 识别出的文字到文本
    with open('验证码\\11.txt','ab') as fier:
        fier.write('\n'.encode())
        fier.write(('这是第几张图片'+str(num)).encode())
        fier.write('\n'.encode())
        fier.write(text.encode())

# 调用函数,提取本地15张图片中的文字到TXT文件
for num in range(15):
    images_to_string(num)

五、拓展

遗留问题:对于规整的文案识别清晰度很高,但是对于一些崎岖的文字/数字识别很容易出问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图形验证码文字识别——pytesseract 的相关文章

随机推荐

  • maven仓库快速镜像

    国内连接maven官方的仓库更新依赖库 网速一般很慢 收集一些国内快速的maven仓库镜像以备用 国内OSChina提供的镜像 非常不错
  • 网络编程_常用的基本函数介绍——htonl、ntohl、htons、ntohs

    1 htonl函数 将主机的unsigned long值转换成网络字节顺序 32位 一般主机跟网络上传输的字节顺序是不通的 分大小端 函数返回一个网络字节顺序的数字 include stdafx h include
  • uni-app如何配置隐私政策

    uni app如何配置隐私政策 在manifest json中 的privacy中可以配置 注意点 隐私政策可以使用http 地址 如果隐私政策需要使用本地文件 可以把html放在hybrid文件夹中 注意a链接的地址 正确写法如下图
  • React 好用的工具库

    俗话说的好 工欲善其事 必先利其器 笔者在开发 React 项目的时候 总结出一些很不错的 React 库 可以提高开发效率 满足业务需求 接下来将一一介绍它们 UI组件库 Ant Design 要说 React 最受欢迎的 UI 组件库
  • elasticsearch7新特性_Elasticsearch 7.0 已经发布,盘他!

    Elastic ON 北京分享了Elasticsearch7 0在Speed Scale Relevance等方面的很多新特性 比快更快 有传说中的那么牛逼吗 盘他 通过本文 你能了解到 Elasticsearch Kibana 7 部署体
  • Linux中Docker入门知识基础

    Linux中Docker入门知识docker基础 1 Docker概述 我们开发的代码会接触到不同环境 开发环境 测试环境以及生产环境 1 1 Docker概述 Docker 是一个开源的应用容器引擎 Docker 可以让开发者打包他们的应
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络 低功耗 低功耗蓝牙 低功耗蓝牙 Bluetooth Low Energy 是一项相当成功的无线技术 如今已经很难找到不支持低功耗蓝牙的智能手机或平板电脑了 可以说它是可穿戴技术兴起的关键因素 在医疗设
  • wifi名称可以有空格吗_公司刚成立不久,公司名称可以变更吗?

    最近有很多老板在问 想要把公司的名字改一改 可以吗 所以今天护航财税的小编来告诉大家 已经注册好的公司能不能变更名字 1 公司名称可以更改吗 其实公司名称是可以更改的 当企业在经营的过程中由于发展或其他原因需要 想要更改公司的 可以向工商局
  • git:回滚某次修改,revert某个commit的操作但不生成提交

    说明 在使用小乌龟进行回滚时 我们发现通常是不会提交的 而在gitbash里 我们使用git revert时 却发现会自动生成一次提交 原因是命令不对 通常我们需要使用git revert n sha 1 某次提交的sha 1值 这样就不会
  • 解决setBackgroundResource出现oom的问题

    setBackgroundResource加载图片的额时候 会出现错误 private final int imageIds R mipmap a R mipmap b R mipmap c R mipmap d R mipmap e Im
  • springcloud环境搭建——eureka

    springcloud环境搭建 eureka 目录 springcloud环境搭建 eureka 新建IDEA项目 初始化父工程 父工程的pom文件 初始化服务一 Eureka服务注册中心 子module的pom 微服务eureka的配置步
  • 上门服务小程序源码 家政小程序源码 同城到家小程序源码

    上门服务小程序源码 家政小程序源码 同城到家小程序源码 开发语言 thinkphp mysql 前端 uni app 支 持 小程序 公众号H5 APP 编号 8 1 数据概况 新增业务城市用户投票功能 更加直观的查看业务城市的关注度 人气
  • unity 各AR插件对比

    上个项目使用到AR 使用了好几个AR SDK来测试 先总结一下 可能后续有所不同 仅为当前 各AR插件对比 2D 3D Android PC vuforia EasyAR HiAR 太虚AR 解释一下 vuforia并不是不支持PC平台 而
  • Virtual DOM 算法

    1 前言 本文会在教你怎么用 300 400 行代码实现一个基本的 Virtual DOM 算法 并且尝试尽量把 Virtual DOM 的算法思路阐述清楚 希望在阅读本文后 能让你深入理解 Virtual DOM 算法 给你现有前端的编程
  • 基于2维卷积神经网络的心电图分类

    在这里给大家分享一篇关于用深度学习进行心电图识别的论文 原文地址https arxiv org abs 1804 06812 我翻译成了中文以便大家快速学习 中间难免有疏忽遗漏的地方 请大家谅解 深度医疗 1 心电图特征识别 这篇文章是由韩
  • C++入门基础05:表达式(表达式基础、算术运算符与赋值运算符、逻辑关系运算符、成员访问运算符与条件运算符、位运算符、移位运算符与类型转换)

    C 入门基础05 表达式 表达式基础 算术运算符与赋值运算符 逻辑关系运算符 成员访问运算符与条件运算符 位运算符 移位运算符与类型转换 一 表达式基础 include
  • LInux下串口编程详解细节

    LInux下串口设置详解 日期 2011 04 01 来源 Linux社区 作者 huang879135 字体 大 中 小 串口的设置主要是设置struct termios结构体的各个成员值 include
  • 【浙大版《Python 程序设计》题目集(解)】第6章函数-1 使用函数求特殊a串数列和(10分)

    给定两个均不超过9的正整数a和n 要求编写函数fn a n 求a aa aaa aa aa n个a 之和 fn须返回的是数列和 函数接口定义 fn a n 其中 a 和 n 都是用户传入的参数 a 的值在 1 9 范围 n 是 1 9 区间
  • 快排函数 -- qsort函数(Quick Sort)

    文章目录 1 qsort函数简介 1 1 函数原型 1 2 参数含义 2 比较函数介绍 3 比较函数使用案例 3 1 整型数组 3 2 浮点型数组 3 3 结构体类型 字符串 4 利用冒泡排序模拟实现qsort函数的功能 1 qsort函数
  • 图形验证码文字识别——pytesseract

    图形验证码内容识别 pytesseract 一 目的 二 实现方式 三 环境准备 四 代码实现 五 拓展 一 目的 我们工作中会遇到一些需要把图片中的文字识别出来使用的例子 比如 图形验证码 提取图片中的文章等 如果工作量比较小或者不需要重