
人工智能大模型AI AgentGUI 自动化强化学习【免费下载链接】UI-TARSPioneering Automated GUI Interaction with Native Agents项目地址https://gitcode.com/GitHub_Trending/ui/UI-TARS点击查看免费下载模型输出的 GUI 点击坐标是相对缩放后图像而言的绝对像素值直接使用会点错位置。本指南以 README_coordinates.md 为骨架讲解如何用smart_resize将模型坐标还原到原始分辨率并用 matplotlib 在截图上可视化验证帮助你在 UI-TARS 推理链路中打通模型输出 → 真实屏幕坐标的关键一环。背景为什么必须处理模型输出的坐标UI-TARS 系列是基于视觉语言模型的 GUI Agent模型输入的是经过缩放的截图其底层与 Qwen2.5-VL 系模型一致因此模型输出的start_box(x,y)等坐标是相对于缩放后图像的坐标而不是原始截图的坐标。原文档明确指出This tutorial assumes that we have already obtained the raw coordinate output from the model and will process it to determine the actual position in the image that the model intends to click.主仓库 README.md 也特别提示Qwen 2.5 VL 系模型使用绝对坐标来定位对象处理方式详见本文所述指南。也就是说模型推理产出的原始坐标并不能直接用于点击必须先经过坐标还原还原到原始分辨率这一后处理步骤。本文聚焦其中最关键的一个环节可视化验证坐标是否正确映射。通过把模型坐标点画回原图可以直观确认缩放公式与参数无误之后才能安全地把坐标交给执行层例如仓库codes/下的ui-tars包中parsing_response_to_pyautogui_code生成的 pyautogui 脚本去驱动鼠标。一、核心原理模型输出的坐标是缩放后坐标系的值整体流程分三步获取模型原始输出例如Action: click(start_box(197,525))对原图执行smart_resize得到模型实际看到的缩放尺寸(new_height, new_width)按比例还原坐标new_coordinate (int(model_output_width / new_width * width), int(model_output_height / new_height * height))再绘制红点进行可视化核对。其中第 2 步使用的smart_resize在仓库中有完整实现位于 codes/ui_tars/action_parser.py是坐标还原正确性的关键前提——只有用与推理阶段完全一致的缩放参数还原出来的坐标才是对的。二、完整代码示例解析模型输出并可视化坐标以下代码直接继承原文档并补充了关键参数说明。仓库中的 codes/tests/inference_test.py 也提供了几乎一致的实现供对照参考。# 假设的模型原始输出实际请用 re 正则从模型响应中解析出坐标值 model_raw_response Thought: xxx Action: click(start_box(197,525)) # 从模型输出中解析出的坐标值相对于缩放后图像 model_output_width 197 model_output_height 525 import math from PIL import Image import matplotlib.pyplot as plt # ---- 缩放相关常量与模型推理时的预处理保持一致---- IMAGE_FACTOR 28 # 尺寸必须是 28 的整数倍与 ViT patch size 对齐 MIN_PIXELS 100 * 28 * 28 # 最小像素数约 7.84 万 MAX_PIXELS 16384 * 28 * 28 # 最大像素数约 1284 万 MAX_RATIO 200 # 允许的最大长宽比超出则抛异常 def round_by_factor(number: int, factor: int) - int: 返回最接近 number 且能被 factor 整除的整数。 return round(number / factor) * factor def ceil_by_factor(number: int, factor: int) - int: 返回大于等于 number 且能被 factor 整除的最小整数。 return math.ceil(number / factor) * factor def floor_by_factor(number: int, factor: int) - int: 返回小于等于 number 且能被 factor 整除的最大整数。 return math.floor(number / factor) * factor def smart_resize( height: int, width: int, factor: int IMAGE_FACTOR, min_pixels: int MIN_PIXELS, max_pixels: int MAX_PIXELS ) - tuple[int, int]: 缩放图片使其满足 1. 宽、高都能被 factor 整除 2. 总像素数落在 [min_pixels, max_pixels] 区间内 3. 尽可能保持原始宽高比。 if max(height, width) / min(height, width) MAX_RATIO: raise ValueError( fabsolute aspect ratio must be smaller than {MAX_RATIO}, fgot {max(height, width) / min(height, width)} ) h_bar max(factor, round_by_factor(height, factor)) w_bar max(factor, round_by_factor(width, factor)) if h_bar * w_bar max_pixels: # 超上限按面积比开平方根等比缩小beta 1 beta math.sqrt((height * width) / max_pixels) h_bar floor_by_factor(height / beta, factor) w_bar floor_by_factor(width / beta, factor) elif h_bar * w_bar min_pixels: # 低于下限等比放大beta 1用 ceil 保证不越过上限方向 beta math.sqrt(min_pixels / (height * width)) h_bar ceil_by_factor(height * beta, factor) w_bar ceil_by_factor(width * beta, factor) return h_bar, w_bar # 打开原始截图 img Image.open(./data/coordinate_process_image.png) width, height img.size print(fOriginal resolution: {width}, {height}) # 用与模型推理相同的 smart_resize 计算缩放后的尺寸 new_height, new_width smart_resize(height, width) # 关键一步把模型坐标系下的坐标还原到原始分辨率 new_coordinate ( int(model_output_width / new_width * width), int(model_output_height / new_height * height), ) print(fResized resolution: {new_width}, {new_height}) print(new_coordinate) # 在原始图像上标注模型意图点击的位置 plt.imshow(img) plt.scatter([new_coordinate[0]], [new_coordinate[1]], cred, s50) plt.title(Visualize Coordinate) plt.axis(off) # 隐藏坐标轴 plt.savefig(./data/coordinate_process_image_som.png, dpi350)运行后控制台会依次打印原始分辨率、缩放分辨率与还原后的坐标并生成带红点标注的 SOM 图。三、参数细节factor、min_pixels、max_pixels 与 MAX_RATIO原文档给出了全部常量这里结合 codes/ui_tars/action_parser.py 的源码实现逐一说明其作用常量默认值含义与影响IMAGE_FACTOR28宽高必须是 28 的整数倍。28 是视觉编码器 patch 大小的对齐单位保证切分 patch 时不产生缝隙MIN_PIXELS100 * 28 * 28 78400缩放后像素总数下限。图片过小时会等比放大防止分辨率过低导致细节丢失MAX_PIXELS16384 * 28 * 28 ≈ 1284 万缩放后像素总数上限。图片过大时等比缩小控制显存与计算开销MAX_RATIO200长宽比阈值。max(h,w)/min(h,w)超过 200 直接抛ValueError避免极端长图smart_resize的策略非常清晰先尝试把宽高分别圆整到 28 的倍数若总像素超上限则按beta sqrt((height*width)/max_pixels)等比缩小若低于下限则按beta sqrt(min_pixels/(height*width))等比放大。由于缩放始终等比进行原始相对坐标可以直接复用——这也正是还原公式采用简单比例乘除即可的原因。需要特别提醒视频场景下另有VIDEO_MIN_PIXELS、VIDEO_MAX_PIXELS、FRAME_FACTOR、FPS等常量见原文档代码它们用于视频帧的预处理与单帧截图的坐标还原无关但同样遵循先缩放、后换算的原则。四、从可视化到执行坐标如何驱动真实点击可视化验证通过后坐标即可进入动作执行链路。仓库中的ui-tarsPython 包源码见 codes/ui_tars/action_parser.py安装方式见 codes/README.md提供了一站式解析能力from ui_tars.action_parser import parse_action_to_structure_output, parsing_response_to_pyautogui_code response Thought: Click the button\nAction: click(start_box(100,200)) original_image_width, original_image_height 1920, 1080 parsed_dict parse_action_to_structure_output( response, factor1000, origin_resized_heightoriginal_image_height, origin_resized_widthoriginal_image_width, model_typeqwen25vl # 或 doubao ) print(parsed_dict) parsed_pyautogui_code parsing_response_to_pyautogui_code( responsesparsed_dict, image_heightoriginal_image_height, image_widthoriginal_image_width ) print(parsed_pyautogui_code)从源码看parse_action_to_structure_outputcodes/ui_tars/action_parser.py在解析qwen25vl输出时会先调用smart_resize得到(smart_resize_height, smart_resize_width)再将模型输出的绝对像素坐标除以对应边得到相对坐标存入start_box/end_box而parsing_response_to_pyautogui_codecodes/ui_tars/action_parser.py随后把相对坐标乘回原始宽高生成pyautogui.click(x, y)等可执行代码。这与本文的还原公式int(model_output_width / new_width * width)在数学上完全一致——一个在解析期转为相对值一个在可视化时直接换算绝对值。对应地ui-tars包在 codes/tests/action_parser_test.py 中用click(pointpoint200 300/point)、hotkey等用例验证了解析与 pyautogui 代码生成的正确性可作为你接入时的参考回归测试。五、动手验证与常见排查原文档的示例图存放在 data/coordinate_process_image_som.png即运行上文代码后在原图上叠加红点的输出结果输入原图位于 data/coordinate_process_image.png。你可以直接在本地复现将示例脚本中的img Image.open(./data/coordinate_process_image.png)换成自己的截图路径即可。如果你的模型输出格式不是(x,y)绝对值形式可以参考 codes/ui_tars/action_parser.py 中的convert_point_to_coordinates它用正则rpoint(\d)\s(\d)/point匹配pointx y/point标签并转换为(x,y)。仓库 codes/ui_tars/prompt.py 中定义的COMPUTER_USE_DOUBAO、MOBILE_USE_DOUBAO、GROUNDING_DOUBAO三套提示词模板分别覆盖桌面、移动端与纯定位输出其坐标标签格式均可由该函数归一化。常见问题速查红点位置明显偏离目标控件优先核对smart_resize的参数是否与推理时一致尤其是factor与MAX_PIXELS任一不一致都会导致缩放尺寸不同、坐标还原偏差长截图报ValueError说明宽高比超过MAX_RATIO200需先裁剪或分块处理截图坐标在小尺寸图上看不清可适当调大s散点大小参数并提高savefig的dpi。六、小结本文完整继承了 README_coordinates.md 的教程骨架并补充了源码级依据smart_resize的等比缩放策略codes/ui_tars/action_parser.py保证坐标可按比例还原还原公式int(x / new_width * width)与解析包中的相对坐标换算逻辑相互印证。掌握可视化验证坐标这一环你就能在把 UI-TARS 的模型输出交给执行层之前低成本地确认坐标映射正确从而避免模型明明说对了、鼠标却点错位置的经典问题。赞分享人工智能大模型AI AgentGUI 自动化强化学习【免费下载链接】UI-TARSPioneering Automated GUI Interaction with Native Agents项目地址https://gitcode.com/GitHub_Trending/ui/UI-TARS点击查看免费下载相关推荐OfficeCLI一行命令的无头Office自动化AI代理的文档产出从小时级压到秒级OfficeCLI一行命令的无头Office自动化AI代理的文档产出从小时级压到秒级 某次周会前夜一位平台工程师盯着 CI 日志里的红叉构建通过但「生CLIAI 应用MCP 服务3分钟掌握卷积输出尺寸计算从理论到动态可视化完全指南3分钟掌握卷积输出尺寸计算从理论到动态可视化完全指南 卷积神经网络CNN是深度学习领域的核心技术但卷积层输出尺寸的计算常常让初学者感到困惑。本文将通过动文档教程人工智能深度学习NitroGen技术架构详解从flow_matching_transformer到inference_client的组件解析NitroGen技术架构详解从flow_matching_transformer到inference_client的组件解析 NitroGen作为一款面向通用上一篇终极指南如何利用gradient-checkpointing技术让巨型神经网络轻松运行下一篇10个Micro Journal高效写作技巧提升创作效率的终极秘籍创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考