0


Mobile-Agent项目部署与学习总结(DataWhale AI夏令营)

在这里插入图片描述

前言

你好,我是

GISer Liu

,一名热爱AI技术的GIS开发者,本文是DataWhale 2024 AI夏令营的最后一期——

Mobile-Agent

赛道,这是作者的学习文档,这里总结一下,和作者一起学习这个多模态大模型新项目吧😀;


一、准备工作

为了快速实现本次项目准备工作,作者将对应步骤的的流程用图片展示,各位读者只需要按顺序执行即可;

1. API申请

打开阿里云百炼官网,API申请步骤如下:
在这里插入图片描述
复制创建的API KEY;
在这里插入图片描述

这里注意保存获得的API KEY,不要泄露给别人;

我们可以在这里测试一下API接口是否正常:

# Refer to the document for workspace information: https://help.aliyun.com/document_detail/2746874.html    from dashscope import MultiModalConversation
import dashscope
dashscope.api_key ="<your api key>"defsimple_multimodal_conversation_call():"""Simple single round multimodal conversation call.
    """
    messages =[{"role":"user","content":[{"image":"https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},{"text":"这是什么?"}]}]
    responses = MultiModalConversation.call(model='qwen-vl-plus',
                                           messages=messages,
                                           stream=True)for response in responses:print(response)if __name__ =='__main__':
    simple_multimodal_conversation_call()

作者输出如下:
在这里插入图片描述
没有问题!


2. Android Studio配置

这里需要下载Android Studio应用

这里无需Android 开发,只是需要借用Android Studio提供的Android虚拟机进行代码调试,以及其提供的Android adb的接口来实现屏幕截图和Agent操作执行的功能;

,安装好以后,详细配置过程如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这一步是为了让AI 可以在桌面看到这个日历应用的图标;

3. MobileAgent项目部署与配置
  • clone项目到本地:
git lfs installgit clone https://www.modelscope.cn/datasets/Datawhale/MobileAgent_V2_Demo_qwenVL.git
cd MobileAgent_V2_Demo_qwenVL

在这里插入图片描述

  • 创建环境:
conda create -n moblieagent python=3.9.19
conda activate moblieagent
  • 复制如下命令在终端执行,安装相关依赖

Mac电脑运行这个:

pip install-r mac_requirements.txt

Win电脑运行这个:

pip install-r win_requirements.txt
  • 运行项目
python run.py
  • 效果如下result

二、思路分析

1. 项目基础

本项目是一个基于手机操作的自动化助手系统,旨在通过多模态大模型技术来读取手机屏幕内容,识别屏幕元素,并根据用户的指令自动操作手机。整个项目的核心是结合了文本识别、图像识别和LLM技术,使用了多种深度学习模型来实现手机自动化操作的流程。

2. 平台与技术栈
  • 平台:- 项目运行在Android设备上,通过ADB(Android Debug Bridge)接口与手机进行交互。- 使用了Python编写逻辑代码,并集成了多种AI模型用于图像处理和文本分析。
  • 技术栈:- 图像处理与识别:- OCR(光学字符识别): 用于从截图中提取文本内容。使用了 damo/cv_resnet18_ocr-detection-line-level_damodamo/cv_convnextTiny_ocr-recognition-document_damo 两个模型。- 图标检测: 使用 GroundingDINO 模型来检测屏幕上的图标。- 自然语言处理:- Qwen-VL 系列模型: 用于自然语言理解和生成,模型的选择可以是本地模型(如 qwen-vl-chat)或通过API访问(如 qwen-vl-plus)。- Prompt Engineering: 使用prompt来指导模型生成适合的响应,包括操作指令生成、反思生成、记忆生成和操作流程规划。- 设备控制:- 使用 get_screenshottapslide 等函数通过ADB接口操作Android设备,如截图、点击、滑动、输入文本等。
  • 集成的模型框架:- 使用了 ModelScope 平台的pipeline来下载和调用AI模型。- 集成了 dashscope 用于多模态对话。
3. 主要流程分析
  1. 初始化- 配置设定: 设置ADB路径,指令内容,模型类型,API密钥等基本配置。- 模型加载: 根据配置加载OCR模型、图标检测模型、以及Qwen-VL模型(可以是本地或API调用)。
  2. 获取屏幕信息- 截图: 使用ADB获取当前手机屏幕截图并保存。- OCR识别: 通过OCR模型检测截图中的文本块及其坐标位置。- 图标检测: 通过GroundingDINO模型检测截图中的图标位置,并将图标裁剪出来进行进一步识别。- 结果合并: 将文本块和图标识别结果整理成统一格式的 perception_infos 列表,每个元素包含检测到的内容(文本或图标描述)及其屏幕坐标。
  3. 处理用户指令- 生成操作指令: 通过调用Qwen-VL模型,根据 perception_infos 生成操作指令(如点击、滑动、输入等)。- 执行操作: 根据生成的操作指令通过ADB接口对手机进行相应的操作。
  4. 反思与记忆- 反思: 项目支持通过对比前后两次截图的差异,生成反思Prompt,分析当前操作是否正确或需要修正。- 记忆: 项目可以将重要的信息保存到记忆中,以便后续操作中更好地理解和处理。
  5. 迭代循环- 重复操作: 以上过程在一个循环中不断重复,直到完成所有指令或满足停止条件。

三、 代码分析

  • 项目的主要目的是通过调用多模态大模型和图像处理技术,实现对移动设备的屏幕内容的读取、分析和操作
  • 项目通过 Android 设备桥(ADB)与设备通信,获取屏幕截图,然后利用各种模型进行图像识别、文字识别、操作决策,最终执行用户指令

项目由多个模块组成,每个模块都承担特定的功能。以下是模块划分和相应的代码分析:

1. 环境设置与初始化
  • 功能:设置ADB路径、用户指令、选择模型和API的调用方式等配置。
  • 代码
# Your ADB path
     adb_path ="C:/Users/<username>/AppData/Local/Android/Sdk/platform-tools/adb.exe"# Your instruction
     instruction ="Read the Screen, tell me what day it is today. Then open Play Store."# Choose between "api" and "local". api: use the qwen api. local: use the local qwen checkpoint
     caption_call_method ="api"# Choose between "qwen-vl-plus" and "qwen-vl-max" if use api method. Choose between "qwen-vl-chat" and "qwen-vl-chat-int4" if use local method.
     caption_model ="qwen-vl-plus"# If you choose the api caption call method, input your Qwen api here
     qwen_api ="<your api key>"# Other settings...
  • 思路:在开始前,项目通过设置 ADB 路径、用户指令、API调用方式以及模型选择来初始化项目运行的基础环境。
2. 聊天历史初始化
  • 功能:初始化不同对话历史(如操作历史、反思历史、记忆历史)用于后续交互。
  • 代码definit_action_chat(): operation_history =[] sysetm_prompt ="You are a helpful AI mobile phone operating assistant. You need to help me operate the phone to complete the user's instruction." operation_history.append({'role':'system','content':[{'text': sysetm_prompt}]})return operation_history
  • 思路:不同的聊天初始化函数用于分别构建操作对话历史、反思对话历史、记忆对话历史等,这样在不同阶段可以复用这些历史对话记录来生成决策。
3. 图像处理与信息提取
  • 功能:截取手机屏幕、进行OCR识别、图标检测、坐标处理等。
  • 代码defget_perception_infos(adb_path, screenshot_file): get_screenshot(adb_path) width, height = Image.open(screenshot_file).size text, coordinates = ocr(screenshot_file, ocr_detection, ocr_recognition) text, coordinates = merge_text_blocks(text, coordinates) center_list =[[(coordinate[0]+coordinate[2])/2,(coordinate[1]+coordinate[3])/2]for coordinate in coordinates] draw_coordinates_on_image(screenshot_file, center_list) perception_infos =[]for i inrange(len(coordinates)): perception_info ={"text":"text: "+ text[i],"coordinates": coordinates[i]} perception_infos.append(perception_info)# Detect icons...# Add icon descriptions to perception_infos...return perception_infos, width, height
  • 思路:该模块负责从手机截图中提取有用的信息,包括文本和图标,并将这些信息转化为后续操作的输入。
4. 深度学习模型加载与推理
  • 功能:加载和初始化所需的深度学习模型,处理用户的指令。
  • 代码device ="cpu"torch.manual_seed(1234)if caption_call_method =="local":# Load local models...elif caption_call_method =="api":# Use API for models...
  • 思路:根据用户选择,项目会加载本地或API提供的模型来进行图像描述、文本识别、图标检测等任务。通过选择不同模型和API,可以适应不同的应用场景和硬件环境。
5. 操作与执行
  • 功能:根据模型输出的操作指令,执行相应的手机操作(点击、滑动、返回等)。
  • 代码if"Open app"in action:# Open a specific app...elif"Tap"in action:# Tap on a specific coordinate...elif"Swipe"in action:# Swipe from one coordinate to another...elif"Type"in action:# Type text...elif"Back"in action: back(adb_path)elif"Home"in action: home(adb_path)elif"Stop"in action:break
  • 思路:这一部分是项目的核心逻辑,它根据分析得到的操作指令执行相应的手机操作,来完成用户的任务指令。
6. 反思与记忆模块
  • 功能:通过反思上一次的操作结果来调整下一步操作的策略,并将有价值的信息存储在记忆中。
  • 代码if reflection_switch: prompt_reflect = get_reflect_prompt(...) chat_reflect = init_reflect_chat() chat_reflect = add_response_two_image("user", prompt_reflect, chat_reflect,[last_screenshot_file, screenshot_file]) output_reflect = call_with_local_file(chat_action, api_key=qwen_api, model='qwen-vl-plus') reflect = output_reflect.split("### Answer ###")[-1].replace("\n"," ").strip() chat_reflect = add_response("system", output_reflect, chat_reflect)if'A'in reflect: thought_history.append(thought) summary_history.append(summary) action_history.append(action)# Other conditions...
  • 思路:通过反思模块,系统会基于之前的操作结果来判断是否需要调整策略,并将重要的信息存储到内存模块中,以便在后续操作中参考。
7. 主循环与终止条件
  • 功能:主循环执行多轮操作,并根据一定条件终止循环。
  • 代码whileTrue:iter+=1# First iteration...# Action decision...# Memory update...# Reflection...if"Stop"in action:break time.sleep(5)
  • 思路:项目在一个循环中进行,直到任务完成或达到终止条件。每次循环都会根据新的屏幕截图和用户指令更新操作,并在适当的时候进行反思和策略调整。
8. 总结功能
  • 功能:对项目进行总结,提取核心内容,确保项目达成目标。
  • 代码completed_requirements = output_planning.split("### Completed contents ###")[-1].replace("\n"," ").strip()
  • 思路:这一部分通过对完成任务的总结,验证项目的执行效果,确保达到用户的预期目标。

项目详细代码参考下面的链接;

参考链接

  • 阿里百炼
  • 代码文件
  • 体验链接

thank_watch

如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.


本文转载自: https://blog.csdn.net/qq_45590504/article/details/141427681
版权归原作者 GISer Liu 所有, 如有侵权,请联系我们删除。

“Mobile-Agent项目部署与学习总结(DataWhale AI夏令营)”的评论:

还没有评论