news 2026/10/2 3:38:39

JMeter处理验证码登录接口:从OCR识别到token关联的完整方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JMeter处理验证码登录接口:从OCR识别到token关联的完整方案

做接口测试这么多年,要说哪个场景最让人头痛,验证码登录绝对是排得上号的。很多小伙伴在Postman里把普通接口调得飞起,一到JMeter就卡在验证码这一关:验证码怎么获取、怎么识别、怎么让登录接口自动带上、怎么把登录后的token传给后面的请求。这套链路一旦理不清,脚本就只能做到一半,压测更是想都别想。今天这篇就把JMeter处理验证码登录接口的完整流程拆开揉碎,从方案选型讲到实际操作,再到避坑排障,争取让你看完就能直接上手。

这篇内容适合两类人:一是刚接触JMeter接口测试、还没碰过验证码的测试新人;二是已经在做接口自动化,但被验证码卡住、不知道怎么闭环的老手。我这里不讲虚的,全部是基于真实项目踩坑后沉淀下来的做法,包括OCR识别、Cookie关联、token提取这些关键环节,都会给到可以直接复用的脚本和配置。

1. 验证码登录接口测试的核心思路与方案选型

1.1 先理清验证码登录的完整业务链路

很多人一上来就想着“怎么识别验证码”,但如果你连业务的完整链路都没搞清楚,后面做多少都是白费功夫。一个典型的验证码登录流程是这样走的:

  1. 前端页面加载时,向验证码接口发请求,后端生成一张验证码图片,同时把验证码的值存到服务端,并与当前会话Session绑定。
  2. 前端展示图片,用户输入用户名、密码和看到的验证码字符。
  3. 前端提交登录接口,参数包含用户名、密码、验证码,同时携带当前会话的Cookie。
  4. 后端先校验验证码是否正确、是否过期、是否与当前会话匹配,再校验账号密码。
  5. 校验全部通过后,返回登录成功的token,前端把token存起来,后续请求都带上。

从接口测试的角度看,JMeter要模拟的就是第1步、第3步、第5步。第1步负责拿到验证码图片,第3步负责带着识别结果去登录,第5步负责提取token。链路清楚了,后面的每一步怎么做就有了方向。

这里有个特别容易忽略的点:验证码的校验通常和Session绑定。也就是说,你获取验证码时用的那个Session,和提交登录时用的Session必须是同一个,否则哪怕你验证码识别得一字不差,后端也会给你返回“验证码错误”。这一点我会在后面实操环节单独拎出来讲,因为这是验证码登录接口测试最隐蔽的坑。

1.2 四种验证码处理方案的取舍

要说怎么让JMeter自动处理验证码,业界其实没有银弹。根据项目实际情况,我总结下来有四种方案,各有优劣,看场景选:

方案原理优点缺点适用场景
测试环境万能验证码/后门接口开发在测试环境预留一个固定验证码(如8888),或一个直接跳过验证码校验的调试接口最稳定、零成本、不依赖外部工具需要开发配合,生产环境不可用压测、接口自动化测试的首选
OCR识别用Tesseract、Tess4J等工具识别图片里的字符自动化程度高、不需要开发配合识别率受图片质量影响,有概率识别失败验证码比较简单(纯数字、无干扰)的场景
直连服务端查值测试环境直连Redis/数据库,把当前Session对应的验证码值取出来100%准确、实现不复杂需要能访问服务端存储,权限要求高验证码存在Redis或数据库里的项目
第三方打码平台把图片传给打码平台,由人工或AI识别后返回结果识别率高、不挑验证码类型有费用、有网络延迟、可能有数据安全风险复杂验证码、滑块验证码、生产环境临时需要

我的实际建议很简单:能走测试后门就走后门,特别是压测场景,千万别死磕OCR。OCR看似酷炫,但识别率做不到100%,而接口测试最怕的就是不确定性——脚本跑着跑着因为一个验证码识别错了就失败,排查起来极其痛苦。只有当开发明确表示没有后门、或者你就是要验证验证码这个功能本身的时候,才考虑OCR或打码平台。

如果你确实需要OCR方案,后面第3章我会给出可落地的具体配置和代码。但请记住:工具的选择要服务于成本,不要为了炫技而增加维护负担。

2. 环境准备与基础配置:先把JMeter基础打牢

2.1 JMeter版本选择和JDK环境

JMeter的安装本身不复杂,但版本选择有讲究。我目前用的比较多的是JMeter 5.5搭配JDK 8,这个组合在稳定性上经过了大量项目验证。JMeter 5.6之后对JDK版本有更高要求,如果你用的是旧版JDK,强行升级JMeter版本会遇到启动报错,反而浪费时间。

下载方面,直接去Apache JMeter官网下载zip包,Windows用户解压后进入bin目录双击jmeter.bat即可启动。如果你有洁癖,可以把bin目录加到系统PATH环境变量里,这样后续用命令行跑脚本会更顺手。Linux和Mac用户解压后运行jmeter.sh,前提是Java环境没问题。

安装完第一件事,打开bin目录下的jmeter.properties,找到语言配置项,改成简体中文。别小看这一步,界面语言不换过来,整个学习曲线的坡度会陡一倍。改完后重启JMeter就能看到中文界面了。

2.2 HTTPS登录接口的证书处理

现在的登录接口绝大多数是HTTPS的,直接用JMeter请求HTTPS接口时,经常会遇到SSL握手失败或者证书不信任的报错。解决思路有两个层面。

第一个是正式环境但证书有效的情况,JMeter启动时会生成一个ApacheJMeterTemporaryRootCA证书,你只要在浏览器里导入并信任这个证书,就能录制和请求HTTPS接口,这个方案适合做脚本录制。第二个是测试环境自签名证书的情况,JMeter会直接报错,最省事的做法是在jmeter.properties文件里找到相关SSL设置,把“忽略证书校验”的开关打开。这样JMeter在请求HTTPS接口时不再校验证书链,规避掉绝大部分SSL报错。

我自己实测下来的经验是:先确认测试环境的证书是不是自签名,是的话直接开忽略校验,比配证书导入快得多。需要注意,这个开关只影响JMeter本身发起的请求,不影响其他工具,不用担心搞乱你的环境。

2.3 常用插件与依赖准备

JMeter 5.x版本内置了不少常用元件,纯做接口测试的话,基础的HTTP请求、JSON提取器、正则表达式提取器都自带了,基本不需要额外装插件。真正需要提前准备的是OCR识别这一环的依赖:

  • 如果你用Tesseract命令行方案,Windows需要安装Tesseract OCR,安装时记住安装路径,后面Beanshell脚本里要调用的。
  • 如果你用Tess4J这种Java库,需要提前下载对应的jar包并放到JMeter的lib/ext目录下,或者通过Beanshell的addClassPath方法动态加载。

从稳定性来说,我建议先走Tesseract命令行方案,因为它的依赖少、环境问题少,性价比最高。等脚本逻辑全部跑通,再考虑封装成更高效的服务。前面提到的方案不是一成不变的,要跟着你的实际情况动态调整。

3. 实操全流程:从获取验证码到登录成功的完整实现

3.1 第一步:获取验证码图片并保存到本地

要让JMeter处理验证码,第一步必须先拿到验证码图片。拿到的路径一般是这样的:添加线程组,在线程组下添加HTTP请求默认值、HTTP Cookie管理器、HTTP请求和BeanShell后置处理器。

先说HTTP Cookie管理器。这个元件在这个场景里不是可有可无,而是必需的。前面提过,验证码和Session绑定,所以获取验证码和提交登录必须处于同一个Cookie上下文里。HTTP Cookie管理器会自动维护这个Session,你不用手动去复制Cookie头,但前提是你必须把它加到线程组里,且获取验证码和登录这两个请求都放在它下面。

然后添加一个HTTP请求,请求方法选GET,填上验证码接口的URL。比如https://api.example.com/captcha,响应数据是一张图片的二进制流。这里有个细节:JMeter默认把响应当成文本处理,你要在HTTP请求的“实现”或“客户端”配置里,确保响应结果是原始字节流,否则后面保存图片时会得到一堆乱码或空文件。

接着添加BeanShell后置处理器,用脚本把响应图片写到本地。这是整个流程第一个关键技术点,因为后续OCR识别的输入就是这张图片文件。脚本代码如下:

import java.io.FileOutputStream; import java.io.InputStream; byte[] data = prev.getResponseData(); String filePath = "D:/jmeter_test/captcha.png"; FileOutputStream fos = new FileOutputStream(filePath); fos.write(data); fos.flush(); fos.close();

这段脚本的作用是把上一个请求的响应字节流直接写入指定路径的文件。prev.getResponseData()是JMeter提供的API,用来获取上一个采样器的响应数据。写完以后你可以先手动打开这张图片,确认一下它确实是清晰的验证码,不要急着往下走,这一步能避免后续一堆连锁问题。

这里提醒一下路径问题:Windows路径要用双反斜杠或者正斜杠,避免转义符把路径搞乱。保存图片的目录必须提前创建好,否则脚本直接抛FileNotFoundException。

3.2 第二步:用OCR识别验证码并存入变量

图片拿到了,接下来就是识别。我推荐的方式是Tesseract命令行,因为JMeter的Beanshell可以通过Java的Runtime类直接调用系统命令,实现起来最直接。

先确保Tesseract已安装。Windows用户在命令行执行tesseract --version看是否识别,安装时记得勾选添加到系统PATH的选项,或者后续在脚本里写全路径。Linux用户通过apt或yum安装。

识别验证码的Beanshell脚本如下:

import java.io.BufferedReader; import java.io.InputStreamReader; String cmd = "tesseract D:/jmeter_test/captcha.png stdout --psm 7 -c tessedit_char_whitelist=0123456789"; Process p = Runtime.getRuntime().exec(cmd); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream(), "UTF-8")); String code = reader.readLine(); if (code == null) { code = ""; } code = code.trim(); vars.put("captchaCode", code);

说一下这段脚本的意图。--psm 7表示把图片当成一行文本来识别,这对验证码场景最合适。-c tessedit_char_whitelist=0123456789是设置识别字符白名单,如果你的验证码只包含数字,加这个参数能显著提升识别率。识别结果通过vars.put("captchaCode", code)存到JMeter变量里,后面登录请求直接引用${captchaCode}即可。

我在实际操作中发现,第一次跑OCR时最容易遇到两个问题:一是识别的结果带空格或换行,需要用trim去掉;二是Tesseract识别纯数字验证码的成功率不错,但只要验证码里加了字母,成功率就会下降。所以如果你的验证码是数字+字母混合,白名单那里要改成0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,同时做好识别失败重试的预案。

3.3 第三步:发起登录请求并处理验证码校验

验证码识别出来存到变量里以后,登录请求就水到渠成了。在线程组下再添加一个HTTP请求,请求方法选POST,填登录接口URL,参数列表里把用户名、密码和验证码都配上,验证码的值用${captchaCode}引用。

这一步有两点必须做到,缺一个都会让脚本扑街:

第一,前面的HTTP Cookie管理器必须在线程组里且要保持同一上下文。你获取验证码的请求和登录请求必须在同一个线程组、同一个循环周期内,先执行获取,再执行登录。JMeter默认按从上到下的顺序执行采样器,所以把获取验证码的请求放在登录请求前面即可。

第二,登录接口的Content-Type要填对。绝大多数登录接口是application/x-www-form-urlencoded,少数走JSON格式。如果你填错了Content-Type,后端解析不到参数,会一直报参数缺失或验证码错误。

提交登录后,你可以先看一眼响应数据。如果返回“验证码错误”,优先排查:验证码有没有识别错、Cookie上下文是否一致、验证码是否过期。验证码一般有时效性,比如60秒或5分钟,脚本跑得慢的话,获取验证码和登录之间隔得太久,后端会判定验证码过期,这也是个容易被忽略的坑。

3.4 第四步:提取登录token并传递给后续请求

登录成功只是第一步,接口自动化测试往往还需要带着token去访问业务接口。登录接口的响应一般是JSON格式,token藏在某个字段里,比如{"code":0,"data":{"token":"xxx"}}。提取token推荐用JMeter自带的JSON提取器,比正则表达式更精准,写起来也更直观。

在登录请求下添加一个JSON提取器,配置如下:

  • 变量名称:填authToken
  • JSONPath表达式:填$.data.token
  • 默认值:填notoken

保存后,变量${authToken}就能在后续请求里使用了。如果登录接口返回的token字段不在data下,把JSONPath换成实际路径即可。

拿到token后,还需要把token放到后续请求的请求头里。在登录请求后面添加一个HTTP信息头管理器,填上Authorization的键,值填Bearer ${authToken}。注意鉴权头的前缀是什么,有些项目是Bearer,有些是Token,有些啥也没有,直接放token值,你要根据项目实际情况来。这一步经常有人栽跟头,因为每个公司的鉴权规范都不一样,没有统一的写法。

之后就可以继续添加业务接口的HTTP请求,业务请求会自动带上这个token,整个链路就闭环了。

3.5 完整线程组结构参考

实操到这里,你的JMeter测试计划大概长这样:

测试计划 └── 线程组 ├── HTTP Cookie管理器 ├── HTTP请求(获取验证码) │ └── BeanShell后置处理器(保存图片) ├── BeanShell后置处理器(OCR识别验证码) ├── HTTP请求(登录接口) │ └── JSON提取器(提取authToken) ├── HTTP信息头管理器(Authorization) └── HTTP请求(业务接口)

这里有个细节说明:OCR识别这一步,我用的是独立于采样器的BeanShell后置处理器。在JMeter里,后置处理器必须依附在某一个采样器下才能执行。但保存图片的后置处理器已经挂在了获取验证码请求下面,识别脚本和保存脚本放在一起也行,或者用两个后置处理器串联。只要执行顺序是“先保存图片再识别”,放在同一个采样器下的多个后置处理器会按顺序执行,这样结构更紧凑一些。

4. 进阶技巧:滑块验证码和复杂验证码如何处理

4.1 滑块验证码的接口特征与分析

如果你的项目用的是滑块验证码而不是图形验证码,OCR方案就失效了。这时候不能硬来,先分析滑块验证码的接口设计。滑块验证码通常不是单一接口,而是一组接口配合实现:

  1. 获取滑块背景图和大图,返回两张图片的URL或base64数据,同时返回一个滑块会话ID。
  2. 前端渲染图片,用户拖动滑块到缺口位置。
  3. 前端把滑块拖动轨迹数据提交到校验接口,后端校验轨迹的合规性和缺口位置是否匹配。
  4. 校验成功后返回一个token,前端再拿这个token去提交登录。

从接口测试的角度,要自动化这套流程,你需要:识别背景图的缺口位置、模拟一条合理的拖动轨迹、把轨迹参数提交给校验接口。这里面每一步都有不小的开发量,识别缺口位置需要图像处理技术,模拟轨迹需要研究后端的校验算法。说实话,自己从头实现一个滑块验证码破解器,工期和成本都很高,而且一旦后端的轨迹校验更新,之前的脚本就全部作废。

4.2 复杂验证码场景的务实建议

针对滑块验证码和复杂图形验证码,我的建议是分情况处理:

  • 测试环境:让开发在测试环境关掉滑块验证码,或者提供一个万能滑块校验接口,这是投入产出比最高的方案。
  • 压测场景:直接压登录成功后的业务接口,用参数化好的token绕过登录这一步,单纯压测核心接口的吞吐量。
  • 自动化测试必须走完整登录链路:接第三方打码平台,目前市面上的打码平台对滑块验证码的识别成功率很高,按次收费,对测试团队来说一天的成本是可以接受的。

我在项目里踩过不少次这个坑,最痛的一次是硬着头皮用Selenium模拟真实用户去拖滑块,结果后端轨迹校验一次没过,排查了两天才发现是轨迹算法太“假”。从那以后我就彻底转变思路:能用后门绝不自研,能用平台绝不硬刚。验证码本身是安全设计,测试工具的使命是高效验证业务功能,而不是和验证码死磕。

4.3 OCR识别失败后的降级与重试机制

即使你处理的是简单图形验证码,OCR的识别率也做不到百分百。我在线上环境实测过,纯数字、无干扰线的验证码,Tesseract的识别率大概在80%到90%之间。这意味着每10次登录请求,就有1到2次会因为验证码识别错误而失败。为了不让脚本因为偶发识别失败而中断,你需要设计重试机制。

实现方式有两种:

一种是在JMeter层面做循环控制。把“获取验证码-识别-登录”这三个请求放进一个循环控制器里,设置循环次数比如3次,再用if控制器判断登录响应里是否包含成功的状态字段。如果包含,就退出循环;如果不包含,就继续下一次循环,重新获取验证码、重新识别、重新登录。

另一种是纯脚本层面重试。在Beanshell脚本里识别失败时,直接重新请求验证码接口,再识别,直到成功或达到最大重试次数。这种方式的代码逻辑要复杂一些,我可以给你一个简单的思路,就是在后置处理器脚本里判断识别结果是否为空,为空就调用prev.setSuccessful(false),让这次采样器标记为失败,再利用JMeter的失败重试机制重新执行。

从维护成本来看,我推荐用第一种方式,因为循环控制器是JMeter原生元件,逻辑清晰,出问题也好排查。不管哪种方式,重试次数建议设3次左右,再多就是死循环或者无限拉长脚本执行时间,得不偿失。

5. 常见问题与排障实录

5.1 验证码图片保存失败或保存的文件打不开

这个问题出现的概率非常高,尤其是第一次跑通脚本的新手。表象是脚本没有报错,但保存下来的图片文件用看图软件打不开,或者文件大小是0KB。

我排查过几次,原因基本是这两个:一是HTTP请求的响应数据类型没有被正确处理,JMeter默认把响应当文本,图片二进制流被转码搞坏了;二是脚本里写入文件的路径有问题,比如目录不存在、权限不足、文件名带了非法字符。

针对第一个原因,你可以在HTTP请求的“高级”Tab里调整响应相关的设置,确保JMeter拿到的原始字节流就是图片本身的编码。针对第二个原因,把脚本里的文件路径改成一个确定存在的目录,文件名用纯英文,再试一次。还有一个排查技巧:在线程组里先加一个“查看结果树”监听器,看一眼获取验证码请求的响应数据是不是乱码,如果是乱码,大概率就是响应类型处理出了问题。

5.2 OCR识别率低、登录接口频繁返回验证码错误

识别率低导致的登录失败,原因主要集中在验证码图片本身、OCR参数、验证码时效三个层面。

先说图片本身。很多网站的验证码图片带了背景干扰线、噪点、扭曲变形,Tesseract对这类图片的识别能力有限。你可以在保存图片后,用图像处理脚本对图片做预处理,灰度化、二值化、去噪点,这能让识别率提升不少。但注意,图像预处理在JMeter Beanshell里写起来比较繁琐,我更推荐的做法是:用Python脚本处理图片并调Tesseract,JMeter通过命令行调用Python脚本。这样分工明确,代码也更好维护。

再说OCR参数。--psm 7和字符白名单是必须的,缺一个识别率都可能掉到50%以下。你可以根据验证码的实际样式灵活调整psm参数,比如验证码是多个字符分散排列的,--psm 8可能效果更好。这些参数需要你用几张真实的验证码图片做试验,找出一组识别最稳定的配置。

最后说验证码时效。如果脚本在获取验证码后,经过OCR识别、参数关联再到提交登录,中间耽误了好几秒甚至几十秒,后端很可能已判定验证码过期。排查时看登录响应的具体报错文案,如果提示“验证码已过期”而不是“验证码错误”,那就是时效问题。解决思路是优化脚本执行效率,或者缩短获取验证码和登录之间的间隔。

5.3 Cookie上下文不一致导致验证码校验失败

这是我开头就提醒过的坑,实际踩的人最多。表象是你在浏览器里手动拿验证码和登录接口都成功了,但在JMeter里脚本跑起来就是一直报“验证码错误”。

根本原因是HTTP Cookie管理器没有正确处理会话。要验证这个问题,你在“查看结果树”里对比获取验证码请求和登录请求的Cookie值,如果两次的Cookie值不一样,说明会话丢了。解决方案是:确保HTTP Cookie管理器在线程组的顶层,且获取验证码和登录两个请求都放在这个线程组下面,不要一个放在线程组外、一个放在线程组里。

还有一个少见但确实会遇到的情况:项目里有些接口不走标准的Cookie机制,而是自定义了一个sessionId字段放在请求参数或请求头里。这种情况HTTP Cookie管理器管不了,你需要手动把sessionId提取出来,通过参数或请求头传给登录接口。这个就得看具体项目怎么设计了,你需要抓包看真实请求才能确定。

5.4 JMeter并发压测时验证码接口的坑

如果你拿全链路脚本直接跑并发压测,大概率会遇到两个问题:一是OCR识别在并发下性能极差,因为Tesseract是CPU密集型,并发一上来整个压测机的CPU直接被打满;二是验证码获取接口在并发场景下生成大量图片和Session,服务端压力骤增,响应变慢。

所以压测场景我的建议非常明确:不要用全链路脚本做压测。正确做法是把登录和业务分离,预先准备一批有效的token,参数化到压测脚本里,直接压业务接口。这样既能准确评估业务接口的性能,又避开了验证码这个瓶颈。如果你确实需要压登录接口本身,那请务必要求测试环境开启万能验证码,否则你压出来的数据没有任何参考价值。

5.5 JMeter界面布局错乱、控件重叠的问题

这个问题和验证码本身无关,但使用JMeter的人遇到得非常多,尤其在高分屏或远程桌面环境下。打开JMeter后窗口控件重叠、撕裂,按钮看不清甚至点不到,非常影响效率。

解决方法是调整JMeter的启动参数。打开bin目录下的jmeter.properties文件,找到与界面缩放相关的配置,把JMeter的UI缩放级别调整一下。如果你用的是JMeter 5.x,还可以尝试设置JVM_ARGS环境变量来强制指定字体渲染方式。我实测下来,把JMeter的启动脚本里加一行-Dsun.java2d.uiScale=1能解决大部分Windows系统的界面错乱问题。如果你的问题依旧,检查一下显卡驱动和Java版本,这类问题在Java 8和Java 11上的表现经常不同,换个JDK版本往往就好了。

5.6 常见问题速查表

问题现象可能原因排查方向
图片保存后打不开响应类型处理错误、路径错误检查HTTP请求响应设置、确认目录存在
OCR识别结果为空Tesseract未安装或路径错误、图片质量过差先手动执行tesseract命令验证环境
登录返回验证码错误识别错误、Cookie不一致、验证码过期查看结果树对比Cookie、检查识别结果
登录返回参数错误Content-Type不对、请求头缺失抓包对比真实请求的头部信息
并发下CPU打满OCR识别在并发下消耗过多资源改用万能验证码或参数化token压测
JMeter界面错乱高分屏缩放、JDK渲染bug调整启动参数或更换JDK版本

结尾:一点个人经验之谈

做了这么多年接口测试和压测,我越来越觉得,工具从来不是最大的瓶颈,思路才是。验证码登录接口的自动化,技术上无非就是获取、识别、关联、请求这几个步骤,每一环都有成熟方案。但真正拉开差距的,是你遇到验证码时第一时间的判断:是硬刚OCR,还是先找开发开后门,还是接第三方平台?我当时就是因为一开始太执着于“纯自动化识别”,浪费了不少时间在调OCR参数上,回头看其实完全可以走更务实的路。

最后再分享一个小技巧:在调试OCR和验证码登录脚本时,一定不要只盯着一份验证码图片试到底。你要多刷新几次验证码接口,多保存几张不同样式的图片,用这几张图片反复测试识别参数。只测一张图,参数调得再好看,换张图就可能失灵。把这个思路写进你的调试流程,你会发现后面登录接口的稳定性会好非常多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 3:38:16

鸿蒙商城App评价模块实战:基于React Native for OpenHarmony的完整实现

做OpenHarmony商城App这个项目的时候,我印象最深的不是首页里那些花哨的动效,反而是“写评价”这个看起来平平无奇的功能。原因很简单:它是用户下单之后最常碰到的操作入口,同时牵扯到评分交互、文本输入、图片上传、网络异常兜底…

作者头像 李华
网站建设 2026/10/2 3:38:15

Laya微调框架实战:从ModernBERT到端侧部署的System 1决策指南

1. 从17K Star说起:Laya到底是个什么东西第一次在技术社区刷到Laya这个项目的时候,17K Star的数字确实让我停了一下。做AI工具链这块的人都知道,能拿到这个量级Star的项目,要么是解决了某个极其痛的问题,要么是把某个复…

作者头像 李华
网站建设 2026/10/2 3:38:13

得物商品销售可视化分析与协同过滤推荐系统实战

如果你正在为计算机毕设选题发愁,又不想做那种满大街都是的图书管理系统或者学生信息管理系统,得物商品销售可视化分析加协同过滤推荐系统这个方向,确实值得认真考虑一下。它把电商数据分析、可视化大屏、推荐算法三个热门考点串在了一条业务…

作者头像 李华
网站建设 2026/10/2 3:38:08

恶性肿瘤目标检测数据集实战指南:标注、加载与多尺度融合

简介:本资源是面向医学AI研发者与计算机视觉研究者的恶性肿瘤目标检测专用数据集,聚焦于临床早期癌症识别任务,适用于YOLO等主流模型的训练与验证。压缩包共1574个文件,含786张高清晰度医学影像(JPG)、对应…

作者头像 李华
网站建设 2026/10/2 3:37:51

2026大厂测试技术栈全景图:从功能测试到质量工程师的进阶之路

做了十几年测试,也面试过几百个候选人,2025年到2026年的这个时间窗口里,我最大的感受是:测试这个岗位的“技术栈”正在经历一次大规模的重新洗牌。手里只有“点点点”经验的人脉越来越窄了,而当年我们入行时学的那些工…

作者头像 李华
网站建设 2026/10/2 3:37:01

Cesium实现3DTiles分层分户抽屉效果:智慧楼宇交互方案解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华