2
opencv3.4.2 python3.5 Pandas
在本模块中,我们对机械臂拍摄的待测设备的照片进行分析,识别其中的控件,并返回给机械臂可以点击的坐标。 实验中的控件识别采用UIED。由于我们只需要识别图中的图标,因此我们仅使用了UIED中的一部分功能,在代码中的设置如下: 图1:UIED.run_single.py中的设置 首先我们对待测设备的屏幕截图进行分析,检测结果如下。观察图片后发现,代码能较好的识别图中的图标,但会将图片底下的文字与图标识别为两个控件,并且由于机械臂的精度限制,我们筛选其中较大的图标进行点击操作。 图2:UIED识别待测设备截图的结果 但在实际操作中,由于机械臂拍摄角度问题,我们得到的图片是变形的,不易在平板中进行定位。故我们写了透视函数,定位机械臂拍摄照片中待测设备的四个顶点(以像素定位),将其转化为类似于待测设备截图的新图片。 图3:透视函数
函数运行结果如下: 图4:机械臂拍摄图片 图5:做过透视之后的图片 之后使用UIED对图片进行分析,分析结果如下: 图6:UIED处理后的图片 根据UIED识别后的json文件,我们写了toArray函数,定位每个可识别的控件,并返回一个列表,其中每个点位对应机械臂的一个动作。若一个控件中包含多个机械臂可点击的点位,则计算每个点位与该控件中心坐标的距离,只返回离中心最近的点位。
机械臂处于开机状态,操控设备与机械臂在同一WIFI环境下,机械臂所有kernel均需关闭。
1)改变机械臂自由度对放置在水平面上的平板进行拍照,拍摄时保证平板的横向边与机械臂的底座横向边平行,将拍摄生成的图片交给目标识别模块。 ScreenCapture(picName): 参数:存放拍摄图片的路径 功能:抓拍设备当前画面,调整图片大小,并将图片存放在传入的路径中 返回值:无返回值 2)目标识别模块在对图片进行透视、识别和转化后,将点位序号的结果以列表形式呈现,调用move()函数,对机械臂的自由度进行调整,夹持着触控笔点向对应的点位。 move(numberList): 参数:识别到的点位序号 功能:随机抽取列表中的一个点位序号,并根据点位的参数进行机械臂调用。调用 前会进行机械臂的复位归中 返回值:无返回值 3)测试策略: 我们采取了Monkeys随机测试,即通过Monkey程序模拟用户触摸屏幕、滑动、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。在每次识别时,随机选取其中一个点击,测试程序是否异常。
1)将机械臂复位归中 2)进入随机测试阶段 调用screenCapture()函数,对画面进行抓拍,生成”picX.jpg”文件并存储在指定路径中(路径通过参数传递) 调用solvePic()函数,对A中生成的图片进行透视变换,生成新的图片”newpicX.jpg”文件,并存储在指定路径中(路径通过参数传递) 调用UIED.run_single.recognize()函数,对B中的图片进行控件识别,并生成”newpicX.json”文件,存储在指定路径中(路径通过参数传递) 调用toArray()函数,根据C中识别到的json文件,处理成设定好的点位序号list并返回 调用move()函数,传入D中的点位序号list,move()中随机抽取一个点位序好,并根据序号点击对应点位 进入下一轮随机测试
我们按照需求制作了前端界面,如图,点击图中run按钮后机械臂就可以开始上述测试。但由于机械臂突发状况,我们无法对该功能进行测试。 在测试时,我们使用xshell7(需要xmanager7)连接到机械臂的主机192.168.10.121,用户名为Dofbot,密码为yahboom,只有机械臂与操控机械臂的电脑处于同一wifi下才能建立连接。建立连接之后,进入/home/dofbot/Dofbot/GUITesting目录,并输入python GUITesting.py即可运行。 运行结果如图:(以第一轮为例,[2,3,5,4,6,9,12,13,14,10,11,17]为图像识别到控件图标的点位序列,point2为在此序列中随机选取的一个点)
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
基于机械臂视觉识别的非侵入式 GUI 界面自动化探索项目文档
小组成员信息
一、目标识别模块:
1.运行要求:
2.具体实现:
在本模块中,我们对机械臂拍摄的待测设备的照片进行分析,识别其中的控件,并返回给机械臂可以点击的坐标。
图1:UIED.run_single.py中的设置
图2:UIED识别待测设备截图的结果
图3:透视函数
实验中的控件识别采用UIED。由于我们只需要识别图中的图标,因此我们仅使用了UIED中的一部分功能,在代码中的设置如下:
首先我们对待测设备的屏幕截图进行分析,检测结果如下。观察图片后发现,代码能较好的识别图中的图标,但会将图片底下的文字与图标识别为两个控件,并且由于机械臂的精度限制,我们筛选其中较大的图标进行点击操作。
但在实际操作中,由于机械臂拍摄角度问题,我们得到的图片是变形的,不易在平板中进行定位。故我们写了透视函数,定位机械臂拍摄照片中待测设备的四个顶点(以像素定位),将其转化为类似于待测设备截图的新图片。
函数运行结果如下:
图4:机械臂拍摄图片
图5:做过透视之后的图片
图6:UIED处理后的图片
之后使用UIED对图片进行分析,分析结果如下:
根据UIED识别后的json文件,我们写了toArray函数,定位每个可识别的控件,并返回一个列表,其中每个点位对应机械臂的一个动作。若一个控件中包含多个机械臂可点击的点位,则计算每个点位与该控件中心坐标的距离,只返回离中心最近的点位。
二、操控机械臂模块:
1.运行要求:
机械臂处于开机状态,操控设备与机械臂在同一WIFI环境下,机械臂所有kernel均需关闭。
2.具体实现:
1)改变机械臂自由度对放置在水平面上的平板进行拍照,拍摄时保证平板的横向边与机械臂的底座横向边平行,将拍摄生成的图片交给目标识别模块。
ScreenCapture(picName):
参数:存放拍摄图片的路径
功能:抓拍设备当前画面,调整图片大小,并将图片存放在传入的路径中
返回值:无返回值
2)目标识别模块在对图片进行透视、识别和转化后,将点位序号的结果以列表形式呈现,调用move()函数,对机械臂的自由度进行调整,夹持着触控笔点向对应的点位。
move(numberList):
参数:识别到的点位序号
功能:随机抽取列表中的一个点位序号,并根据点位的参数进行机械臂调用。调用 前会进行机械臂的复位归中
返回值:无返回值
3)测试策略:
我们采取了Monkeys随机测试,即通过Monkey程序模拟用户触摸屏幕、滑动、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。在每次识别时,随机选取其中一个点击,测试程序是否异常。
3.总体流程
1)将机械臂复位归中
2)进入随机测试阶段
调用screenCapture()函数,对画面进行抓拍,生成”picX.jpg”文件并存储在指定路径中(路径通过参数传递)
调用solvePic()函数,对A中生成的图片进行透视变换,生成新的图片”newpicX.jpg”文件,并存储在指定路径中(路径通过参数传递)
调用UIED.run_single.recognize()函数,对B中的图片进行控件识别,并生成”newpicX.json”文件,存储在指定路径中(路径通过参数传递)
调用toArray()函数,根据C中识别到的json文件,处理成设定好的点位序号list并返回
调用move()函数,传入D中的点位序号list,move()中随机抽取一个点位序好,并根据序号点击对应点位
进入下一轮随机测试
三、运行方式:
我们按照需求制作了前端界面,如图,点击图中run按钮后机械臂就可以开始上述测试。但由于机械臂突发状况,我们无法对该功能进行测试。
在测试时,我们使用xshell7(需要xmanager7)连接到机械臂的主机192.168.10.121,用户名为Dofbot,密码为yahboom,只有机械臂与操控机械臂的电脑处于同一wifi下才能建立连接。建立连接之后,进入/home/dofbot/Dofbot/GUITesting目录,并输入python GUITesting.py即可运行。

运行结果如图:(以第一轮为例,[2,3,5,4,6,9,12,13,14,10,11,17]为图像识别到控件图标的点位序列,point2为在此序列中随机选取的一个点)