当前位置: 首页 > article >正文

Qwen3-VL-8B企业级应用:软件测试中的自动化UI验证与报告生成

Qwen3-VL-8B企业级应用软件测试中的自动化UI验证与报告生成1. 引言做软件测试的朋友特别是搞UI自动化那块的估计都遇到过类似的头疼事。每天跑几百上千个测试用例截图存了一大堆最后还得人工一张张去看按钮是不是点不了弹窗文案对不对图片有没有加载出来布局有没有错位。这活儿不仅枯燥还特别容易看走眼尤其是那些细微的视觉差异人眼盯久了真的会麻木。更麻烦的是写测试报告。发现问题了得把截图贴到报告里再手动描述问题在哪、怎么复现。测试用例一多光整理报告就能花掉大半天时间。我们之前也试过一些传统的图像比对工具但稍微改个字体、调个颜色或者因为渲染差异导致像素有轻微偏移它就报错误报率太高实用性大打折扣。最近我们团队尝试把Qwen3-VL-8B这个多模态大模型引入到测试流程里效果让人眼前一亮。它不像传统工具那样死板地比对像素而是真的能“看懂”截图。它能理解屏幕上哪些是按钮、哪些是输入框、哪些是文本段落然后判断它们的状态和内容是否符合预期。更厉害的是它还能把分析结果自动整理成结构清晰的测试报告直接把问题和证据关联起来。这篇文章我就来分享一下我们是怎么做的以及实际用下来到底能省多少事。2. 为什么选择Qwen3-VL-8B做UI验证在考虑用AI做UI测试之前我们评估过好几种方案。传统的基于像素比对的工具前面说了太脆弱。基于DOM结构的UI自动化测试比如Selenium虽然稳定但只能用于Web对于客户端软件、移动端App或者一些复杂的图形界面就无能为力了而且它“看”不到最终的渲染效果。Qwen3-VL-8B给我们提供了一个新的思路。它本质上是一个能同时理解图像和文本的模型。你给它一张软件界面的截图再告诉它你想检查什么比如“检查登录按钮是否为禁用状态”或者“验证标题文本是否为‘欢迎登录’”它就能给出判断。这种能力正好戳中了UI验证的几个核心痛点理解语义而非像素它不关心某个像素点的RGB值是否完全一致而是理解“这是一个按钮”“它的颜色是灰色的”“上面写着‘提交’”这些高级语义。这样界面的一些非功能性视觉调整比如阴影深浅、圆角大小就不会再引发误报了。覆盖传统盲区很多UI问题比如文字重叠、图标模糊、元素轻微错位是代码层面的DOM检查发现不了的但却是用户能直接感知的。Qwen3-VL-8B通过视觉分析可以很好地覆盖这部分“视觉回归测试”。处理动态与非标准控件对于一些自定义绘制的控件、游戏UI、或者复杂的数据可视化图表传统的UI测试框架很难定位和断言。视觉模型则可以直接“看到”它们并进行分析。自然语言交互你可以用很自然的话来描述测试预期比如“检查错误提示信息是否包含‘密码错误’”而不需要去写复杂的XPath或CSS选择器。这降低了测试用例的编写和维护成本。当然它也不是万能的。对于极度精确的像素级对齐要求或者对颜色色值有严格规范的情况可能还需要结合其他方法。但对于大多数功能性的UI状态和内容验证Qwen3-VL-8B已经能解决80%以上的问题了。3. 搭建自动化UI验证工作流把Qwen3-VL-8B集成到现有的自动化测试流程里并不需要推倒重来。我们设计了一套补充性的工作流可以和你正在用的Selenium、Appium、Playwright等工具无缝配合。整个流程的核心思想是在关键的测试步骤执行后截取屏幕图像然后交给Qwen3-VL-8B进行“视觉断言”。3.1 系统架构与准备工作我们搭建了一个简单的服务。测试机器跑自动化用例的机器在需要验证时将截图和验证指令发送给部署了Qwen3-VL-8B的推理服务然后获取并解析返回的JSON格式结果。首先你需要一个能跑起来Qwen3-VL-8B的环境。这里假设你已经准备好了Python环境和必要的深度学习库如PyTorch。# 安装基础依赖 pip install transformers pillow torch然后你可以写一个简单的客户端类用来和模型交互。这个类负责加载模型、处理图片、发送提示词并解析结果。import torch from PIL import Image from transformers import AutoModelForCausalLM, AutoTokenizer class QwenVLValidator: def __init__(self, model_pathQwen/Qwen3-VL-8B): self.device cuda if torch.cuda.is_available() else cpu print(f正在加载模型到设备: {self.device}) # 加载tokenizer和模型 self.tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) self.model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.float16, # 使用半精度节省显存 device_mapauto, trust_remote_codeTrue ).eval() def analyze_ui(self, image_path, instruction): 分析UI截图 :param image_path: 截图文件路径 :param instruction: 验证指令例如“检查登录按钮是否可点击” :return: 模型返回的文本结果 # 打开图片 image Image.open(image_path).convert(RGB) # 构建多模态消息 messages [ { role: user, content: [ {type: image}, {type: text, text: instruction} ] } ] # 准备输入 text self.tokenizer.apply_chat_template( messages, tokenizeFalse, add_generation_promptTrue ) image_inputs self.processor(image, return_tensorspt).to(self.device) # 生成推理 inputs self.tokenizer(text, return_tensorspt).to(self.device) with torch.no_grad(): generated_ids self.model.generate( **inputs, **image_inputs, max_new_tokens512, do_sampleFalse ) # 解码输出 generated_ids_trimmed [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] response self.tokenizer.batch_decode(generated_ids_trimmed, skip_special_tokensTrue)[0] return response3.2 与自动化测试框架集成接下来就是在你的测试脚本里调用这个验证器了。以Python Selenium为例from selenium import webdriver from your_validator_module import QwenVLValidator # 导入上面写的类 import time class TestLoginPage: def setup_method(self): self.driver webdriver.Chrome() self.driver.get(https://your-app.com/login) self.validator QwenVLValidator() # 初始化验证器 def test_login_button_state(self): 测试1验证初始状态下登录按钮应为禁用 # 1. 截图 screenshot_path screenshots/login_init.png self.driver.save_screenshot(screenshot_path) # 2. 调用视觉模型进行验证 instruction 仔细观察这张软件界面截图。请判断页面中央蓝色的登录按钮当前是否处于可点击启用状态。仅回答是或否并简要说明判断依据。 result self.validator.analyze_ui(screenshot_path, instruction) # 3. 解析结果并断言 print(f视觉验证结果: {result}) # 这里可以根据模型返回的文本进行逻辑判断例如判断结果中是否包含“否”或“禁用”等关键词 assert 否 in result or 禁用 in result, f登录按钮状态验证失败。模型反馈{result} def test_error_message(self): 测试2验证输入错误密码后的提示信息 # 模拟登录失败 self.driver.find_element(id, username).send_keys(testuser) self.driver.find_element(id, password).send_keys(wrong) self.driver.find_element(id, login-btn).click() time.sleep(2) # 等待提示出现 # 截图并验证 screenshot_path screenshots/login_error.png self.driver.save_screenshot(screenshot_path) instruction 分析此界面截图中的红色错误提示框。框内的提示文字是否包含了‘密码错误’或‘无效密码’的含义仅回答‘是’或‘否’并引用提示框中的原文。 result self.validator.analyze_ui(screenshot_path, instruction) print(f错误信息验证结果: {result}) assert 是 in result, f错误提示信息验证失败。模型反馈{result} def teardown_method(self): self.driver.quit() if __name__ __main__: test TestLoginPage() test.setup_method() try: test.test_login_button_state() test.test_error_message() print(所有视觉验证测试通过) finally: test.teardown_method()通过这种方式你的UI自动化测试就拥有了“眼睛”和“大脑”。测试脚本不再仅仅依赖脆弱的元素定位和属性断言而是能像真人测试员一样对屏幕上的最终呈现效果进行智能验证。4. 自动生成结构化测试报告发现问题只是第一步如何清晰、高效地记录和报告问题同样重要。Qwen3-VL-8B的另一个强大之处在于它可以按照我们设定的格式直接生成一段结构化的问题描述。我们不再需要人工“看图说话”。我们可以设计一个更复杂的提示词Prompt让模型在分析截图后直接输出我们报告系统需要的字段。4.1 设计报告生成提示词我们希望报告包含问题标题、严重等级、详细描述、复现步骤基于截图推断、以及关联的截图文件名。我们可以这样构造指令def generate_report_instruction(screenshot_path, test_case_name): instruction f 你是一个专业的软件测试AI助手。请分析提供的这张名为{screenshot_path}的软件界面截图该截图来自测试用例‘{test_case_name}’。 请严格按照以下JSON格式输出你的分析结果不要输出任何其他内容 {{ “issue_found”: true/false, “issue_title”: “简短的问题摘要”, “severity”: “Critical/High/Medium/Low”, “description”: “详细描述你看到的问题。指出具体的UI元素如按钮、文本、图标及其异常状态。”, “reproduction_steps”: “根据截图推断用户是如何操作才看到这个界面的”, “expected_behavior”: “期望的正确表现应该是什么” }} 请基于截图内容严谨判断。如果界面看起来完全正常没有发现任何问题则将“issue_found”设为false其他字段可以留空或写“N/A”。 return instruction4.2 整合报告生成流程在测试执行过程中我们可以将每次验证的结果收集起来最后汇总成一份完整的报告。import json class TestReporter: def __init__(self, validator): self.validator validator self.report_data [] def run_validation_and_report(self, image_path, test_case_name): 执行验证并生成报告条目 instruction generate_report_instruction(image_path, test_case_name) raw_result self.validator.analyze_ui(image_path, instruction) # 尝试从模型返回的文本中提取JSON部分 try: # 假设模型返回的文本中包含了JSON块 json_start raw_result.find({) json_end raw_result.rfind(}) 1 json_str raw_result[json_start:json_end] result_dict json.loads(json_str) result_dict[screenshot] image_path result_dict[test_case] test_case_name if result_dict.get(issue_found, False): print(f⚠️ 发现问题: {result_dict[issue_title]}) self.report_data.append(result_dict) except json.JSONDecodeError: print(f解析模型输出失败: {raw_result}) # 可以记录原始输出 self.report_data.append({ test_case: test_case_name, screenshot: image_path, raw_output: raw_result, error: Failed to parse JSON }) def generate_html_report(self, output_pathtest_report.html): 生成最终的HTML报告 html_content html headtitle自动化UI视觉测试报告/title style body {{ font-family: sans-serif; margin: 40px; }} .pass {{ color: green; }} .fail {{ color: red; }} .issue {{ border: 1px solid #ccc; margin: 20px 0; padding: 15px; border-radius: 5px; background: #f9f9f9; }} .screenshot {{ max-width: 600px; border: 1px solid #ddd; margin-top: 10px; }} /style /head body h1自动化UI视觉测试报告/h1 for item in self.report_data: html_content f div classissue h3测试用例: {item.get(test_case, N/A)}/h3 pstrong截图:/strong a href{item.get(screenshot, )}{item.get(screenshot, N/A)}/a/p if item.get(issue_found): html_content f p classfailstrong❌ 发现问题/strong/p pstrong标题:/strong {item.get(issue_title, N/A)}/p pstrong严重等级:/strong {item.get(severity, N/A)}/p pstrong描述:/strong {item.get(description, N/A)}/p pstrong复现步骤:/strong {item.get(reproduction_steps, N/A)}/p pstrong期望行为:/strong {item.get(expected_behavior, N/A)}/p img src{item.get(screenshot, )} alt问题截图 classscreenshot/ else: html_content f p classpassstrong✅ 通过/strong - 未发现视觉问题。/p html_content /div html_content /body/html with open(output_path, w, encodingutf-8) as f: f.write(html_content) print(f报告已生成: {output_path}) # 在测试套件中使用 if __name__ __main__: validator QwenVLValidator() reporter TestReporter(validator) # 模拟运行多个测试用例 test_cases [ (screenshots/login_init.png, 验证登录按钮初始状态), (screenshots/login_error.png, 验证错误密码提示), (screenshots/homepage_loaded.png, 验证主页元素加载), ] for img, case_name in test_cases: reporter.run_validation_and_report(img, case_name) reporter.generate_html_report()运行完测试后你会得到一个直观的HTML报告。报告里清晰地列出了哪些用例发现了问题问题是什么严重程度如何并且直接把问题描述和对应的截图关联在一起。测试负责人或者开发同学拿到这份报告一眼就能看懂问题所在省去了大量沟通成本。5. 实际应用效果与挑战我们把这个方案在几个项目中试跑了一段时间说说最直接的感受。首先是效率提升非常明显。以前手工检查截图和写报告一个完整的回归测试周期这部分工作能占小半天。现在基本上测试脚本跑完报告也就同步生成了释放了测试人员大量的重复劳动时间。他们可以把精力更多放在设计更复杂的测试场景和探索性测试上。其次是覆盖率和可靠性。一些以前容易被忽略的视觉问题比如在不同分辨率下文本换行异常、动态加载内容导致的布局闪烁、图标颜色与主题不符等现在都能被捕捉到。模型对于“是否可见”、“文本内容是否匹配”这类问题的判断准确率相当高误报比传统的像素比对工具少了很多。当然挑战也不少。处理速度相比纯代码的断言调用大模型进行推理肯定要慢一些尤其是高分辨率图片。我们的策略是只在关键验证点截图分析而不是每一步都调用。同时可以考虑对截图进行适当压缩或裁剪只保留需要分析的UI区域能显著提升速度。提示词工程模型输出的质量非常依赖于提示词Instruction写得好不好。指令必须清晰、无歧义。比如如果你问“按钮正常吗”模型可能不理解什么叫“正常”。但如果你问“按钮是否是蓝色且文字为‘提交’”它就能给出准确判断。这需要一些积累和调优。复杂场景的准确性对于极度复杂、元素密集的界面或者存在大量相似元素的场景模型偶尔也会“看花眼”。这时可能需要更精细的截图只截取特定区域或者更具体的指令来引导。成本考量如果测试量非常大频繁调用大模型服务可能会产生计算成本。需要根据实际业务量和问题发现率来权衡制定合理的测试策略例如在夜间回归测试中全面使用在快速开发迭代中针对高风险模块使用。总的来说我觉得Qwen3-VL-8B为UI自动化测试打开了一扇新的大门。它并不是要完全替代传统的测试方法而是一个强大的补充。它把测试人员从繁琐的“看图”工作中解放出来让自动化测试的“智能”程度向前迈进了一大步。对于那些视觉一致性要求高、UI变化频繁的产品这套方案的投入产出比会非常高。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

Qwen3-VL-8B企业级应用:软件测试中的自动化UI验证与报告生成

Qwen3-VL-8B企业级应用:软件测试中的自动化UI验证与报告生成 1. 引言 做软件测试的朋友,特别是搞UI自动化那块的,估计都遇到过类似的头疼事。每天跑几百上千个测试用例,截图存了一大堆,最后还得人工一张张去看&#…...

openclaw技术实践:Nunchaku FLUX.1-dev ComfyUI批量生成脚本编写

openclaw技术实践:Nunchaku FLUX.1-dev ComfyUI批量生成脚本编写 你是不是也遇到过这样的场景?在ComfyUI里用Nunchaku FLUX.1-dev模型生成了一张惊艳的图片,然后想:“要是能批量生成不同风格、不同主题的图片就好了。”但每次都要…...

【图像增强】基于matlab HSI和局部同态滤波的彩色图像增强【含Matlab源码 15314期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…...

【水声通信】基于matlab UWOC与OIRS协同通过减轻湍流和优化性能增强水下通信【含Matlab源码 15313期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…...

OpCore-Simplify终极指南:如何10分钟完成黑苹果EFI配置

OpCore-Simplify终极指南:如何10分钟完成黑苹果EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而头痛吗…...

D3KeyHelper:5分钟告别暗黑3重复操作,智能按键宏解放你的双手

D3KeyHelper:5分钟告别暗黑3重复操作,智能按键宏解放你的双手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏…...

高阶 Rust:20% 代价换 80% 收益的编程新路径

【导语:在寻找完美编程语言的过程中,Rust 虽优点突出但开发效率低。如今提出高阶 Rust 方法,用 20% 代价获 80% 好处,为编程领域带来新思考。】传统编程语言的困境与 Rust 的潜力多年来,开发者一直在寻找完美的编程语言…...

Graphormer分子图建模原理:原子中心编码与键距离注意力机制详解

Graphormer分子图建模原理:原子中心编码与键距离注意力机制详解 1. Graphormer模型概述 Graphormer是微软研究院开发的一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该…...

Source Han Serif CN:免费开源宋体的7种字重完整使用教程

Source Han Serif CN:免费开源宋体的7种字重完整使用教程 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高质量中文字体而烦恼吗?Source Ha…...

每月 20 美元技术栈:低成本运营高收益软件公司的秘诀

【导语:在科技行业普遍追求高额融资与复杂架构的当下,Steve Hanov 分享了用每月 20 美元技术栈运营多家月经常性收入达 1 万美元公司的经验,为低成本创业提供了新思路。】精简服务器:告别 AWS 高成本2026 年,启动 AWS …...

UE5特效与逻辑分离实战:用Niagara做炫酷弹道,用蓝图处理伤害判定(避坑指南)

UE5特效与逻辑分离实战:用Niagara做炫酷弹道,用蓝图处理伤害判定(避坑指南) 在UE5游戏开发中,弹道效果的处理往往面临一个核心矛盾:既要追求视觉上的华丽表现,又要确保游戏逻辑的精确性。传统做…...

如何快速上手p5.js Web Editor:免费在线创意编程的终极指南

如何快速上手p5.js Web Editor:免费在线创意编程的终极指南 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, beginne…...

从理论到实践:解析上下文无关文法与下推自动机的等价性及其应用

1. 上下文无关文法:编程语言的骨架 第一次接触上下文无关文法(CFG)时,我正尝试为团队设计一个简单的领域专用语言(DSL)。当时完全没想到,这个看似抽象的理论概念,竟成了解决实际问题的金钥匙。简单来说,上下文无关文法…...

3个技巧让SonarQube代码质量报告变得专业易读

3个技巧让SonarQube代码质量报告变得专业易读 【免费下载链接】sonar-cnes-report Generates analysis reports from SonarQube web API. 项目地址: https://gitcode.com/gh_mirrors/so/sonar-cnes-report 你是否曾在面对SonarQube密密麻麻的质量指标时感到无从下手&…...

不用VGG16也能行?在乳腺超声分类任务上快速对比ResNet50与MobileNetV3

医学图像分类实战:ResNet50与MobileNetV3在乳腺超声诊断中的横向评测 当医疗AI遇上轻量化模型,我们该如何在精度与效率之间寻找平衡点?乳腺超声图像的自动分类一直是计算机辅助诊断系统的核心挑战。传统VGG16架构虽然表现稳定,但…...

Lattice Diamond IP核配置实战:从新建项目到生成BIT文件的完整流程

Lattice Diamond IP核配置实战:从新建项目到生成BIT文件的完整流程 在FPGA开发领域,Lattice Diamond以其轻量级和高效性赢得了不少开发者的青睐。不同于Xilinx和Altera(现Intel)的庞大工具链,Diamond提供了更简洁的工作…...

一个人生倒计时的网页应用

这是一个非常棒的想法!开发一个“人生倒计时”网页应用不仅能帮助用户直观地感受时间,也是学习 HTML、CSS 和 JavaScript 协同工作的经典实践。为了确保我提供的代码完全符合你的需求,我先确认一下初步的功能设想:1. 核心逻辑概述…...

SAP自定义打印机纸张类型:从SPAD到SmartForm的完整指南

1. SAP自定义打印机纸张类型的必要性 第一次接触SAP打印功能时,我也以为系统自带的A3、A4标准纸张就能满足所有需求。直到遇到客户要求打印特殊尺寸的送货单,才发现现实场景远比想象复杂。比如物流行业常用的三联单、仓库的条形码标签、财务的特殊凭证&a…...

Python AI爬虫实战:爬取张雪峰微博并进行情感分析与词云可视化剖

1. 引入 在现代 AI 工程中,Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的,官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为,最好的办法…...

ArcGIS实战:如何将不同分辨率DEM进行无缝镶嵌以扩展地形分析范围

1. 为什么需要融合不同分辨率的DEM数据 第一次用高精度DEM做地形分析时,我就被坑惨了。当时手头有份2米分辨率的激光雷达数据,精度高到能看清每条田间小路。但当我把它加载到全局地图时,发现四周全是空白——就像把高清照片贴在白墙上那么突兀…...

ConvNeXt 系列改进:ConvNeXt 与 Swin Transformer 融合:构建 CSWin 混合 Block,超越纯 CNN

摘要:在 2026 年的计算机视觉(CV)主干网络发展中,纯卷积神经网络(CNN)与纯视觉 Transformer(ViT)的“路线之争”已落下帷幕,“混合架构(Hybrid Architecture)”全面接管了 SOTA 榜单。根据 2026 年 3 月最新发表的多篇顶会与医学视觉核心论文(如 CS-Net、HyCoSwin …...

OpenClaw入门案例:第一个龙虾智能体程序(Hello World版,复制可运行)

OpenClaw入门案例:第一个龙虾智能体程序(Hello World版,复制可运行)📚 本章学习目标:深入理解OpenClaw入门案例的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。…...

从零实现富文本编辑器#-React可编辑节点的组件预设泄

1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...

UniversalSplitScreen:让任何游戏都能分屏游玩的终极解决方案

UniversalSplitScreen:让任何游戏都能分屏游玩的终极解决方案 【免费下载链接】UniversalSplitScreen Split screen multiplayer for any game with multiple keyboards, mice and controllers. 项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScree…...

Java实战:从零构建一个支持微积分运算的科学计算器

1. 科学计算器的核心功能设计 构建一个支持微积分运算的科学计算器,首先要明确功能边界。基础功能包括四则运算、三角函数、指数对数等常规计算,而核心难点在于微积分功能的实现。我建议采用模块化设计思路,将计算器分为三个层次:…...

FPGA 实现 YCbCr 到 RGB 色彩空间转换的定点化设计

1. 色彩空间转换的基础原理 第一次接触YCbCr和RGB转换时,我完全被那些小数系数搞晕了。后来才发现,这其实就是把颜色信息用不同方式"打包"的过程。想象你有一套乐高积木,RGB是按红绿蓝三种基础积木的数量来记录,而YCbCr…...

RK3562J与MCP2518FD通信测试全记录:从双板互发数据到常见错误分析

RK3562J与MCP2518FD通信实战:从双板互发到异常诊断全解析 当两块开发板通过CAN-FD总线成功交换数据的瞬间,那种"灯亮起来"的成就感是嵌入式开发者独有的快乐。RK3562J作为瑞芯微新一代工业级处理器,其与MCP2518FD的组合在车载诊断、…...

ESP32 IDF环境下LVGL显示GIF的避坑指南:内存配置与性能优化

ESP32 IDF环境下LVGL显示GIF的避坑指南:内存配置与性能优化 在嵌入式设备上实现流畅的GIF动画显示一直是开发者面临的挑战,尤其是资源受限的ESP32平台。本文将深入探讨ESP32 IDF环境下使用LVGL显示GIF时可能遇到的内存和性能问题,并提供一系列…...

Geo-SAM技术解析:基于QGIS的地理空间AI图像分割架构与实现

Geo-SAM技术解析:基于QGIS的地理空间AI图像分割架构与实现 【免费下载链接】Geo-SAM A QGIS plugin tool using Segment Anything Model (SAM) to accelerate segmenting or delineating landforms in geospatial raster images. 项目地址: https://gitcode.com/g…...

201-基于Wasserstein的分布式鲁棒优化:精确刻画风电出力概率分布与混合整数线性规划...

201-基于Wasserstein的分布式鲁棒优化 研究内容:结合Wasserstein距离实现风电出力概率分布模糊集的精确刻画,并运用线性决策规则与强对偶理论将其转换为混合整数线性规划模型求解 注意事项:并没有对全文进行复现,通过算例&#xf…...