微软开源屏幕解析器OmniParser在mac上部署使用

项目地址:
https://github.com/microsoft/OmniParser

OmniParser
 用于将用户界面截图解析为结构化且易于理解的元素,下面介绍一下怎么在mac上部署使用这个屏幕解析器

安装指南

首先克隆代码库,然后安装环境:

1
2
3
4
5
6
7
8
git clone https://github.com/microsoft/OmniParser.git
cd OmniParser
conda create -n "omni" python==3.12
conda activate omni
pip install -r requirements.txt
```

确保您已将 V2 权重下载到 weights 文件夹中(确保标题权重文件夹名为 icon_caption_florence)。如果尚未下载,请使用以下命令下载:

将模型检查点下载到本地目录 OmniParser/weights/

for f in icon_detect/{train_args.yaml,model.pt,model.yaml} icon_caption/{config.json,generation_config.json,model.safetensors}; do huggingface-cli download microsoft/OmniParser-v2.0 “$f” --local-dir weights; done
mv weights/icon_caption weights/icon_caption_florence

1
2
3
4
5
6
7
8
  
然后还要修改一下代码,目前(2025年3月2日)官方的代码中还未添加对 mac 的显卡加速,我们可以参考这个 PR 
https://github.com/microsoft/OmniParser/pull/195/files
 添加对 mac 的显卡加速支持。

要修改的地方不多,首先在 util/utils.py
 文件中添加 detect_device
 函数,用于检测当前支持的设备:

def detect_device() -> str:
    if torch.cuda.is_available():
        return “cuda”
    elif hasattr(torch.backends, “mps”) and torch.backends.mps.is_available():
        # Apple Silicon
        return “mps”
    else:
        return “cpu”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  
然后把各个指定 torch
 设备的地方改成用这个函数获取的值:

util/utils.py


![](/images/blog/1742927625573_image_1.png)

util/omniparser.py

![](/images/blog/1742927625574_image_2.png)

omnitool/omniparserserver/omniparserserver.py

![](/images/blog/1742927625574_image_3.png)

gradio_demo.py

![](/images/blog/1742927625575_image_4.png)

这样就能启用 mac 的 mps 加速了,不过默认的 ocr 只配置了英文,我们还要改一下 ocr 的配置,让它支持中文:

util/utils.py

![](/images/blog/1742927625575_image_5.png)

OmniParser 支持 easyocr 和 paddleocr 两种 ocr 引擎,其中 paddleocr 效果好速度慢,easyocr 效果差速度快,大家可以根据自己的需求选择用哪个。
## 使用指南

输入下面的命令就能启动一个 gradio 的服务了:

python gradio_demo.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  
默认会启动一个端口为 7861 的本地服务,同时还会生成一个 gradio.live 域名的分享链接方便分享我们的本地服务:

![](/images/blog/1742927625576_image_6.png)

如果不希望我们的服务被公开分享,可以改一下 gradio_demo.py
 的最后一行,把 share=True
 改为 share=False
 :

![](/images/blog/1742927625577_image_7.png)

接下来就可以在浏览器中试用这个屏幕解析器了,地址栏输入 localhost:7861

![](/images/blog/1742927625577_image_8.png)

找一张桌面截图测试一下,这里我用的是项目自带的示例截图 imgs/excel.png


点击 submit 按钮后就会开始识别,稍等几秒就会在右侧展示识别结果,如果没有开显卡加速,用的是 cpu 的话,可能要等几分钟。

![](/images/blog/1742927625578_image_9.png)

右侧的上半部分用带颜色的框把识别到的元素都框起来了,图片有些大,字比较小,点击结果图片的右上角的全屏图标可以全屏看。

![](/images/blog/1742927625579_image_10.png)

右侧的下半部分是识别结果的结构化数据展示:

icon 0: {‘type’: ‘text’, ‘bbox’: [0.021886399015784264, 0.007414272520691156, 0.13757164776325226, 0.037071362137794495], ‘interactivity’: False, ‘content’: ‘Autosave of’, ‘source’: ‘box_ocr_content_ocr’}
icon 1: {‘type’: ‘text’, ‘bbox’: [0.15528921782970428, 0.011121409013867378, 0.23970818519592285, 0.037071362137794495], ‘interactivity’: False, ‘content’: ‘Book1 - Excel  General*’, ‘source’: ‘box_ocr_content_ocr’}
icon 2: {‘type’: ‘text’, ‘bbox’: [0.4116727411746979, 0.009267840534448624, 0.4544033408164978, 0.037071362137794495], ‘interactivity’: False, ‘content’: ‘Search’, ‘source’: ‘box_ocr_content_ocr’}
icon 3: {‘type’: ‘text’, ‘bbox’: [0.009379885159432888, 0.05189990624785423, 0.027097446843981743, 0.07321593910455704], ‘interactivity’: False, ‘content’: ‘File’, ‘source’: ‘box_ocr_content_ocr’}

icon 163: {‘type’: ‘icon’, ‘bbox’: [0.0300283282995224, 0.936782717704773, 0.040179941803216934, 0.9547067284584045], ‘interactivity’: True, ‘content’: ‘familyfamily favorites’, ‘source’: ‘box_yolo_content_yolo’}

1
2
3
4
5
6
7
8
9
10
  
可以看到解析的结果中会标识出该元素是文本(text)还是图标(icon),如果是文本(text),其内容(content)是由 ocr 识别得到的文字,它的 source 为 box_ocr_content_ocr。如果是图标(icon),则其内容(content)是调用 Florence-2 模型对图片进行理解得到的描述信息。

这个 excel 的例子可能不太直观,下面看一个我自己截的图:

![](/images/blog/1742927625580_image_11.png)

识别结果如下:

![](/images/blog/1742927625580_image_12.png)

icon 0: {‘type’: ‘text’, ‘bbox’: [0.01997840218245983, 0.3636363744735718, 0.04805615544319153, 0.39361703395843506], ‘interactivity’: False, ‘content’: ‘标签’, ‘source’: ‘box_ocr_content_ocr’}
icon 1: {‘type’: ‘icon’, ‘bbox’: [0.20788998901844025, 0.8677061200141907, 0.26551395654678345, 0.9614923000335693], ‘interactivity’: True, ‘content’: '3月 ', ‘source’: ‘box_yolo_content_ocr’}
icon 2: {‘type’: ‘icon’, ‘bbox’: [0.7927775979042053, 0.8654376864433289, 0.8587601184844971, 0.9737656116485596], ‘interactivity’: True, ‘content’: 'GO ', ‘source’: ‘box_yolo_content_ocr’}
icon 3: {‘type’: ‘icon’, ‘bbox’: [0.5022746324539185, 0.02261572889983654, 0.5477184057235718, 0.08316580951213837], ‘interactivity’: True, ‘content’: '品 ', ‘source’: ‘box_yolo_content_ocr’}
icon 4: {‘type’: ‘icon’, ‘bbox’: [0.2517453134059906, 0.027787690982222557, 0.3391110897064209, 0.07567814737558365], ‘interactivity’: True, ‘content’: '20250302 ', ‘source’: ‘box_yolo_content_ocr’}
icon 5: {‘type’: ‘icon’, ‘bbox’: [0.006103575229644775, 0.22819797694683075, 0.15961410105228424, 0.3539338707923889], ‘interactivity’: True, ‘content’: '位置 网络 ', ‘source’: ‘box_yolo_content_ocr’}
icon 6: {‘type’: ‘icon’, ‘bbox’: [0.005262935068458319, 0.10433465242385864, 0.16009868681430817, 0.2232566922903061], ‘interactivity’: True, ‘content’: 'iCloud云盘 共享 ', ‘source’: ‘box_yolo_content_ocr’}
icon 7: {‘type’: ‘icon’, ‘bbox’: [0.005376589018851519, 0.6111671924591064, 0.15838690102100372, 0.6659546494483948], ‘interactivity’: True, ‘content’: '蓝色 ', ‘source’: ‘box_yolo_content_ocr’}
icon 8: {‘type’: ‘icon’, ‘bbox’: [0.0050424933433532715, 0.4483060836791992, 0.15597710013389587, 0.5038390755653381], ‘interactivity’: True, ‘content’: '●橙色 ', ‘source’: ‘box_yolo_content_ocr’}
icon 9: {‘type’: ‘icon’, ‘bbox’: [0.005731010343879461, 0.3922978937625885, 0.15617027878761292, 0.44943153858184814], ‘interactivity’: True, ‘content’: '红色 ', ‘source’: ‘box_yolo_content_ocr’}
icon 10: {‘type’: ‘icon’, ‘bbox’: [0.007505047135055065, 0.6704236268997192, 0.0762655958533287, 0.7138189673423767], ‘interactivity’: True, ‘content’: '紫色 ', ‘source’: ‘box_yolo_content_ocr’}
icon 11: {‘type’: ‘icon’, ‘bbox’: [0.46929118037223816, 0.8682787418365479, 0.5291961431503296, 0.9715887904167175], ‘interactivity’: True, ‘content’: ‘home’, ‘source’: ‘box_yolo_content_yolo’}
icon 12: {‘type’: ‘icon’, ‘bbox’: [0.40530118346214294, 0.8678929805755615, 0.46214550733566284, 0.9652636647224426], ‘interactivity’: True, ‘content’: ‘home’, ‘source’: ‘box_yolo_content_yolo’}
icon 13: {‘type’: ‘icon’, ‘bbox’: [0.5362226963043213, 0.868778645992279, 0.5917903780937195, 0.9630350470542908], ‘interactivity’: True, ‘content’: ‘home’, ‘source’: ‘box_yolo_content_yolo’}
icon 14: {‘type’: ‘icon’, ‘bbox’: [0.6027801632881165, 0.8696049451828003, 0.6575501561164856, 0.9610134363174438], ‘interactivity’: True, ‘content’: ‘sunset’, ‘source’: ‘box_yolo_content_yolo’}
icon 15: {‘type’: ‘icon’, ‘bbox’: [0.9288519024848938, 0.8671002984046936, 0.9858347177505493, 0.9637884497642517], ‘interactivity’: True, ‘content’: ‘battery level indicator’, ‘source’: ‘box_yolo_content_yolo’}
icon 16: {‘type’: ‘icon’, ‘bbox’: [0.27484574913978577, 0.8687966465950012, 0.3305942118167877, 0.9620789289474487], ‘interactivity’: True, ‘content’: ‘showing off the item in the window.’, ‘source’: ‘box_yolo_content_yolo’}
icon 17: {‘type’: ‘icon’, ‘bbox’: [0.14349272847175598, 0.8690221905708313, 0.20070427656173706, 0.9625077843666077], ‘interactivity’: True, ‘content’: ‘email or messaging.’, ‘source’: ‘box_yolo_content_yolo’}
icon 18: {‘type’: ‘icon’, ‘bbox’: [0.6685579419136047, 0.8687776923179626, 0.7231029272079468, 0.9618754982948303], ‘interactivity’: True, ‘content’: ‘navigationigation options.’, ‘source’: ‘box_yolo_content_yolo’}
icon 19: {‘type’: ‘icon’, ‘bbox’: [0.07952851802110672, 0.8689034581184387, 0.1332273781299591, 0.9622451663017273], ‘interactivity’: True, ‘content’: ‘home’, ‘source’: ‘box_yolo_content_yolo’}
icon 20: {‘type’: ‘icon’, ‘bbox’: [0.8618416786193848, 0.8693532347679138, 0.920973539352417, 0.9636450409889221], ‘interactivity’: True, ‘content’: ‘home’, ‘source’: ‘box_yolo_content_yolo’}
icon 21: {‘type’: ‘icon’, ‘bbox’: [0.7321737408638, 0.8683441281318665, 0.7891271710395813, 0.9641933441162109], ‘interactivity’: True, ‘content’: ‘navigationigation.’, ‘source’: ‘box_yolo_content_yolo’}
icon 22: {‘type’: ‘icon’, ‘bbox’: [0.3414851427078247, 0.8687042593955994, 0.39628347754478455, 0.9618474841117859], ‘interactivity’: True, ‘content’: ‘initiating a new tab or window.’, ‘source’: ‘box_yolo_content_yolo’}
icon 23: {‘type’: ‘icon’, ‘bbox’: [0.013150578364729881, 0.8687126040458679, 0.06863336265087128, 0.9621995091438293], ‘interactivity’: True, ‘content’: ‘smiley face’, ‘source’: ‘box_yolo_content_yolo’}
icon 24: {‘type’: ‘icon’, ‘bbox’: [0.7198073863983154, 0.025882458314299583, 0.7675328254699707, 0.08082456141710281], ‘interactivity’: True, ‘content’: ‘camera’, ‘source’: ‘box_yolo_content_yolo’}
icon 25: {‘type’: ‘icon’, ‘bbox’: [0.8622573614120483, 0.002420183038339019, 0.9149389266967773, 0.10558333992958069], ‘interactivity’: True, ‘content’: ‘initiating a new item or service.’, ‘source’: ‘box_yolo_content_yolo’}
icon 26: {‘type’: ‘icon’, ‘bbox’: [0.8148609399795532, 0.005053679924458265, 0.8576724529266357, 0.1056910827755928], ‘interactivity’: True, ‘content’: ‘unanswerable’, ‘source’: ‘box_yolo_content_yolo’}
icon 27: {‘type’: ‘icon’, ‘bbox’: [0.775120735168457, 0.004387253429740667, 0.8162285089492798, 0.10576196014881134], ‘interactivity’: True, ‘content’: ‘home’, ‘source’: ‘box_yolo_content_yolo’}
icon 28: {‘type’: ‘icon’, ‘bbox’: [0.6441083550453186, 0.02710000053048134, 0.6738594174385071, 0.08148308098316193], ‘interactivity’: True, ‘content’: ‘home’, ‘source’: ‘box_yolo_content_yolo’}
icon 29: {‘type’: ‘icon’, ‘bbox’: [0.9525752663612366, 0.022652262821793556, 0.9866378903388977, 0.08636169135570526], ‘interactivity’: True, ‘content’: ‘searching.’, ‘source’: ‘box_yolo_content_yolo’}
icon 30: {‘type’: ‘icon’, ‘bbox’: [0.2133217304944992, 0.025686172768473625, 0.2435588240623474, 0.07981002330780029], ‘interactivity’: True, ‘content’: ‘navigation or directional directional directional indicator.’, ‘source’: ‘box_yolo_content_yolo’}
icon 31: {‘type’: ‘icon’, ‘bbox’: [0.005290782544761896, 0.5579326748847961, 0.15869586169719696, 0.6126878261566162], ‘interactivity’: True, ‘content’: ‘battery level indicator’, ‘source’: ‘box_yolo_content_yolo’}
icon 32: {‘type’: ‘icon’, ‘bbox’: [0.00496288575232029, 0.5006905794143677, 0.15631449222564697, 0.5578159689903259], ‘interactivity’: True, ‘content’: ‘battery level indicator’, ‘source’: ‘box_yolo_content_yolo’}
icon 33: {‘type’: ‘icon’, ‘bbox’: [0.5979058146476746, 0.019504854455590248, 0.6323031187057495, 0.08179130405187607], ‘interactivity’: True, ‘content’: ‘home’, ‘source’: ‘box_yolo_content_yolo’}
icon 34: {‘type’: ‘icon’, ‘bbox’: [0.01921323500573635, 0.026370186358690262, 0.042180709540843964, 0.08518758416175842], ‘interactivity’: True, ‘content’: ‘initiating a new item or service.’, ‘source’: ‘box_yolo_content_yolo’}
icon 35: {‘type’: ‘icon’, ‘bbox’: [0.5505942106246948, 0.018107039853930473, 0.588097870349884, 0.08886047452688217], ‘interactivity’: True, ‘content’: ‘initiating a new item or feature.’, ‘source’: ‘box_yolo_content_yolo’}
icon 36: {‘type’: ‘icon’, ‘bbox’: [0.1739989072084427, 0.020208239555358887, 0.20710942149162292, 0.08660459518432617], ‘interactivity’: True, ‘content’: ‘navigation or directional directional directional indicator.’, ‘source’: ‘box_yolo_content_yolo’}
icon 37: {‘type’: ‘icon’, ‘bbox’: [0.020135987550020218, 0.780827522277832, 0.11945505440235138, 0.8193840980529785], ‘interactivity’: True, ‘content’: ‘battery charge’, ‘source’: ‘box_yolo_content_yolo’}
icon 38: {‘type’: ‘icon’, ‘bbox’: [0.9911125302314758, 0.8628772497177124, 1.0, 0.9629821181297302], ‘interactivity’: True, ‘content’: ‘unanswerable’, ‘source’: ‘box_yolo_content_yolo’}
icon 39: {‘type’: ‘icon’, ‘bbox’: [0.015314978547394276, 0.7272843718528748, 0.07744543254375458, 0.7632964849472046], ‘interactivity’: True, ‘content’: ‘battery level indicator’, ‘source’: ‘box_yolo_content_yolo’}

1
2
3
4
5
6
  
可以看到,OmniParser 对文本的识别非常准确,对图标的理解还有待提高,图中的这几个图标只有第17号图标识别对了:email or messaging. 其他的基本都识别错了,所以如果想利用这个屏幕解析器实现 ui 自动化之类的操作时,ocr识别的部分可以直接用,图标的识别还得我们自己单独实现一个图标匹配的算法来解决。比较简单的方案就是多模态embedding,进行以图搜图。

只通过网页使用 OmniParser 似乎没什么用处,其实 gradio 还有一个 api 接口可以使用。

gradio api 可以通过 python sdk 或者直接调http接口来使用,这里就以python sdk为例:

$ pip install gradio_client

1
2
  
python sdk 示例代码如下:

from gradio_client import Client, file , handle_fileclient = Client(“http://localhost:7861/”)result=client.predict(  image_input=handle_file(‘test.jpg’),  box_threshold=0.05,  iou_threshold=0.1,  use_paddleocr=False,  imgsz=1920,  api_name=“/process”)print(result[1])

1
2
3
4
5
6
7
8
9
10
  
返回的 result 是一个元组,它的第0个索引是图片的临时文件地址,第1个索引是具体的结果。

这次的测试图片换成了一张都是文字的:

![](/images/blog/1742927625581_image_13.png)

结果如下,可以看到文本基本上都识别正确:

![](/images/blog/1742927625583_image_14.png)

icon 0: {‘type’: ‘text’, ‘bbox’: [0.07405063509941101, 0.04010695219039917, 0.42341771721839905, 0.07932263612747192], ‘interactivity’: False, ‘content’: ‘microsoft / OmniParser V2. 0’, ‘source’: ‘box_ocr_content_ocr’}
icon 1: {‘type’: ‘text’, ‘bbox’: [0.6050633192062378, 0.048128340393304825, 0.6594936847686768, 0.07486630976200104], ‘interactivity’: False, ‘content’: ‘Follow’, ‘source’: ‘box_ocr_content_ocr’}
icon 2: {‘type’: ‘text’, ‘bbox’: [0.7696202397346497, 0.048128340393304825, 0.8139240741729736, 0.07486630976200104], ‘interactivity’: False, ‘content’: ‘9.56k’, ‘source’: ‘box_ocr_content_ocr’}
icon 3: {‘type’: ‘text’, ‘bbox’: [0.4696202576160431, 0.21746881306171417, 0.5753164291381836, 0.25757575035095215], ‘interactivity’: False, ‘content’: ‘Community’, ‘source’: ‘box_ocr_content_ocr’}
icon 4: {‘type’: ‘text’, ‘bbox’: [0.07721518725156784, 0.3600713014602661, 0.6151898503303528, 0.40285205841064453], ‘interactivity’: False, ‘content’: ‘[Gitlub Repo] [OmniparserVz BlogPost] Huggingfacedeme’, ‘source’: ‘box_ocr_content_ocr’}
icon 5: {‘type’: ‘text’, ‘bbox’: [0.05189873278141022, 0.44028520584106445, 0.23607595264911652, 0.48663100600242615], ‘interactivity’: False, ‘content’: ‘Model Summary’, ‘source’: ‘box_ocr_content_ocr’}
icon 6: {‘type’: ‘text’, ‘bbox’: [0.0525316447019577, 0.5409982204437256, 0.18164557218551636, 0.5748662948608398], ‘interactivity’: False, ‘content’: ‘OmniParseris’, ‘source’: ‘box_ocr_content_ocr’}
icon 7: {‘type’: ‘text’, ‘bbox’: [0.19240505993366241, 0.5383244156837463, 0.9202531576156616, 0.5811051726341248], ‘interactivity’: False, ‘content’: ‘generalscreen parsing tool, which interprets/converts UI screenshot to structured’, ‘source’: ‘box_ocr_content_ocr’}
icon 8: {‘type’: ‘text’, ‘bbox’: [0.05000000074505806, 0.5864527821540833, 0.9113923907279968, 0.6327985525131226], ‘interactivity’: False, ‘content’: ‘format, to improve existing LLM based UIagent. Training Datasets include: 1) an interactable icon’, ‘source’: ‘box_ocr_content_ocr’}
icon 9: {‘type’: ‘text’, ‘bbox’: [0.5943037867546082, 0.8404634594917297, 0.9196202754974365, 0.874331533908844], ‘interactivity’: False, ‘content’: ‘finetuned Florence-2 base modelon’, ‘source’: ‘box_ocr_content_ocr’}
icon 10: {‘type’: ‘text’, ‘bbox’: [0.050632912665605545, 0.8859180212020874, 0.9227848052978516, 0.9313725233078003], ‘interactivity’: False, ‘content’: ‘theabove dataset respectively. For more details ofthe models used and finetuning; please referto’, ‘source’: ‘box_ocr_content_ocr’}
icon 11: {‘type’: ‘text’, ‘bbox’: [0.05126582458615303, 0.945632815361023, 0.1487341821193695, 0.9830659627914429], ‘interactivity’: False, ‘content’: ‘the pper。’, ‘source’: ‘box_ocr_content_ocr’}
icon 12: {‘type’: ‘icon’, ‘bbox’: [0.4149259626865387, 0.10444413870573044, 0.5572751760482788, 0.15801335871219635], ‘interactivity’: True, ‘content’: 'Safetensors ', ‘source’: ‘box_yolo_content_ocr’}
icon 13: {‘type’: ‘icon’, ‘bbox’: [0.560843288898468, 0.10484852641820908, 0.7662109136581421, 0.1585690677165985], ‘interactivity’: True, ‘content’: 'Inference Endpoints ', ‘source’: ‘box_yolo_content_ocr’}
icon 14: {‘type’: ‘icon’, ‘bbox’: [0.25965237617492676, 0.1040591150522232, 0.41253647208213806, 0.15880228579044342], ‘interactivity’: True, ‘content’: 'Transformers ', ‘source’: ‘box_yolo_content_ocr’}
icon 15: {‘type’: ‘icon’, ‘bbox’: [0.767856776714325, 0.10499882698059082, 0.943630039691925, 0.15890827775001526], ‘interactivity’: True, ‘content’: 'arxiv:2408.00203 ', ‘source’: ‘box_yolo_content_ocr’}
icon 16: {‘type’: ‘icon’, ‘bbox’: [0.46313199400901794, 0.03670449182391167, 0.5889172554016113, 0.08332739770412445], ‘interactivity’: True, ‘content’: 'like 1.04k ', ‘source’: ‘box_yolo_content_ocr’}
icon 17: {‘type’: ‘icon’, ‘bbox’: [0.05292295664548874, 0.1920168399810791, 0.21359172463417053, 0.2835836708545685], ‘interactivity’: True, ‘content’: 'Modelcard ', ‘source’: ‘box_yolo_content_ocr’}
icon 18: {‘type’: ‘icon’, ‘bbox’: [0.04969880357384682, 0.10458173602819443, 0.25591716170310974, 0.158579483628273], ‘interactivity’: True, ‘content’: 'Image-Text-to-Text ', ‘source’: ‘box_yolo_content_ocr’}
icon 19: {‘type’: ‘icon’, ‘bbox’: [0.21191954612731934, 0.19190308451652527, 0.42046934366226196, 0.28238195180892944], ‘interactivity’: True, ‘content’: 'Files and versions ', ‘source’: ‘box_yolo_content_ocr’}
icon 20: {‘type’: ‘icon’, ‘bbox’: [0.6629528999328613, 0.040231116116046906, 0.7595259547233582, 0.07968851923942566], ‘interactivity’: True, ‘content’: 'Microsoft ', ‘source’: ‘box_yolo_content_ocr’}
icon 21: {‘type’: ‘icon’, ‘bbox’: [0.06306231021881104, 0.604444682598114, 0.8121976852416992, 0.8946311473846436], ‘interactivity’: True, ‘content’: 'detection dataset; Which was curated from popular web pages and automatically annotated to highlight clickable and actionable regions;, and 2) an icon description dataset, designed to associate each UI element with its corresponding function. This model hub includes finetuned version of YOLOv8and ', ‘source’: ‘box_yolo_content_ocr’}
icon 22: {‘type’: ‘icon’, ‘bbox’: [0.5770328044891357, 0.21554073691368103, 0.6088331937789917, 0.2586694061756134], ‘interactivity’: True, ‘content’: '16 ', ‘source’: ‘box_yolo_content_ocr’}
icon 23: {‘type’: ‘icon’, ‘bbox’: [0.946593165397644, 0.10467474162578583, 1.0, 0.15851865708827972], ‘interactivity’: True, ‘content’: ‘linking straw straw straws’, ‘source’: ‘box_yolo_content_yolo’}
icon 24: {‘type’: ‘icon’, ‘bbox’: [0.4232169985771179, 0.03858349472284317, 0.4499242901802063, 0.0815538689494133], ‘interactivity’: True, ‘content’: ‘initiating a new item or feature.’, ‘source’: ‘box_yolo_content_yolo’}
icon 25: {‘type’: ‘icon’, ‘bbox’: [0.0, 0.3487432897090912, 0.023755423724651337, 0.40055564045906067], ‘interactivity’: True, ‘content’: ‘menu’, ‘source’: ‘box_yolo_content_yolo’}
icon 26: {‘type’: ‘icon’, ‘bbox’: [0.052690599113702774, 0.03459464758634567, 0.18123222887516022, 0.08394771814346313], ‘interactivity’: True, ‘content’: ‘microscast’, ‘source’: ‘box_yolo_content_yolo’}
icon 27: {‘type’: ‘icon’, ‘bbox’: [0.051240336149930954, 0.358279824256897, 0.07885102182626724, 0.3977230489253998], ‘interactivity’: True, ‘content’: ‘muteute’, ‘source’: ‘box_yolo_content_yolo’}

  
  








![江达小记](/images/wechatmpscan.png)