前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >短视频技术指南-数据篇-Mixlab实验性项目

短视频技术指南-数据篇-Mixlab实验性项目

作者头像
mixlab
发布2020-03-12 18:12:08
9180
发布2020-03-12 18:12:08
举报
文章被收录于专栏:MixLab科技+设计实验室

STEP01 视频数据采集

对于数据采集有2种主要的方法,一种是通过api网络请求的拦截,破解api的请求参数及规则;另一种则是模拟用户的操作行为,读取界面上返回的数据来提取。

本教程以模拟用户的方式为主,api拦截的方式等后续再另行补充。

模拟用户行为主要采用的是安卓的adb。

- 何为adb?

Android Debug Bridge

adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,adb 是一个 C/S 架构的命令行工具。通过adb,完成用户的模拟操作,实现自动化。

- 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

代码语言:javascript
复制
python common/adb.py

文件已经准备好了,可以直接下载,运行。

https://github.com/shadowcz007/MLVideos

- adb模拟用户操作

点击坐标(250,250)的点,命令如下:

代码语言:javascript
复制
adb shell input tap 250 250

封装成py文件,即:

代码语言:javascript
复制
#点击    def tap(self,x,y):        cmd = 'shell input tap {x} {y}'.format(            x=x,            y=y        )        self.run(cmd)        return

滑动,例如从屏幕(250, 250), 到屏幕(300, 300)即:

代码语言:javascript
复制
adb shell input swipe 250 250 300 300

封装成py文件,详见github地址。

输入文字的话,对于中文需要另外的支持。

使用的是一个叫ADBKeyBoard的apk包:

https://github.com/senzhk/ADBKeyBoard

安装之后,即可通过adb输入中文。简单封装下python代码,详见github的workshop示例代码。

当然,除了以上,还有最常用的返回

代码语言:javascript
复制
adb shell input keyevent 4

同样的道理,封装下。

- adb坐标定位之xml解析

uiautomatorviewer是android-sdk自带的一个元素定位工具,非常简单易用,使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。

一般在安装完android studio就会有uiautomatorviewer,我用的是mac电脑,打开访达搜索uiautomatorviewer,双击打开。

打开之后,使用以下(不知为何,我的截图竟然是旋转90度的)

不要紧,保存出来,然后单独对截图编辑下,旋转回来,再用uiautomatorviewer打开即可。

一切正常,这样我们就可以方便地看到我们想要操作的UI元素在界面上的坐标位置。

下面再介绍另外2种界面UI元素定位的方法。

- adb坐标定位之截屏ocr

我们可以通过adb获取手机的截图,输入命令截图保存在手机的某个路径下:

代码语言:javascript
复制
adb shell screencap -p /sdcard/autojump.jpg

然后再通过adb,把手机里的图片拉取到我们的电脑里:

代码语言:javascript
复制
adb shell screencap -p /sdcard/autojump.jpg .

同样的道理,也封装成python,方便后续调用。

拿到手机截图之后,通过ocr技术来识别文字在图片上的位置,ocr我们可以采用腾讯ai开放平台的ocr接口,现在是免费不限量使用的。

- adb坐标定位之截屏模板图片匹配

还有另一种定位方式是通过图片来匹配位置,称为模板匹配。就是在整个图像区域里发现与给定子图像相匹配的小块区域。这里需要一个模板图像(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()函数。

模板匹配需要注意分辨率一致(没有特殊处理的算法是不会自动进行缩放匹配的)。

- 安卓辅助apk包之手机剪切板

以上介绍了一些模拟用户操作的主要代码,还有定位UI元素的几种方法,使用adb过程中,还经常涉及到手机app里复制到剪切板的功能,需要拷贝剪切板里的内容出来的情况。于是这里使用一个叫clipper.apk的apk包。

https://github.com/majido/clipper

主要是2个命令:

代码语言:javascript
复制
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模块来读取分析,其他探索性的模块,待更新

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无界社区mixlab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • - 何为adb?
    • Android Debug Bridge
    • - adb的安装
      • - adb模拟用户操作
        • - adb坐标定位之xml解析
        • - adb坐标定位之截屏ocr
        • - adb坐标定位之截屏模板图片匹配
        • - 安卓辅助apk包之手机剪切板
        • - 注意事项
    相关产品与服务
    AI 应用产品
    文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档