Python爬虫第21节- 基础图形验证码识别实战
目录
前言
一、学习目标
二、环境准备
2.1 安装依赖
2.2 验证安装
三、获取验证码图片
3.1 常见获取方式
3.2 图片格式要求
四、基础识别流程
4.1 基础流程
4.2 常见问题及解决方案
五、 图像预处理提升识别率
5.1 灰度化
5.2 二值化
5.3 自定义阈值二值化
5.4 其他预处理技巧
六、综合识别流程示例
6.1 识别流程示例
6.2 进一步优化代码示例
七、小结与建议
八、常见问题解答
8.1 如何提高识别率?
8.2 遇到复杂验证码怎么办?
8.3 如何集成到爬虫项目?
九、结语
🎬 攻城狮7号:个人主页
🔥 个人专栏: 《python爬虫教程》
⛺️ 君子慎独!
🌈 大家好,欢迎来访我的博客!
⛳️ 此篇文章主要介绍 图形验证码 的识别
📚 本期文章收录在《python爬虫教程》,大家有兴趣可以自行查看!
⛺️ 欢迎各位 ✔️ 点赞 👍 收藏 ⭐留言 📝!
前言
在互联网安全防护中,验证码是一道常见的"门槛",它们被广泛用于防止恶意爬虫和自动化攻击。随着技术进步,验证码的形式也日益多样化,从最初的简单数字字母组合,到如今的滑动拼图、点选图片、复杂干扰线等多种类型。对于数据采集和自动化测试来说,如何高效识别验证码成为了一个重要课题。
本节将聚焦于最基础、最常见的"图形验证码",即由数字或字母组成的图片验证码。我们将介绍其识别原理、常用工具、图像预处理技巧,并通过代码实例带你一步步实现自动识别。
一、学习目标
- 理解图形验证码的基本原理和常见类型
- 掌握 OCR(光学字符识别)工具 Tesseract 的基本用法
- 学会通过opencv等图像预处理手段提升验证码识别准确率
- 了解常见问题及解决方案
二、环境准备
识别验证码通常需要用到 OCR 技术。这里我们推荐使用 `pytesseract`,它是 Tesseract OCR 引擎的 Python 封装,配合 `Pillow` 进行图片处理。
2.1 安装依赖
在Python环境下,若想运用Tesseract实现光学字符识别功能,具体的安装方法涵盖了安装Tesseract OCR软件、引入Python库pytesseract以及配置环境变量等方面。
首先,Tesseract OCR软件是整个流程的基础,作为一款由Google维护的强大开源光学字符识别引擎,需要从其官方渠道获取与操作系统适配的版本并完成安装。具体而言:
(1)下载并安装Tesseract:
- 对于Windows用户,访问Tesseract OCR的GitHub页面( https://github.com/tesseract-ocr/tesseract )或windows安装包地址( https://github.com/UB-Mannheim/tesseract/wiki ),下载对应的可执行安装文件,按照安装提示逐步操作。
- macOS系统用户,借助Homebrew工具,在命令行中输入“brew install tesseract”即可完成安装。
- Linux用户则依据自身的发行版本,使用相应的包管理器,如通过“sudo apt-get install tesseract-ocr”命令来安装Tesseract OCR软件。
(2)确认安装:安装结束后,在命令行输入“tesseract -v”,若能显示版本相关信息,就表明Tesseract OCR软件安装成功。
其次,pytesseract作为Python的一个库,提供了与Tesseract OCR引擎交互的便捷接口,能让Python调用Tesseract的功能更为顺畅。其安装与验证步骤如下:
(1)安装pytesseract:打开命令行,执行“pip install pytesseract”命令,即可完成该库的安装。
(2)验证安装:在Python环境里,尝试执行“import pytesseract”语句,若未弹出错误提示,则意味着pytesseract库安装无误。
最后,为确保pytesseract能够准确找到Tesseract可执行文件,环境变量的设置至关重要:
(1)Windows:先确定Tesseract的安装路径,如“C:\Program Files\Tesseract-OCR”,接着右键点击“此电脑”,选择“属性”,进入“高级系统设置”,点击“环境变量”,在“系统变量”中找到“Path”变量进行编辑,将Tesseract的安装路径添加到其中。
(2)macOS和Linux:一般情况下,包管理器会自动配置路径,无需手动设置。但特殊情况下,可通过修改“~/.bash_profile”或“~/.bashrc”文件来手动添加Tesseract的路径。
2.2 验证安装
安装完成后,可通过以下代码验证环境是否正常:
import pytesseract
print(pytesseract.get_tesseract_version())
输出:
5.5.0.20241111
如果输出版本号,说明安装成功。
三、获取验证码图片
在实际项目中,验证码图片通常可以通过接口或页面下载。为了便于演示,我们假设已经将验证码图片保存为 `code.jpg`。
3.1 常见获取方式
- 接口下载:通过 API 获取验证码图片
- 页面抓取:使用 Selenium 或 Requests 从网页中提取验证码图片
- 手动保存:在测试阶段,可手动保存验证码图片
3.2 图片格式要求
- 支持常见格式:JPG、PNG、BMP 等
- 建议使用 PNG 格式,避免压缩损失
四、基础识别流程
4.1 基础流程
直接用 pytesseract 识别图片验证码非常简单:
import pytesseract
from PIL import Imageimage = Image.open('code.jpg')
result = pytesseract.image_to_string(image)
print(result.strip())
旧版python的 `tesserocr` 库可以支持直接读取图片文件,如:
import tesserocr
print(tesserocr.file_to_text('code.jpg'))
但是我们使用的是 pytesseract 库。运行后即可输出识别结果:
JIR42.
准确率不高,或许tesserocr的正确率会高一点,我们继续往下探讨。
4.2 常见问题及解决方案
识别结果为空:检查图片是否清晰,尝试调整图片大小或对比度
识别错误:可能是图片干扰过多,需进行图像预处理
五、 图像预处理提升识别率
实际验证码往往会加入干扰线、噪点、颜色变化等,直接识别效果有限。此时可以通过图像预处理(如灰度化、二值化)来提升准确率。
5.1 灰度化
将彩色图片转为灰度,有助于去除颜色干扰:
image = image.convert('L') # 转为灰度图
image.show()
5.2 二值化
将灰度图进一步转为黑白图像,突出字符主体:
image = image.convert('1') # 默认阈值127
image.show()
5.3 自定义阈值二值化
有时需要手动调整阈值以获得更好效果:
image = image.convert('L')
threshold = 80 # 可根据实际图片调整
binary_table = [0 if i < threshold else 1 for i in range(256)]
image = image.point(binary_table, '1')
image.show()
5.4 其他预处理技巧
降噪:使用中值滤波或高斯滤波去除噪点
锐化:增强字符边缘,提高识别率
旋转校正:处理倾斜的验证码
六、综合识别流程示例
6.1 识别流程示例
完整识别流程如下:
import pytesseract
from PIL import Imageimage = Image.open('code.jpg')
image = image.convert('L')
threshold = 127
binary_table = [0 if i < threshold else 1 for i in range(256)]
image = image.point(binary_table, '1')
result = pytesseract.image_to_string(image)
print(result)
输出:
JSR42
经过预处理后,正确率还是差一点。
6.2 进一步优化代码示例
优化方案:
(1)使用 OpenCV 进行灰度、二值化和去噪预处理
(2)用 pytesseract 限定只识别字母和数字,并设置 --psm 8 提高验证码识别率
import cv2
import pytesseractdef preprocess_opencv(image_path, threshold=130):img = cv2.imread(image_path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)_, thresh = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY)denoised = cv2.medianBlur(thresh, 3)return denoised# 使用示例
img = preprocess_opencv('code.jpg', threshold=130)
result = pytesseract.image_to_string(img,config='--psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
)
print(result.strip())
得到正确值:
JR42
继续以一张带有干扰线的验证码 `code2.jpg` 验证:
将代码中的 code.jpg 改成 code2.jpg,运行代码输出:
PFRT
到此准确率达到预期。
七、小结与建议
- 图形验证码识别的核心在于图像预处理,灰度化和二值化是最常用的手段。
- 阈值的选择对识别效果影响很大,可多尝试不同值。
- 对于更复杂的验证码(如扭曲、旋转、强干扰),可考虑进一步图像处理使用 opencv 或训练专用模型。
- tesserocr 或 pytesseract 适合简单验证码,遇到复杂场景可结合深度学习方法。
通过本节内容,你已经掌握了用 Python 自动识别基础图形验证码的完整流程。后续可以尝试识别更复杂的验证码类型,或将识别流程集成到自动化测试、爬虫等项目中。
八、常见问题解答
8.1 如何提高识别率?
- 确保图片清晰,避免模糊或压缩
- 调整阈值,找到最佳二值化效果
- 尝试多种预处理方法,如降噪、锐化等
8.2 遇到复杂验证码怎么办?
- 使用深度学习模型,如 CNN 或 RNN
- 结合传统图像处理与机器学习方法
- 考虑使用商业 OCR 服务
8.3 如何集成到爬虫项目?
- 将识别流程封装为函数,方便调用
- 结合 Selenium 或 Requests 自动获取验证码
- 处理识别失败的情况,如重试或人工干预
九、结语
图形验证码识别是自动化测试和爬虫开发中的基础技能。通过本节内容,你已经掌握了从环境搭建到图像预处理、再到完整识别流程的全面知识。希望这些内容能帮助你更好地应对实际项目中的图形验证码挑战。
看到这里了还不给博主点一个:
⛳️ 点赞
☀️收藏
⭐️ 关注
!
💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
再次感谢大家的支持!
你们的点赞就是博主更新最大的动力!
相关文章:
Python爬虫第21节- 基础图形验证码识别实战
目录 前言 一、学习目标 二、环境准备 2.1 安装依赖 2.2 验证安装 三、获取验证码图片 3.1 常见获取方式 3.2 图片格式要求 四、基础识别流程 4.1 基础流程 4.2 常见问题及解决方案 五、 图像预处理提升识别率 5.1 灰度化 5.2 二值化 5.3 自定义阈值二值化 5.4…...
【React全栈进阶】从组件设计到性能优化实战指南
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选…...
基于EFISH-SCB-RK3576/SAIL-RK3576的消防机器人控制器技术方案
(国产化替代J1900的应急救援智能化解决方案) 一、硬件架构设计 极端环境防护系统 防爆耐高温设计: 采用陶瓷纤维复合装甲(耐温1200℃持续1小时),通过GB 26784-2023消防设备防爆认证IP68防护等级…...
插件双更新:LeetCode 刷题支持正式上线,JetBrains IDE 插件持续升级!
为了让更多开发者在真实开发与算法练习中体验 MoonBit 的高效表达与编译性能,MoonBit 语言现已实现对 JetBrains 开发环境与 LeetCode 答题平台的全面支持! 无论你是习惯用 IDE 编写项目的开发者,还是希望通过 LeetCode 刷题提升算法能力的程…...
编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC perl环境
Unix / Linux / macOS $ ./Configure $ make $ make test1、make Can‘t locate IPC/Cmd.pm in INC [ Downloads ] - /source/index.html https://www.openssl.org/source/ yum -y install perl-IPC-Cmd 2.make test Can’t locate Test/More.pm in INC perl环境 yum -…...
新型智慧园区技术架构深度解析:数字孪生与零碳科技的融合实践
🏭在杭州亚运村零碳园区,光伏板与氢燃料大巴构成的能源网络,正通过数字孪生技术实现智能调度。这不仅是格力电器与龙源电力在新能源领域的创新实践,更是智慧园区4.0时代的标杆案例。当AI算法开始接管能源调度,当BIM建模…...
2025全网首发:ComfyUI整合GPT-Image-1完全指南 - 8步实现AI图像创作革命
ComfyUI整合GPT-Image-1完全指南:8步实现AI图像创作革命【2025最新】 OpenAI最新发布的GPT-Image-1模型(也就是ChatGPT-4o背后的图像生成技术)已经通过API开放使用,而令人惊喜的是,ComfyUI已经第一时间提供了完整支持&…...
AWS Elastic Beanstalk控制台部署Spring极简工程
问题 上次通过EB CLI工具没有成功在AWS中国云部署成功,这次通过EB web控制台来部署。 步骤 接着上次部署失败的Spring工程:AWS Elastic Beanstalk部署极简Spring工程(EB CLI失败版),准备好jar文件。 创建ec2私钥文…...
力扣-236.二叉树的最近公共祖先
题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以…...
LeetCode 3337.字符串转换后的长度 II:矩阵快速幂(也没有想象中的那么高级啦)
【LetMeFly】3337.字符串转换后的长度 II:矩阵快速幂(也没有想象中的那么高级啦) 力扣题目链接:https://leetcode.cn/problems/total-characters-in-string-after-transformations-ii/ 给你一个由小写英文字母组成的字符串 s,一个整数 t 表…...
【iOS】源码阅读(四)——isa与类关联的原理
文章目录 前言OC对象本质探索clang探索对象本质objc_setProperty源码探索 cls与类的关联原理为什么说bits与cls为互斥关系isa的类型isa_t原理探索isa与类的关联 总结 前言 本篇文章主要是笔者在学习和理解类与isa的关联关系时所写的笔记。 OC对象本质探索 在学习和理解类与isa…...
elementUI 循环出来的表单,怎么做表单校验?
数据结构如下: diversionParamList: [ { length: null, positionNumber: null, value: null, } ] 思路:可根据 index 动态绑定 :props 属性值,校验规则写在:rules <div class"config-item" v-for"(item, index) in form.…...
蓝桥杯11届国B 约数
题目描述 定义阶乘 n!123⋅⋅⋅n。 请问 100! (100 的阶乘)有多少个正约数 100! 是所有从 1 到 100 的数的乘积,因此: 质数 j 在 100! 中的总指数 质数 j 在 1 中的指数 质数 j 在 2 中的指数 ... 质数 j 在 100 中的指数 …...
【iOS】alloc的实际流程
目录 前言 为什么不按源码流程调用? alloc的调用流程 前言 在之前的博客中我们有学习到过alloc的底层原理,沿着源码一步步找到了alloc的调用链——alloc—>_objc_rootAlloc—>callAlloc—>_objc_rootAllocWithZone—>_class_createInstan…...
Maven clean 提示文件 java.io.IOException
Maven clean 提示文件 java.io.IOException 问题背景问题分析&处理问题总结 问题背景 今天在一个功能开发结束之后,准备通过Maven实现打包操作,然后打包完成后部署到测试环境进行测试。在IDEA开发工具,点击 clean 时提示 Failed to dele…...
QT 使用QPdfWriter和QPainter绘制PDF文件
QT如何生产pdf文件,网上有许多文章介绍,我也是看了网上的文章,看他们的代码,自己琢磨琢磨,才有了本编博客; 其他什么就不详细说了,本篇博客介绍的QPdfWriter和QPainter绘制PDF文件;…...
解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- Manus技术解密
解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- Manus技术解密 如果你从应用程序的角度讲,但是如果我们从模型的角度讲,我们必须让模型既具有这种思考的能力,也具有产出这种最佳的action的这种能力。而且…...
网络安全-等级保护(等保) 2-4 GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》-2019-05-10发布【现行】
################################################################################ 等级确定之后,需要根据不同的安全等级满足相关建设要求,《等级保护基础要求》明确了安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管…...
Ansys Zemax | 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追迹的批次处理
附件下载 联系工作人员获取附件 这篇文章会说明如何在 MATLAB 或 Python 中以 Zemax OpticStudio 应用程式界面 (ZOS-API)处理光线数据库(Ray Database, ZRD)档案,过程中我们将使用ZRDLoader.dll。本文提供了在 Matlab 中批次处理序列光线追迹(一般、归一化、偏振…...
多链互操作性标准解析:构建下一代区块链互联生态
引言 在区块链技术快速演进的今天,“多链宇宙”已成为不可逆的趋势。然而,链与链之间的孤立性导致流动性割裂、开发成本高昂和用户体验碎片化。互操作性标准的制定,正是打破这一僵局的核心钥匙。本文将深入探讨主流互操作性协议的技术架构、…...
openEuler24.03 LTS下安装MySQL8.0.42
目录 前提步骤 删除原有mysql及maridb数据库 安装MySQL 启动MySQL 启动查看MySQL状态 设置MySQL开机自启动 查看登录密码 登录MySQL 修改密码及支持远程连接 远程连接MySQL 前提步骤 拥有openEuler24.03 LTS环境,可参考:Vmware下安装openEule…...
React 轻量级富文本编辑器推荐(中文版)
以下是几款适合集成到 React 项目中的轻量级富文本编辑器,特别针对中文用户优化推荐: 超轻量级选择(小于100KB) 1. react-simplemde-editor(Markdown编辑器) 特点:专为 Markdown 设计…...
React 第四十一节Router 中 useActionData 使用方法案例以及注意事项
一、useActionData前言 useActionData 是 React Router 提供的一个钩子函数,用于获取在路由的 action 函数中返回的数据。它通常与表单提交(通过 <Form> 组件)配合使用,用于处理表单提交后的服务器响应数据(如错…...
西门子 Teamcenter13 Eclipse RCP 开发 1 工具栏
西门子 Teamcenter13 Eclipse RCP 开发 1 工具栏 1 配置文件2 插件控制3 命令框架 1 配置文件 在 Teamcenter 13 Eclipse RCP 开发中,plugin.xml 是插件的核心配置文件,定义了插件的: 1、唯一身份(ID、版本)。 2、所…...
【python实用小脚本-63】每天花费2小时修复黑白照片,Python一键转换,节省90%时间(建议收藏)
一、应用场景故事 上周,我的朋友小李从家里翻出了一堆老照片,这些照片大多是彩色的,但他想把它们转换成黑白风格,让照片更有复古感。他尝试用Photoshop一张张处理,但花了整整一个周末,才处理了不到一半的照…...
R语言的专业网站top5推荐
李升伟 以下是学习R语言的五个顶级专业网站推荐,涵盖教程、社区、资源库和最新动态: 1.R项目官网 (r-project.org) R语言的官方网站,提供软件下载、文档、手册和常见问题解答。特别适合初学者和高级用户,是获取R语言核心资源的…...
Apache JMeter API 接口压测技术指南
文章目录 前言技术积累JMeter 简介适用场景JMeter 核心组件 安装与配置线程组压测逐步加压压测安装相应jmeter 插件创建测试计划生成压测HTML 总结 前言 Apache JMeter 是一款开源的性能测试工具,主要用于对 Web 应用、API 接口、数据库等进行负载和压力测试。本指…...
【Java实战】IO流(转换流,打印流,数据流,序列化流)
引出问题 不同编码读取出现的乱码问题 如果是代码编码被读取的文本文件的编码是一致的,使用字符流读取文本文件时不会出现乱码; 如果不一致,使用字符流读取文本文件就会出现乱码。 public class BufferedReader{ public static void main(S…...
Python课程及开源项目推荐
Python课程及开源项目推荐 摘要:学习 Python 是一个非常好的选择,因为它是一种功能强大且易于上手的编程语言,广泛应用于数据分析、数据可视化、机器学习、网络爬虫等领域。以下是针对 Coursera 上 Python 课程和专业证书的推荐,以…...
内网互通原则详解!
目录 前言1. 路由 (Routing): 谁去哪儿找谁?🗺️2. 防火墙与安全组 (Firewalls & Security Groups): 门卫大爷和保安系统!👮♂️🚪3. 内网 DNS (Internal DNS): 小区的通讯录/电话本!📒&a…...
[Harmony]大文件持久化
1.添加权限 在module.json5文件中添加权限 "requestPermissions": [{"name": "ohos.permission.READ_WRITE_USER_FILE", // 读写用户数据"reason": "$string:read_write_user_file_reason","usedScene": {"…...
C 语言实战:使用二维数组进行学生成绩统计与分析
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 在处理表格型数据时,二维数组是 C 语言中一种非常直观且强大的工具。学生成绩单就是一个典型的二维数据:每一行代表一个学生,每一列代表一门科目。本文将通过一个具体的案例,演示如何利用二维数组来存…...
[学习]RTKLib详解:tle.c(系列终章)
本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…...
体重秤出口日本的计量认证介绍,体脂秤出口日本“正”认证介绍
什么是家庭专用测量仪器? 家庭专用测量仪器是一种非自动秤,主要用于普通消费者的日常生活,并且刻度为10 mg或更大,并且秤号的刻度为100或更大,满足以下条件的: 通用秤 是一种非自动秤,重量超过…...
【hadoop】Flume的相关介绍
1 概述 Flume是Cloudera开发的一个分布式的、可靠的、高可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化的数据存储系统中。随着互联网的发展,特别是移动互联网的兴起,产生了海量的用…...
图片、音频、视频都能转?简鹿格式工厂了解一下
我们每天都会接触到各种各样的音视频和图片文件。无论是拍摄的照片、录制的视频,还是下载的音频资源,它们往往以不同的格式存在——有些适合分享,有些适合编辑,而有些则仅限特定设备或平台使用。格式不统一的问题,正在…...
doris节点数量规划
1.FE 节点数量 FE 节点主要负责用户请求的接入、查询解析规划、元数据管理及节点管理等工作。 对于生产集群,一般建议部署至少 3 个节点的 FE 以实现高可用环境。FE 节点分为以下两种角色: Follower 节点:参与选举操作,…...
Android Studio中Gradle 7.0上下项目配置及镜像修改
最近在打包一个测试项目的时候,使用的android studio版本比较老,后来升级到2024发现了一些小问题。可能对于安卓程序员来说,司空见惯,但对我这样的安卓小白,可把我折腾了半天。现在记录下来,供比我还小白的…...
Android Studio中Gradle中Task列表显示不全解决方案
问题现象 解决方案 File -> Settings -> Experimental ->勾选Configure all Gradle tasks during Gradle Sync(this can make Gradle Sync slower) 参考文章 Android执行build-gradle中的任务Task...
OneNote内容太多插入标记卡死的解决办法
OneNote内容太多插入标记卡死的解决办法 针对平板电脑的OneNote用户适合此类情况: 当向电脑导入几百页pdf可以正常使用,唯独插入标记的时候OneNote直接罢工,只能关闭。关闭时还可能会出现0x000000fxxxxx的错误。 注:仅对于平板…...
vue3:十三、分类管理-表格--行内按钮---行删除、批量删除实现功能实现
一、实现效果 增加行内按钮的样式效果,并且可以根绝父组件决定是否显示 增加行内删除功能、批量删除功能 二、增加行内按钮样式 1、增加视图层按钮 由于多个表格都含有按钮功能,所以这里直接在子组件中加入插槽按钮 首先增加表格行<el-table-column></el-table-…...
Python类的力量:第五篇:魔法方法与协议——让类拥有Python的“超能力”
文章目录 前言:从“普通对象”到“Python原生公民”的进化之路 一、魔法方法:赋予对象“超能力”的基因1. 构造与析构:对象生命周期的“魔法开关”2. 字符串表示:对象的“自我介绍”3. 运算符重载:让对象支持“数学魔法…...
R S的EMI接收机面板
图片摘自R & S官网。 根据您提供的第一张图(设备前面板带屏幕的图像),这是 Rohde & Schwarz ESRP7 EMI Test Receiver 的正面显示界面,我将对屏幕上显示的参数逐项进行解读: 🖥️ 屏幕参数解读 左…...
pytorch nn.RNN demo
之前已经讲过关于RNNCell的实现了. 这里用LLM写了一个简单的nn.RNN demo: import torch import torch.nn as nn# 设置随机种子以便结果可复现 torch.manual_seed(42)# 定义模型参数 input_size 4 # 输入特征维度 hidden_size 8 # 隐藏层维度 num_layer…...
高防服务器流量“清洗”什么意思
在当今数字化的时代,网络安全成为了备受关注的焦点。其中,高防服务器流量“清洗”这个概念,对于许多朋友来说可能还比较陌生。今天,就让我们一起来揭开它神秘的面纱。 首先,咱们得明白,高防服务器流量“清…...
Unity3D开发AI桌面精灵/宠物系列 【六】 人物模型 语音口型同步 LipSync 、梅尔频谱MFCC技术、支持中英文自定义编辑- 基于 C# 语言开发
Unity3D开发AI桌面精灵/宠物系列 【六】 人物模型 语音口型同步 LipSync 、梅尔频谱MFCC技术 C# 语言开发 该系列主要介绍怎么制作AI桌面宠物的流程,我会从项目开始创建初期到最终可以和AI宠物进行交互为止,项目已经开发完成,我会仔细梳理一下…...
Java详解LeetCode 热题 100(17):LeetCode 41. 缺失的第一个正数(First Missing Positive)详解
文章目录 1. 题目描述2. 理解题目3. 解法一:排序法(不满足题目要求)3.1 思路3.2 Java代码实现3.3 代码详解3.4 复杂度分析3.5 不足之处 4. 解法二:哈希表法4.1 思路4.2 Java代码实现4.3 代码详解4.4 复杂度分析4.5 不足之处 5. 解…...
Kafka消息路由分区机制深度解析:架构设计与实现原理
一、消息路由系统的核心架构哲学 1.1 分布式系统的三元悖论 在分布式消息系统的设计过程中,架构师需要平衡三个核心诉求:数据一致性、系统可用性和分区容忍性。Kafka的分区路由机制本质上是对CAP定理的实践解: 一致性维度:通过…...
用C语言实现了——一个基于顺序表的插入排序演示系统
一、知识要点、 插入排序是一种简单直观的排序算法,它的工作方式类似于我们整理扑克牌。 基本原理: 插入排序通过构建有序序列来工作。它每次从无序序列中取出一个元素,然后将其插入到已排序序列的适当位置。这个过程重复进行,…...
linux libdbus使用案例
以下是一个基于 Linux libdbus 的详细指南,包含服务端和客户端的完整代码示例,涵盖 方法调用、信号发送 和 异步消息处理。libdbus 是 D-Bus 的底层 C 库,直接操作 D-Bus 协议,适合需要精细控制的场景。 1. libdbus 的核心机制 连接管理:通过 dbus_bus_get 连接系统总线或…...