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

MAI-UI-8B快速上手:上传截图+输入指令,3秒获取点击坐标

MAI-UI-8B快速上手:上传截图+输入指令,3秒获取点击坐标

1. 为什么选择MAI-UI-8B

想象一下这样的场景:你需要测试一个移动应用,但每次界面更新都会导致原有的自动化测试脚本失效。传统UI自动化工具依赖控件ID或XPath定位元素,一旦开发修改了界面结构,测试脚本就需要重新调整。

MAI-UI-8B提供了一种全新的解决方案。它不关心代码结构,只关注用户实际看到的内容。你只需要上传一张截图,用自然语言描述想要点击的元素,3秒内就能获得精确的屏幕坐标。这种基于视觉的交互方式,让UI自动化测试变得更加直观和稳定。

2. 快速部署MAI-UI-8B服务

2.1 环境准备

在开始之前,请确保你的系统满足以下要求:

  • 已安装Docker 20.10或更高版本
  • 配备NVIDIA显卡且显存≥16GB
  • 已正确安装NVIDIA驱动和CUDA 12.1+

可以通过以下命令验证环境:

# 检查Docker版本 docker --version # 检查NVIDIA驱动 nvidia-smi # 检查CUDA版本 nvcc --version

2.2 一键启动服务

MAI-UI-8B已经预置了完整的运行环境,启动非常简单:

docker run -d \ --name mai-ui-8b \ --gpus all \ -p 7860:7860 \ --shm-size=2g \ --restart=unless-stopped \ registry.cn-hangzhou.aliyuncs.com/mai-ui/mai-ui-8b:latest

等待约30秒后,可以通过以下命令检查服务状态:

docker logs -f mai-ui-8b

当看到"Application startup complete"日志时,说明服务已就绪。

3. 通过Web界面快速体验

3.1 访问Web界面

在浏览器中打开http://localhost:7860,你将看到一个简洁的交互界面。这个界面包含三个主要部分:

  1. 图片上传区域
  2. 指令输入框
  3. 结果显示区域

3.2 上传截图并获取坐标

让我们通过一个实际例子来体验MAI-UI-8B的能力:

  1. 准备一张手机屏幕截图(建议分辨率1080×2400)
  2. 点击"Upload Image"按钮上传图片
  3. 在输入框中输入指令,例如:"click the settings icon"
  4. 点击"Submit"按钮

几秒钟后,你将看到类似这样的结果:

{ "coordinate": [832, 1991] }

这个坐标是归一化后的值(范围0-999),你可以通过简单的计算转换为实际像素坐标:

# 假设图片宽1080,高2400 x_pixel = 832 * 1080 / 999 y_pixel = 1991 * 2400 / 999

4. 通过API实现自动化调用

4.1 Python调用示例

Web界面适合快速体验,但自动化测试需要通过API实现。以下是完整的Python调用示例:

import requests import base64 # 读取并编码图片 with open("screenshot.png", "rb") as f: encoded_image = base64.b64encode(f.read()).decode() # 构造API请求 response = requests.post( "http://localhost:7860/v1/chat/completions", json={ "model": "MAI-UI-8B", "messages": [ { "role": "user", "content": [ {"type": "text", "text": "click the settings icon"}, {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{encoded_image}"}} ] } ], "max_tokens": 500 } ) # 解析结果 result = response.json() print(result["choices"][0]["message"]["content"])

4.2 结果解析

API返回的结果包含完整的推理过程:

<grounding_think> The settings icon is the gear-shaped icon in the top right corner of the screen. </grounding_think> <answer> {"coordinate":[832,1991]} </answer>

你可以使用正则表达式提取坐标信息:

import re answer_text = result["choices"][0]["message"]["content"] match = re.search(r"<answer>(.*?)</answer>", answer_text, re.DOTALL) if match: coord = eval(match.group(1)) print(f"点击坐标:{coord['coordinate']}")

5. 实际应用案例

5.1 自动化测试脚本

让我们将MAI-UI-8B集成到一个实际的自动化测试脚本中:

from PIL import Image import subprocess def take_screenshot(filename="screenshot.png"): """通过ADB获取设备截图""" subprocess.run(["adb", "shell", "screencap", "-p", "/sdcard/screen.png"]) subprocess.run(["adb", "pull", "/sdcard/screen.png", filename]) return filename def tap_screen(x, y): """通过ADB点击屏幕""" subprocess.run(["adb", "shell", "input", "tap", str(x), str(y)]) # 测试流程 screenshot = take_screenshot() coord = get_coordinate(screenshot, "click the login button") tap_screen(*coord)

5.2 高级功能:多步操作

MAI-UI-8B支持上下文记忆,可以实现多步操作:

# 第一步:打开设置 coord = get_coordinate(screenshot1, "click the settings icon") tap_screen(*coord) # 第二步:进入网络设置 time.sleep(2) # 等待页面加载 screenshot2 = take_screenshot("screen2.png") coord = get_coordinate(screenshot2, "click the network settings") tap_screen(*coord)

6. 总结与最佳实践

6.1 核心优势总结

通过本文的实践,我们验证了MAI-UI-8B的几个关键优势:

  1. 直观易用:基于自然语言和视觉的交互方式,降低使用门槛
  2. 稳定可靠:不依赖控件树结构,界面变化不影响定位准确性
  3. 灵活扩展:标准API接口,轻松集成到现有测试框架中

6.2 使用建议

为了获得最佳效果,建议遵循以下实践:

  1. 使用清晰的截图(分辨率不低于720p)
  2. 指令尽量具体明确(如"click the blue button at the bottom")
  3. 对于复杂界面,可以先让模型描述界面元素分布
  4. 结合ADB命令实现端到端自动化

6.3 性能优化

如果遇到性能问题,可以考虑:

  1. 调整Docker容器的资源限制
  2. 使用更高性能的GPU
  3. 对频繁使用的操作进行缓存
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
http://www.jsqmd.com/news/537616/

相关文章:

  • 嵌入式系统的实时性能优化详解
  • 2026年评价高的无锡工业电动推杆/江苏多节电动推杆/大推力电动推杆实力品牌厂家推荐 - 品牌宣传支持者
  • Go语言HTTP服务开发:从标准库到框架
  • 田间气象站 农业气象监测系统
  • Mathematica 教学必备:如何用Rubi规则系统展示积分步骤(附完整安装配置流程)
  • 求职辅导机构哪家强?金融/SDE/咨询领域实力对比(2026版) - 品牌排行榜
  • 校园招聘系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 为什么头部金融科技公司已在2026 Q1全面切换Python AOT?——基于百万行代码仓库的构建耗时、镜像体积、安全扫描通过率真实数据复盘
  • RVC模型计算机组成原理视角:理解AI推理的硬件底层
  • 如何解决E-Hentai Downloader下载旧图库时的资源限制问题
  • 威纶通EasyBuilder Pro安全功能详解:如何防止触摸屏误操作?
  • s2-pro镜像使用:FFmpeg后处理(降噪/均衡/响度标准化)集成方案
  • claude code minimax bat脚本 windows 系统 powershell
  • GPT-4o Copilot 技术解析:从原理到最佳实践
  • OpenClaw飞书办公助手:Qwen3-VL:30B自动化会议纪要生成
  • OpenClaw自动化测试:GLM-4.7-Flash在百次文件重命名任务中的稳定性报告
  • 为什么你的asyncio服务内存永不释放?深入CPython asyncio循环引用链,给出4行补丁级解决方案!
  • 实时手机检测-通用模型教程:如何用Gradio搭建检测界面
  • AgentScope实战:用Qwen大模型打造智能对话系统的避坑指南
  • 虚拟控制器驱动技术突破:释放跨设备控制潜力的实战指南
  • CUDA11.6+PyTorch1.12环境下的OpenMMLab组件安装实录:从mmcv1.6.0到mmdet3d的完整版本链
  • 武器仿真进阶:AFSim六自由度制导处理器的5个高阶用法
  • 别再写死UI了!Qt实战:用垂直布局器动态管理按钮(附完整源码)
  • Python 3.14 JIT编译器深度解析(仅限首批内测开发者获取的12项隐藏调优参数)
  • OpenClaw长期运行秘诀:GLM-4.7-Flash任务守护与自动恢复机制
  • 从零开始:使用Qwen3进行模型训练时的epochs设置避坑指南
  • 连小白都能看懂的 Transformer 架构
  • NaViL-9B图文问答教程:从单图理解到多图对比分析的进阶用法
  • 光伏MPPT仿真:布谷鸟算法的奇妙结合
  • BGE-Large-Zh在软件测试用例去重中的应用