数据挖掘(八)

news2024/11/5 1:22:59

数据挖掘(八)

文章目录

    • 数据挖掘(八)
      • 人工神经网络
      • 创建数据集
        • 绘制验证码
        • 创建训练集
        • 根据抽取方法调整训练数据集
      • 训练和分类
        • 反向传播算法
        • 预测单词
      • 用词典提升正确率
        • 寻找最相似的单词
      • 完整代码

从图像中抽取信息很难,图像包含大量原始数据,图像的标准编码单元像素提供的信息量很少。图像特别是照片可能存在一系列问题,比如模糊不清、离目标太近、光线太亮或太暗、比例失真、残缺、扭曲等,这会增加计算机系统抽取有用信息的难度。本文介绍如何用神经网络识别图像中的字母,从而自动识别验证码CAPTCHA。

人工神经网络

  1. 神经网络由一些列相互连接的神经元组成,每个神经元都是一个简单的函数,接收一定输入,给出相应输出。神经元可以使用任何标准函数来处理数据比如线性函数,这些函数统称为激活函数。一般来说,神经网络学习算法要能正常工作,激活函数应当是可导和光滑的。常用的激活函数由逻辑斯蒂函数,x为神经元的输入,k、L通常为1,这时函数达到最大值。每个神经元接收几个输入,计算输出,这样的一个个神经元连接起来组成了神经网络。

f ( x ) = L 1 + e − k ( x − x 0 ) f(x) = \frac{L}{1 + e^-k(x-x0)} f(x)=1+ek(xx0)L

  1. 用于数据挖掘应用的神经网络,神经元按照层级进行排列。第一层是输入层,接收来子数据集的输入。第一层中的每个神经元对输入进行计算,把得到的结果传递给第二层的神经元,这种叫做前向神经网络。在神经网络中,上一层的输出作为下一层的输入,直到到达最后一层。输出结果表示的是神经网络分类器给出的分类结果。输入层和输出层之间的所有层称为隐含层。
  2. 我们优先考虑使用全连接层,也就是上一层中每个神经元的输出都输入到下一层的所有神经元。实际构建神经网络时,训练过程中,很多权重都会被设置为0,有效地减少边的数量。神经元激活函数通常使用逻辑斯蒂函数,每层神经元之间为全连接,创建和训练神经网络还需要用到其他几个参数。创建过程指定神经网络的规模需要用到两个参数,神经网络共有多少层和隐含层每层有多少个神经元。训练过程中还会用到神经元之间边的权重参数。一个神经元连接到另一个神经元,两者之间的边具有一定的权重,在计算输出时,用边的权重乘以信号的大小。如果边的权重为0.8,神经元激活后,输出值为1,那么下一个神经元从前面这个神经元得到的输入就是0.8。如果第一个神经元没有激活,值为0,那么输出到第二个神经元的值就是0。
  3. 神经网络大小合适并且权重经过充分训练,它的分类效果才能精确。通常开始时使用随机选取的权重,训练过程中再逐步更新。设置好网络大小后,再从训练集中训练得到边的权重参数后,就能构造分类器。然后我们可以使用分类器分类。

创建数据集

我们以破解网站4个字母的英文单词的验证码为例,编写程序还原图像中的单词。步骤是把大图像分成只包含一个字母的4张小图像,为每个字母分类,把字母重新组合为单词,用词典修正单词识别错误。假设验证码中的单词是一个完整的有效的英文单词,长度为4个字母,实际上我们使用同一个词典生成和破解验证码;单词全部字母均为大写形式,不适用符号、数字或空格。为了增加难度,再生成图像时对单词使用不同的错切变化效果。

绘制验证码
  1. 我们编写创建验证码的函数,绘制一张含有单词的图像,对单词使用错切变化效果。绘制图像使用PIL库,错切变化需要使用scikit-image库。
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from skimage import transform as tf
from matplotlib import pyplot as plt
# 生成验证码的基础函数,接收一个单词和错切值(通常在0到0.5之间),还可以指定图像大小
def create_captcha(text, shear=0, size=(100, 24)):
    # 使用字母L生成一张黑白图像,为ImageDraw类初始化一个实例
    im = Image.new('L', size, 'black')
    draw = ImageDraw.Draw(im)
    # 指定验证码文字所使用的字体
    font = ImageFont.truetype(r'C:\Windows\Fonts\Gabriola.ttf', 22)
    draw.text((2, 2), text, fill=1, font=font)
    # 把PIL图像转换为numpy数组
    image = np.array(im)
    # 应用错切变化效果,返回图像
    affine_tf = tf.AffineTransform(shear=shear)
    # 根据给定的坐标变换图像
    image = tf.warp(image, affine_tf)
    # 对图像特征进行归一化处理,确保特征值落在0~1之间
    return image/image.max()

image = create_captcha('JOHN', shear=0.5)
plt.imshow(image, cmap='gray')
plt.show()
  1. 虽然验证码是单词,但是我们可以把大问题转换为识别字母的小的问题,验证码识别算法的下一步是分割单词,找出其中的字母。创建函数寻找图像中连续的黑色像素,抽取他们作为新的小图像,这些小图像就是我们要找的字母。
from skimage.measure import label, regionprops
# 图像分割函数接收图像,返回小图像列表,每张小图像为单词的一个字母
def segment_iamge(image):
    # 检测每个字母的位置,使用label函数能找出图像中像素值相同且由连接在一起的像素块
    # label函数参数是图像数组,返回跟输入同型的数组,在返回的数组中图像连接在一起的区域用不同的值表示,在这些区域以外的像素用0表示
    labeled_image = label(image > 0)
    subimages = []
    # regionprops函数可以抽取连续区域,遍历这些区域分别处理,通过region对象获取到当前区域的相关信息
    for region in regionprops(labeled_image):
	# 用当前区域的起始位置坐标作为索引就能抽取到小图像
        start_x, start_y, end_x, end_y = region.bbox
        subimages.append(image[start_x:end_x, start_y:end_y])
    # 没有找到小图像就把原图像作为子图返回
    if len(subimages) == 0:
        return [image,

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

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

相关文章

ai翻唱部分步骤

模型部署 我是用的RVC进行的训练,也可以使用so-vits-svc。 通过百度网盘分享的文件:RVC-beta 链接:https://pan.baidu.com/s/1c99jR2fLChoqUFqf9gLUzg 提取码:4090 以Nvida显卡为例,分别下载“RVC1006Nvidia”和…

[综述笔记]Deep learning for brain disorder diagnosis based on fMRI images

论文网址:Deep learning for brain disorder diagnosis based on fMRI images - ScienceDirect 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向…

HarmonyOS:UIAbility组件概述

一、概述 UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。 UIAbility的设计理念: 原生支持应用组件级的跨端迁移和多端协同。支持多设备和多窗口形态。 UIAbility划分原则与建议: UIAbility组件是系统调度的基本单元&#xff0c…

jeecgbootvue2菜单路由配置静态文件夹(public)下的html

需求:想要在菜单配置src/assets/iconfont/chart.html显示页面(目的是打包上线以后运维依然可以修改数据) 官网没有相关数据:菜单配置说明 JeecgBoot 开发文档 看云 问题现象: 我把文件放在src/assets/iconfont/chart.html然后在vue中作为 iframe 的 src 属性&am…

【Vue框架】基础语法练习(1)

其实更多知识点已经在Vue.js官网十分清楚了,大家也可以去官网进行更细节的学习 https://cn.vuejs.org/ 说明:目前最新是Vue3版本的,但是Vue2已经深得人心,所以就是可以支持二者合用。它们最大的区别就是Vue3是组合式API&#xf…

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …

qt QScrollArea详解

1、概述 QScrollArea是Qt框架中的一个控件,它提供了一个可滚动的视图区域,用于显示超出视图大小的内容。这个控件非常有用,尤其是在处理大型表格、文本区域、图像集合或任何需要滚动浏览的内容时。QScrollArea本身不直接显示内容&#xff0c…

【ChatGPT】搜索趋势分析

【ChatGPT】搜索趋势分析 为了分析 ChatGPT 在过去一年的流行趋势,我们可以查看 Google Trends 的数据 安装依赖pytrends pip install pytrends运行以下 Python 脚本 import pandas as pd import matplotlib.pyplot as plt from pytrends.request import TrendR…

Mac如何实现高效且干净的卸载应用程序

使用Mac卸载应用程序,你还在使用废纸篓这个办法吗,看不见卸载了什么,看不见清理了多少,真的不会有残留吗 XApp Mac上的卸载专家,强大的垃圾逻辑检测,垃圾扫描更全面,卸载更干净 使用简单&#…

安科瑞AMB400分布式光纤测温系统解决方案--远程监控、预警,预防电气火灾

安科瑞戴婷 可找我Acrel-Fanny 安科瑞AMB400电缆分布式光纤测温具有多方面的特点和优势: 工作原理: 基于拉曼散射效应。激光器产生大功率的光脉冲,光在光纤中传播时会产生散射。携带有温度信息的拉曼散射光返回光路耦合器,耦…

GitHub上传自己的项目

目录 一、安装Git插件 1)下载 2)安装 二、创建Gothub的创库 三、通过Git上传本地文件到Github 四、其他 1、部分指令 2、如果已经运行过git init并设置了[user],下次可以直接用 一、安装Git插件 1)下载 下载地址&#x…

Spring Boot框架

一.SpringBoot简介 1.1 设计初衷 目前我们开发的过程当中,一般采用一个单体应用的开发采用 SSM等框架进行开发,并在 开发的过程当中使用了大量的xml 等配置文件,以及在开发过程中使用MAVEN的构建工具来进 行构建项目,但是往往有…

【C++】vector 类深度解析:探索动态数组的奥秘

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 如果你对string类还存在疑惑,欢迎阅读我之前的作品 : 👉【C】string 类深度解析:…

windows——病毒的编写

声明 学习视频来自B 站up主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 windows基础 我们学习了前面的window…

STM32 + CubeMX + 硬件SPI + W5500 +UDP

这篇文章记录一下STM32W5500UDP的调试过程,实现UDP数据的接收与发送。 目录 一、W5500模块介绍二、Stm32CubeMx配置三、Keil代码编写1、添加W5500驱动代码到工程(添加方法不赘述,驱动代码可以在官网找)2、在工程中增加代码&#…

原来大佬的测试用例都是这样写的...

1、测试点与测试用例 测试点不等于测试用例,这是我们首先需要认识到的。 问题1:这些测试点在内容上有重复,存在冗余。 问题2:一些测试点的测试输入不明确,不知道测试时要测试哪些。 问题3:总是在搭相似…

【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入

【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入 Med-BERT:pretrained contextualized embeddings on large-scale structured electronic health records for disease prediction ​ ​ 摘要:基于电子健康记录(EHR)的深度学习(DL)预…

天锐绿盾加密软件与Ping32 — 数据安全与性能优化的完美结合

在数字化时代,企业对数据安全的重视程度日益增加。随着网络攻击和数据泄漏事件频发,选择合适的安全解决方案显得尤为重要。天锐绿盾与Ping32作为两款备受推崇的安全软件,各自为企业提供了独特的功能和优势,共同为企业的数据安全和…

随身WiFi三网切换靠谱吗?格行随身WiFi网速怎么样?

出门在外手机流量不够用,连接公共WIFI网速不稳定还存在安全隐患。小巧便携的随身WIFI成了外出用网的首选。面对市面上不同品牌,不同类型的随身WIFI不少朋友不免心生疑问:随身WIFI到底值不值得买?究竟是不是“智商税”?…

服务器数据恢复—SAN环境中LUN映射错误导致文件系统一致性出错的数据恢复案例

服务器数据恢复环境: SAN光纤网络环境,存储由一组6块硬盘组建的RAID6阵列构成,划分为若干LUN,MAP到跑不同业务的SUN SOLARIS操作系统服务器上。 服务器故障&分析: 因为业务需要,用户在该光纤存储环境中…