Python批量识别图片文字(数字识别模式)大幅度提高数字识别准确率

2023-05-16

目录

 

一、使用beautiful soup库爬取网页图片

二、使用pytesseract库识别图片中数据,并将数据存入txt文件

三、用pandas库实现txt文件到csv文件的转换


 

一、使用beautiful soup库爬取网页图片

 该网站中有需要的数据,但是是以图片形式存在。

这样就给我们爬取数据造成了一些困扰,没有办法之间从网站上获取数据,只能先把这些图片爬取下来,之后再进行处理。

按F12,进入开发者模式,在html源码上找到图片所在的位置:

e220cb9f31e0422c8ffb9953810b257b.png

 

可以看出图片位于“article”类下的第7个p块下,并且观察对应的每张图片的src,可以看出每张图片仅最后的数字不同,所以我们可以进行网址的拼接,进而调用get方法下载这些图片

通过beautiful soup库中findall()方法进行定位图片,并下载和重命名所有图片

注意:p中存储的是所有html中p块信息,而我们需要的图片位于第7个p块下,所以p[6]中是我们需要的信息

de097b0a3dce4b6eb2264f8239107e47.png

 

将下载的图片保存在当前目录新创建的文件夹下

76e0fe2f22c24650a88705b1ae9f6378.png

b4bf6d1d95d14853b59a5d1f85bfb4e1.png

爬取过程的源代码如下:

import os
import re
import time
import requests
from bs4 import BeautifulSoup

# 手动写入目标套图的首页地址
download_url = "https://www.dxsbb.com/news/85155.html"

# 手动写入网站中图片的个数
num = 23

# 创建一个文件夹用来保存图片
file_name = "2020年四川高考理科一分一段表"

# 目标图片下载地址的前半部分(固定不变那部分,后半段是变化的,需要解析网页得到)
imgae_down_url_1 = "https://www.dxsbb.com"


# 创建文件夹
def CreateFolder(file):
    """创建存储数据文件夹"""
    flag = 1
    while flag == 1:  # 若文件已存在,则不继续往下走以免覆盖了原文件
        if not os.path.exists(file):
            os.mkdir(file)
            flag = 0
        else:
            print('该文件已存在,请重新输入')
            flag = 1
            time.sleep(1)
        # 返回文件夹的路径,这里直接放这工程的根目录下
        path = os.path.abspath(file) + "\\"
    return path


# 下载图片
def DownloadPicture(download_url, list, path):
    # 访问目标网址
    r = requests.get(url=download_url, timeout=20)
    r.encoding = r.apparent_encoding
    soup = BeautifulSoup(r.text, "html.parser")

    # 解析网址,提取目标图片相关信息,注:这里的解析方法是不固定的,可以根据实际的情况灵活使用
    p = soup.find_all("p")   #p中是所有p块的信息
    tag = p[6].find_all("img")  # 得到该页面目标图片的信息

    # 下载图片
    j = 0
    for i in range(num):
        if (j < len(tag) and tag[j].attrs['src'] != None):
            img_name = str(i) + ".png"  # 以数字命名图片,图片格式为jpg
            # 获取目标图片下载地址的后半部分
            imgae_down_url_2 = tag[j].attrs['src']
            j = j + 1
            # 把目标图片地址的前后两部分拼接起来,得到完整的下载地址
            imgae_down_url = imgae_down_url_1 + imgae_down_url_2
            print("imgae_down_url: ", imgae_down_url)

            # 下载图片
            try:
                img_data = requests.get(imgae_down_url)
            except:
                continue
            # 保存图片
            img_path = path + img_name
            with open(img_path, 'wb') as fp:
                fp.write(img_data.content)
            print(img_name, "   ******下载完成!")


# 主函数
if __name__ == "__main__":
    # 创建保存数据的文件夹
    path = CreateFolder(file_name)
    print("创建文件夹成功: ", path)
    page_url = download_url  # 要爬取的网页地址

# 下载图片
    DownloadPicture(page_url, num, path)  # 注:这个网站每一页最多是22张图片,每张图片我都用数字命名

    print("全部下载完成!", "共" + str(len(os.listdir(path))) + "张图片")

二、使用pytesseract库识别图片中数据,并将数据存入txt文件

有了图片之后就要对图片上的数据进行识别,pytesseract库是一个封装性较好的库,安装之后就可以调用该库进行字符识别。

调用pytesseract库进行图片中的数据识别(一开始识别精度并不高,查了一下原因发现默认的识别方法是识别文字的,而本次任务是识别数据,其实并不是很适用。所以我搜索了一下pytesseract库使用方法,发现确实可以使用“只识别数字”模式,这种模式识别的精确度果然提高了很多)

但是识别出的结果中不仅有数字,由于图片上有水印,所以结果中还有很多标点符号和乱码,需要过滤掉这些东西。所以我建立了一个停用词列表,过滤掉这些乱码和标点符号,并将过滤后的数据写入txt文件

6985ff8a31d74610b9329867ff696f9a.png

 

识别后并写入txt文件效果:

d73d814ab55a4e768eb65ae0e31b52fc.png

 图片识别代码如下:

from PIL import Image
import pytesseract
import os


def read_image(name):

    text=pytesseract.image_to_string(Image.open(name), lang='chi_sim',config=r'-c tessedit_char_whitelist=0123456789 --psm 6')
    exclude_char_list='.:\\|\'?!"[]()@#$%^&*<>/'
    text=''.join([x for x in text if x not in exclude_char_list])
    fp2 = open('2020li.txt', 'a')

    fp2.write(text)
    fp2.close()


def main():
    path = "./"
    for path, dir, file in os.walk(path):
        break
    pic = []
    for i in file:
        if (".png" in i):
            pic.append(i)
    for j in pic:
        read_image(j)


if __name__ == '__main__':
    main()

 

三、用pandas库实现txt文件到csv文件的转换

最后一步,将txt文件转换成csv文件,前提是数据和数据之间有空格,并且格式正确

69ba8d7204704f2da5c53be4a7ee3d99.png

 

(对于识别出的这些数据,我还是进行人工复查了一遍,发现识别的准确率在90%左右,出现的一些小错误要手动修改一下)

 

3ca6fe06df18406bb1c74899a26a4696.png

 txt数据写入csv文件代码如下:

import numpy as np
import pandas as pd

txt = np.loadtxt('2020li.txt')
txtDF = pd.DataFrame(txt)
txtDF.to_csv('2020li.csv', index=False)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Python批量识别图片文字(数字识别模式)大幅度提高数字识别准确率 的相关文章

  • Ubuntu系统配置网络(图文教程)

    打开vmware中虚拟机菜单中的虚拟机选项卡 在后续选项卡中选择设置选项 随着上一步步骤 xff0c 接下来选择硬件选项卡中的网络适配器选项 下一步我们在右边网络连接模式中的 xff0c 这里我们选择桥接模式 xff0c 虚拟机提供了三种了
  • Java暴力匹配算法——字符串匹配问题

    目录 暴力匹配算法 一 解析 二 图解 三 代码演示 四 输出结果 五 优化 有一个字符串 str1 61 34 BCDABCDABABCDABCABCD 34 xff0c 和一个字符串 str2 61 34 ABCAB 34 现在要判断
  • [PTA]兔子繁衍问题(java)

    一对兔子 xff0c 从出生后第3个月起每个月都生一对兔子 小兔子长到第3个月后每个月又生一对兔子 假如兔子都不死 xff0c 请问第1个月出生的一对兔子 xff0c 至少需要繁衍到第几个月时兔子总数才可以达到N对 xff1f packag
  • 用Java实现水仙花数的打印

    题目要求 xff1a 打印出1 10000范围内的所有的 水仙花数 xff0c 所谓 水仙花数 是指由一个3位数 xff0c 其各位数字立方和等于该数本身 例如 xff0c 153是一个 水仙花数 xff0c 因为153 61 1 3 43
  • 【如何学习网安(浅谈)】

    相信各位小伙伴一定听所过各种黑客的流弊操作 xff0c 键盘声满天飞 呵呵 xff0c 在下也曾幻想过有朝一日能够向当初中国红客一样 xff0c 攻陷漂亮国的白宫网站 将台湾是中国的一部分几个大字狠狠的挂在上面 然而在下不才 xff0c 还
  • 【Linux 主机ssh远程连接暴力破解详解】

    昨天 xff0c 安全老师布置了一个安全的小作业 xff0c 在下想了想 xff0c 做什么好呢 xff1f 最近学了很多 那就做一个Linux主机远程连接的暴力破解密码的作业 一 前期信息搜集 kali 作为黑客主机 xff0c cent
  • Linux-内网穿透frp-linux

    内网穿透frp linux 0 需求1 下载软件配置2 配置sever端 xff08 转接vps服务器 xff09 3 配置client端 xff08 校内Ubuntu电脑或校内网台式机 xff09 4 出现的问题参考 0 需求 想要在校外
  • GeoServer 服务器间同步 自动同步两个geoserver 基于JMS的集群

    教程 根据 https geoserver geo solutions it educational en clustering index html 来安装配置 教程中的GeoServer Active Clustering扩展下载地址过
  • 【Redhat-自动化运维工具ansible的安装和配置】

    ansible是一款自动化运维工具 xff0c 基于Python开发 xff0c 集合了众多运维工具 xff08 puppet cfengine chef func fabric xff09 的优点 xff0c 实现了批量系统配置 批量程序
  • 【Nmap的使用方法】

    目录 一 下载地址 二 功能概括 三 基本的语法规则 四 功能分步详解 1 主机发现 2 端口发现 3 应用程序与版本信息侦测 4 操作系统侦测 5 规避FW ID技术 一 下载地址 nmap官网地址 二 功能概括 基本功能 xff1a 主
  • 【Cobalt strike 渗透测试神器】

    目录 一 前言 安装包下载 主机详情 二 部分模块和Payload介绍 三 基本使用步骤 1 服务端和客户端 2 设置监听 四 配合其他工具反弹shell 1 kali中使用msf 2 CS创建监听 3 metasploit使用exploi
  • 【XSS攻击介绍(一)】

    目录 一 前言 二 攻击条件和漏洞验证方法 三 XSS漏洞分类 四 利用方法 五 XSS payload变形 六 防护总结 一 前言 XSS xff1a 跨站脚本攻击 xff0c 即CSS 利用网页开发时留下的漏洞 xff08 web应用程
  • 【vulnhub靶场之DC2靶机渗透】

    目录 一 前言 二 渗透过程 一 前言 大家好 xff0c 又到了快乐的学习时光了 xff0c 最近也是沉迷于DC系列的靶场 xff0c 每一次成功拿下靶场后都会学习和总结到很多的东西 今天的受害者是DC 2靶场 xff0c 话不多说 xf
  • 【文件上传漏洞绕过方式】

    目录 前言 正文 总结 前言 目前 xff0c 文件上传往往在业务中不可避免 xff0c 也是极其容易出现上传漏洞 根据owasptop10中的排名 xff0c 文件上传漏洞 xff08 属于攻击检测和防范不足 xff09 高居其中 今天和
  • 【AWVS破解安装学习】

    目录 前言 安装 破解 功能界面 总结 前言 Acunetix Web Vulnerability Scanner xff08 AWVS xff09 是用于测试和管理Web应用程序安全性的平台 xff0c 现如今是BS架构 能够自动扫描互联
  • 【Log4j2远程命令执行复现CVE-2021-12-09】

    目录 一 前言 二 漏洞环境构建 三 复现过程 一 前言 Log4j2是基于log4j这个java日志处理组件进行二次开发和改进而来的 也是目前最常用的日志框架之一 xff0c 在之前的博客中 xff08 http t csdn cn z9
  • 【靶场设计和渗透】

    目录 一 前言 二 靶场设计 1 局域网 2 说明 三 渗透测试 1 信息收集 2 漏洞利用 四 后渗透利用 1 提权 2 权限维持 一 前言 为了深入贯彻学习网络安全法律法规 xff0c 深入学习渗透测试知识 xff0c 强化实战技能 编
  • 【python练习第一天:简单成绩管理系统实现】

    一 系统要求 在B站上自学了python xff0c 简单练习一下 系统要求 xff1a 功能方面实现登记学生ID 成绩等信息 xff1b 能够实现查找学生信息 修改 删除学生信息 xff1b 统计学生总人数 xff1b 显示所有的学生信息
  • 通达信主力加仓指标 疯牛有理加仓爆发选股指标

    该指标为通达信指标 xff0c 一个真正的主力进场加仓指标源码 很有实用价值 xff0c 也很准 xff0c 无未来函数 xff0c 准确率极高 主力加仓指标方法 出现柱子为买入时机 xff0c 白色柱子持股 及时止盈 xff0c 只要不是
  • 关于51单片机的外部中断INT0和INT1

    问题 xff1a 外部中断到底如何正确配置 xff1f 解决 xff1a 第一步 xff1a 看明白外部中断工作的内部框图 直接看第一个INT0 xff0c 这就是外部中断0 xff0c 从左往右 xff0c 一共需要配置三个地方 xff0

随机推荐