OmniParser技术分析(一)

1.引言

通过上篇文章介绍 OmniParser:下一代纯视觉UI自动化测试先驱相信大家已经对OmniParser有初步了解,接下来详细介绍下OmniParser使用了哪些技术模型实现了对UI纯视觉的检测和理解。

2.整体方案

通过阅读OmniParser提供的运行Demo代码知道,其实整个UI纯视觉检测主要分为2部分,涉及3个环节分别是:图片OCR、图片icon检测、图片元素理解,分别使用的模型为:

环节模型作用
图片OCRpaddle_ocr识别图片文字区域和坐标
图片icon检测yolov8n获取图片目标区域和坐标
图片元素理解Florence-2-base-ft对检测到的元素理解

以下是从官网提供的demo程序中的截取:

    def parse(self, image_base64: str):image_bytes = base64.b64decode(image_base64)image = Image.open(io.BytesIO(image_bytes))print('image size:', image.size)box_overlay_ratio = max(image.size) / 3200draw_bbox_config = {'text_scale': 0.8 * box_overlay_ratio,'text_thickness': max(int(2 * box_overlay_ratio), 1),'text_padding': max(int(3 * box_overlay_ratio), 1),'thickness': max(int(3 * box_overlay_ratio), 1),}(text, ocr_bbox), _ = check_ocr_box(image, display_img=False, output_bb_format='xyxy', easyocr_args={'text_threshold': 0.8}, use_paddleocr=False)dino_labled_img, label_coordinates, parsed_content_list = get_som_labeled_img(image, self.som_model, BOX_TRESHOLD = self.config['BOX_TRESHOLD'], output_coord_in_ratio=True, ocr_bbox=ocr_bbox,draw_bbox_config=draw_bbox_config, caption_model_processor=self.caption_model_processor, ocr_text=text,use_local_semantics=True, iou_threshold=0.7, scale_img=False, batch_size=128)return dino_labled_img, parsed_content_list, label_coordinates

3.模型的介绍

3.1 Paddle_ocr

官方针对图片字符识别推荐使用的是paddle_ocr,猜测原因应该是效果不错 + 开源,接下来介绍下paddle_ocr基本使用。

3.1.1安装

pip install paddleocr

由于PaddleOCR支持多种语言,需要设置一些配置参数,以下为Demo设置的参数,识别的语言设置的英文,这里如果识别中文修改为lang=‘ch’

paddle_ocr = PaddleOCR(lang='en',  # other lang also availableuse_angle_cls=False,use_gpu=False,  # using cuda will conflict with pytorch in the same processshow_log=False,max_batch_size=1024,use_dilation=True,  # improves accuracydet_db_score_mode='slow',  # improves accuracyrec_batch_num=1024)
result = paddle_ocr.ocr(image_np, cls=False)[0]

识别结果格式示例如下,分为有文本框,文字和识别置信度

[[[28.0, 37.0], [302.0, 39.0], [302.0, 72.0], [27.0, 70.0]], ('纯臻营养护发素', 0.9658738374710083)]
......

3.2 YOLOv8n

3.2.1. 图标检测模型简介

图标检测模型是OmniParser-v2的基础组件之一,主要负责从屏幕截图中识别并定位可交互的UI元素,如按钮、输入框等。该模型经过大规模数据集训练,能够检测最小至8×8像素的元素,确保在各种分辨率和界面复杂度下都能准确识别。使用的检测模型为YOLOv8,以下为官网的介绍:

YOLOv8 was released by Ultralytics on January 10th, 2023, offering cutting-edge performance in terms of accuracy and speed. Building upon the advancements of previous YOLO versions, YOLOv8 introduced new features and optimizations that make it an ideal choice for various object detection tasks in a wide range of applications.
翻译:YOLOv8 由 Ultralytics 于 2023 年 1 月 10 日发布,在准确率和速度方面提供一流的性能。在之前 YOLO 版本的改进基础上,YOLOv8 引入了新功能和优化,使其成为广泛应用中各种对象检测任务的理想选择。

下面图片是官网提供COCO数据上检测结果对比,v8一共有5种变形模型,从官方的测试结果看yolov8n其实是效果最差的,不知OmniParser为啥选这个检测模型。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e501af0477de4010839ab8344f4e23cc.png在这里插入图片描述

3.2.2 YOLOv8模型使用

from ultralytics import YOLO# Load a COCO-pretrained YOLOv8n model
model = YOLO("yolov8n.pt")# Display model information (optional)
model.info()# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)# Run inference with the YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")

这里推荐个YOLO网络结构可视化的工具:netron具体用法可以搜下,后续再抽时间解读网络结构。

3.2.3 YOLOv8 主要特点

  • 先进的主干和颈部架构

YOLOv8 employs state-of-the-art backbone and neck architectures, resulting in improved feature extraction and object detection performance.

  • 无锚分割 Ultralytics 头

YOLOv8 adopts an anchor-free split Ultralytics head, which contributes to better accuracy and a more efficient detection process compared to anchor-based approaches.

  • 优化的准确度-速度权衡

With a focus on maintaining an optimal balance between accuracy and speed, YOLOv8 is suitable for real-time object detection tasks in diverse application areas.

  • 优化的准确度-速度权衡

YOLOv8 offers a range of pre-trained models to cater to various tasks and performance requirements, making it easier to find the right model for your specific use case.

3. Florence-2

Florence-2 是微软与2024年6月发布的多模态大模型,专为视觉理解任务设计,旨在处理多种视觉和视觉-语言任务。它在计算机视觉领域展现了强大的泛化能力,能够处理多种视觉任务,如图像理解、对象检测、图像字幕生成等。

Florence-2 主要特点:

  • 通用视觉理解:采用模块化设计,方便集成不同的LLM,满足多样化需求。
  • 多模态学习:结合自然语言处理能力,实现视觉-语言任务,如图像字幕生成和视觉问答。
  • 大规模数据训练:使用大规模、高质量的数据集进行训练,提升模型的泛化能力和鲁棒性。
  • 高效推理:优化了计算效率,使其能够在云端和本地设备上快速推理。
  • 跨任务一致性:在不同的视觉任务上表现稳定,适用于多种应用场景,如自动驾驶、医疗影像分析和智能监控。

在官网Demo中可以看出使用的是Florence-2-base,Model size是0.23B,整体比较小,下面是运行模型的demo程序。

import requestsfrom PIL import Image
from transformers import AutoProcessor, AutoModelForCausalLM device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32model = AutoModelForCausalLM.from_pretrained("microsoft/Florence-2-base-ft", torch_dtype=torch_dtype, trust_remote_code=True).to(device)
processor = AutoProcessor.from_pretrained("microsoft/Florence-2-base-ft", trust_remote_code=True)prompt = "<OD>"url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg?download=true"
image = Image.open(requests.get(url, stream=True).raw)inputs = processor(text=prompt, images=image, return_tensors="pt").to(device, torch_dtype)generated_ids = model.generate(input_ids=inputs["input_ids"],pixel_values=inputs["pixel_values"],max_new_tokens=1024,do_sample=False,num_beams=3
)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]parsed_answer = processor.post_process_generation(generated_text, task="<OD>", image_size=(image.width, image.height))print(parsed_answer)

4.结语

OmniParser-v2通过集成上述多种先进模型,实现了从屏幕截图到结构化数据的高效转换,为大型语言模型赋予了实际的计算机操作能力。但仔细分析使用的模型分支都为参数量最小的,实际测试下来效果的话也会大打折扣,猜测应该是因为开源替换了原先效果更优的模型。后续继续挖掘下每个模型具体的实现以及如何进行模型的微调,帮助大家能在具体的业务场景实现定制化。

参考资料:

  • paddleocr官方文档
  • ultralytics
  • Florence-2-base-HF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计心得——继承和实例

一、继承的应用场景 在上篇文章分析了继承的应用&#xff0c;本文反过来讲继承和实例。可以理解对上文的继承进行一下基础知识的铺垫&#xff0c;继承的应用场景非常多&#xff0c;典型的应用场景包括&#xff1a; 1、单纯属性的继承 这种继承非常常见&#xff0c;在前面也举过…

从连接到交互:SDN 架构下 OpenFlow 协议的流程与报文剖析

在SDN架构中&#xff0c;交换机与控制器之间的通信基于 OpenFlow协议&#xff0c;其设计目的是实现控制平面与数据平面的解耦。以下是 交换机连接控制器 和 数据包进入交换机触发交互 的详细流程及协议报文分析&#xff1a; 一、交换机连接控制器的流程&#xff08;初始化阶段&…

opentitan riscv

OpenTitan‌是一个开源的硅根信任&#xff08;Root of Trust, RoT&#xff09;项目&#xff0c;旨在使硅RoT的设计和实现更加透明、可信和安全&#xff0c;适用于企业、平台提供商和芯片制造商。该项目由lowRISC CIC管理&#xff0c;作为一个协作项目&#xff0c;旨在生产高质量…

R语言使用scitable包交互效应深度挖掘一个陌生数据库

很多新手刚才是总是觉得自己没什么可以写的&#xff0c;自己不知道选什么题材进行分析&#xff0c;使用scitable包后这个完全不用担心&#xff0c;选题多到你只会担心你写不完&#xff0c;写得不够快。 今天演示一下使用scitable包深度挖掘一个陌生数据库 先导入R包和数据 li…

电脑内存智能监控清理,优化性能的实用软件

软件介绍 Memory cleaner是一款内存清理软件。功能很强&#xff0c;效果很不错。 Memory cleaner会在内存用量超出80%时&#xff0c;自动执行“裁剪进程工作集”“清理系统缓存”以及“用全部可能的方法清理内存”等操作&#xff0c;以此来优化电脑性能。 同时&#xff0c;我…

C#控制台应用程序学习——3.8

一、语言概述 1、平台相关性 C# 主要运行在.NET 平台上。.NET 提供了一个庞大的类库&#xff0c;C# 程序可以方便地调用这些类库来实现各种功能&#xff0c;如文件操作、数据库访问、网络通信等。 2、语法风格 C# 的语法与 C、C 和 Java 有一定的相似性。例如&#xff0c;它使用…

鸿蒙HarmonyOS-Navagation基本用法

Navagation基本用法 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏&#xff0c;内容栏和公工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&am…

初阶数据结构(C语言实现)——4.1栈

目录 1.栈1.1栈的概念及结构1.2 栈的实现1.1.0 栈的初始化1.1.1 销毁1.1.2 入栈1.1.3 出栈1.1.4 获取栈中有效元素个数1.1.5 检测栈是否为空&#xff0c;如果为空返回非零结果&#xff0c;如果不为空返回01.1.6 获取栈顶元素1.1.7 验证 附录 栈的C语言实现源码.h文件.c文件test…

计算光学成像与光学计算概论

计算光学成像所涉及研究的内容非常广泛&#xff0c;虽然计算光学成像的研究内容是发散的&#xff0c;但目的都是一致的&#xff1a;如何让相机记录到客观实物更丰富的信息&#xff0c;延伸并扩展人眼的视觉感知。总的来说&#xff0c;计算光学成像现阶段已经取得了很多令人振奋…

什么样的物联网框架适合开展共享自助KTV唱歌项目?

现在物联网的广泛应用&#xff0c;也让更多用户们看到了它的实力&#xff0c;也使得共享经济遍地开花。其中共享自助唱歌设备也备受欢迎&#xff0c;那么适合开展共享自助KTV唱歌项目的物联网框架都应具备哪些特点呢&#xff1f; 智能化与自动化管理 物联网技术在共享KTV中的应…

机器视觉选型中,不同焦距的镜头成像视野有什么不同?

不同焦距的镜头成像视野的差异主要体现在视角范围和透视效果上。焦距越长&#xff0c;视角越窄&#xff0c;能捕捉的景物范围越小&#xff1b;焦距越短&#xff0c;视角越广&#xff0c;覆盖的景物范围越大。以下是具体分析&#xff1a; 焦距与视角的关系 焦距&#xff08;Foc…

Linux16-数据库、HTML

数据库&#xff1a; 数据存储&#xff1a; 变量、数组、链表-------------》内存 &#xff1a;程序运行结束、掉电数据丢失 文件 &#xff1a; 外存&#xff1a;程序运行结束、掉电数据不丢失 数据库&#xff1a; …

开源订货系统哪个好 三大订货系统源码推荐

在数字化转型加速的今天&#xff0c;企业对订货系统的需求日益增长。一款优质的订货系统源码不仅能提升供应链效率&#xff0c;还能通过二次开发满足个性化业务需求。这里结合 “标准化、易扩展” 两大核心要求&#xff0c;为您精选三款主流订货系统源码&#xff0c;助您快速搭…

行为模式---迭代器模式

概念 迭代器模式是设计模式的行为模式&#xff0c;它的主要设计思想是提供一个可以操作聚合对象&#xff08;容器或者复杂数据类型&#xff09;表示&#xff08;迭代器类&#xff09;。通过迭代器类去访问操作聚合对象可以隐藏内部表示&#xff0c;也可以使客户端可以统一处理…

Maven的学习以及安装配置 2024/3/1 idea

1. Maven的安装 1.1 首先查看编程工具合适的Maven版本 我使用的是2024/3/1 版本的idea&#xff0c;接下来我会用这个版本的idea进行演示。idea没有汉化的也可以参考我的步骤。 1、打开idea的设置&#xff0c;搜索Maven&#xff0c;进入Maven设置。 我们可以看到&#xff0c;…

基于 Docker 的跨平台镜像构建与增量更新实战指南

引言&#xff1a;破解容器化两大核心问题 在实际开发中&#xff0c;我们常常面临两个棘手问题&#xff1a; 跨平台兼容性&#xff1a;如何在Windows平台开发的镜像&#xff0c;无缝运行在 ARM64 服务器&#xff1f;更新效率低下&#xff1a;每次代码调整都要重新安装全部依赖…

支付通道开通对接一般需要多少钱

不少老板都想开通AIP线上接口&#xff0c;但是不知道这个成本到底是多少? 其实目前第三方支付公司对外提供了标准的线上接入技术方案&#xff0c;一般以API、SDK等形式。因此&#xff0c;商户在完成签约审核后&#xff0c;可以顺利拿到技术的密钥&#xff0c;正常调用第三方支…

什么是 spring 的循环依赖?

什么是 spring 的循环依赖&#xff1f; 首先&#xff0c;认识一下什么是循环依赖&#xff0c;举个例子&#xff1a;A 对象被 Spring 管理&#xff0c;并且引入的 B 对象&#xff0c;同样的 B 对象也被 Spring 管理&#xff0c;并且也引入的 A 对象。这种相互被引用的情况&#…

thrift软件、.thrif文件和thrift协议是什么关系,有什么用

Thrift软件、.thrift文件和Thrift协议是Apache Thrift框架的三个核心组成部分&#xff0c;它们协同实现跨语言服务的高效开发与通信。以下是三者关系及作用的详细解析&#xff1a; 一、核心组件关系 1. Thrift软件&#xff08;框架&#xff09; • 定位&#xff1a;Apache Th…

STM32旋转编码器驱动详解:方向判断、卡死处理与代码分析 | 零基础入门STM32第四十八步

主题内容教学目的/扩展视频旋转编码器电路原理&#xff0c;跳线设置&#xff0c;结构分析。驱动程序与调用。熟悉电路和驱动程序。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、旋转编码器原理与驱动结构1.1 旋转编码器工作原理1.2 驱动程序结构 二、方向判断…