STEP01 视频数据采集
对于数据采集有2种主要的方法,一种是通过api网络请求的拦截,破解api的请求参数及规则;另一种则是模拟用户的操作行为,读取界面上返回的数据来提取。
本教程以模拟用户的方式为主,api拦截的方式等后续再另行补充。
模拟用户行为主要采用的是安卓的adb。
adb 其实就是 Android Debug Bridge
, Android 调试桥的缩写,adb 是一个 C/S 架构的命令行工具。通过adb,完成用户的模拟操作,实现自动化。
安卓开发官方下载
https://developer.android.com/studio/releases/platform-tools.html
安装的时候,如遇到问题,善用搜索引擎解决。
本指南,使用安卓模拟器,这样不管我们手上有没有安卓手机都不要紧。
熟悉模拟器的设置,包括安装apk包、更改机型、分辨率等。
- python 调用adb
我们接下来使用python来调用adb,我们需要先封装下基础的功能。
如果python不熟悉,则需要了解python的基础知识,python使用的是3.0版本以上。
如果python没有安装,则需要安装,建议使用anaconda来安装python。
https://www.anaconda.com/distribution/
同样的,如果python不会按照,请善用搜索引擎解决问题。
- 本workshop的hello world
python common/adb.py
文件已经准备好了,可以直接下载,运行。
https://github.com/shadowcz007/MLVideos
点击坐标(250,250)的点,命令如下:
adb shell input tap 250 250
封装成py文件,即:
#点击 def tap(self,x,y): cmd = 'shell input tap {x} {y}'.format( x=x, y=y ) self.run(cmd) return
滑动,例如从屏幕(250, 250), 到屏幕(300, 300)即:
adb shell input swipe 250 250 300 300
封装成py文件,详见github地址。
输入文字的话,对于中文需要另外的支持。
使用的是一个叫ADBKeyBoard的apk包:
https://github.com/senzhk/ADBKeyBoard
安装之后,即可通过adb输入中文。简单封装下python代码,详见github的workshop示例代码。
当然,除了以上,还有最常用的返回。
adb shell input keyevent 4
同样的道理,封装下。
uiautomatorviewer是android-sdk自带的一个元素定位工具,非常简单易用,使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。
一般在安装完android studio就会有uiautomatorviewer,我用的是mac电脑,打开访达搜索uiautomatorviewer,双击打开。
打开之后,使用以下(不知为何,我的截图竟然是旋转90度的)
不要紧,保存出来,然后单独对截图编辑下,旋转回来,再用uiautomatorviewer打开即可。
一切正常,这样我们就可以方便地看到我们想要操作的UI元素在界面上的坐标位置。
下面再介绍另外2种界面UI元素定位的方法。
我们可以通过adb获取手机的截图,输入命令截图保存在手机的某个路径下:
adb shell screencap -p /sdcard/autojump.jpg
然后再通过adb,把手机里的图片拉取到我们的电脑里:
adb shell screencap -p /sdcard/autojump.jpg .
同样的道理,也封装成python,方便后续调用。
拿到手机截图之后,通过ocr技术来识别文字在图片上的位置,ocr我们可以采用腾讯ai开放平台的ocr接口,现在是免费不限量使用的。
还有另一种定位方式是通过图片来匹配位置,称为模板匹配。就是在整个图像区域里发现与给定子图像相匹配的小块区域。这里需要一个模板图像(IMG1)和一个待检测的图像(IMG2),这样程序就可从待检测图像(IMG2)里找到模板图像(IMG1)的位置(坐标)。
我在文章《DIY一个按键精灵,用python控制mac的鼠标与键盘》介绍过一个python库:
PyAutoGUI
https://github.com/asweigart/pyautogui
中文文档https://asyncfor.com/posts/doc-pyautogui.html
模板图片匹配的方式,就是pyAutoGUI里的locateAllOnScreen()
函数,寻找所有相似图片的方式来定位坐标。opencv也有一个模板匹配的功能,主要涉及cv2.matchTemplate()和cv2.minMaxLoc()函数。
模板匹配需要注意分辨率一致(没有特殊处理的算法是不会自动进行缩放匹配的)。
以上介绍了一些模拟用户操作的主要代码,还有定位UI元素的几种方法,使用adb过程中,还经常涉及到手机app里复制到剪切板的功能,需要拷贝剪切板里的内容出来的情况。于是这里使用一个叫clipper.apk的apk包。
https://github.com/majido/clipper
主要是2个命令:
adb shell am broadcast -a clipper.set -e text "mixlab workshop"adb shell am broadcast -a clipper.get
使用adb一定要简洁,步骤不能多,多了容易出错。因为app界面各种情况变化比较多。比如突然弹出一个广告窗口,或者在0评论数的情况下,UI长得跟有评论的时候不一样,交互逻辑也有变动。
- adb官方文档
https://developer.android.com/studio/command-line/adb
- 关于workshop
类似的,在视频合成跟视频内容挖掘中,
mixlab的这个项目都会涉及,项目中涉及的关键技术,我会整理成教程,更新到我的知识星球里,同时,欢迎设计师、前端程序员加入,一起探索。
形式,有点类似于远程协作的workshop
去年我带过一期的AR/VR行业数据采集,前年办过30天AI+美食训练营,今年来个短视频☀️
数据获取模块已经完成,简单的AI分析模块也完成。
主要是把标题,作者,url,跟视频下载下来,然后调用图像识别等,提取出内容数据。
步骤如下:
STEP 01 抖音采集
采用adb+安卓模拟器的方式
STEP 02 模拟用户行为浏览视频
采用adb获取xml来定位、获取视频的信息、点击分享链接
STEP03 视频to动图
采用adb截图,然后裁切(可搭配显著图计算),然后转成gif图,保存。
STEP04 ……
待AI模块来读取分析,其他探索性的模块,待更新