前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习在APP启动耗时统计的应用

机器学习在APP启动耗时统计的应用

作者头像
Helloted
发布2022-06-08 10:29:37
4990
发布2022-06-08 10:29:37
举报
文章被收录于专栏:Helloted
0、统计方案

应用启动耗时统计除了有通过代码来计算,还有一种方案就是通过录屏,然后查看视频,一帧一帧的人工识别启动帧和加载完成的帧,并且用时间戳相减,从而得到启动耗时时间。

这种方案如果多次人工识别就很繁琐,所以我们引入机器学习

1、机器学习自动识别过程

这是一个典型的图像识别,因此选择了SVM模型训练数据,通过有监督学习,建立图像和labal之间的对应关系。

框架选择方面,这是传统的机器学习,所以用的是Scikit-learn框架

2、准备训练数据

iOS的启动过程:

  1. 启动前
  2. 点击启动iCon
  3. 默认LaunchScreen
  4. 广告页
  5. 首页出现
  6. 首页加载完毕
代码语言:javascript
复制
def cut_video(i_video,o_video):
    print 'cuting...'
    videoCap= cv2.VideoCapture(i_video)
    if not videoCap.isOpened():
        log = i_video + " 该输入路径视频不存在,请检查"
        print(log)
    success, frame = videoCap.read()
    count = 0
    while success:
        if cv2.waitKey(1) == 27:
            break
        count += 1
        success, frame = videoCap.read()
        cv2.imwrite(os.path.join(o_video, 'o_' + str(count) + '.jpg'), frame)
    videoCap.release()

将训练视频按帧分割,这里用的是cv2的库

代码语言:javascript
复制
def make_dir(folder):
    feature_dir = os.path.join(os.getcwd(), folder)
    if not os.path.exists(feature_dir):
        os.makedirs(feature_dir) 

def make_all_folder():
    make_dir('mark_data/0_pre') # 桌面前
    make_dir('mark_data/1_home') # 桌面状态
    make_dir('mark_data/2_icon_click') # 点击icon
    make_dir('mark_data/3_default_show') # 默认启动图
    make_dir('mark_data/4_ad_show') # 广告页
    make_dir('mark_data/5_first_screen') # 首页
    make_dir('mark_data/6_finish') # 完成

生成几个阶段的文件夹,然后将分割好的图片放入对应的阶段

3、模型训练

减少数据大小,将图片缩小10倍,导入标签

代码语言:javascript
复制
def pre_train_datas():
    global img_w
    global img_h
    label_list = []
    image_list = []
    image_classes = os.listdir("mark_data")
    for classes in image_classes:
        image_dir = os.getcwd() + '/mark_data/' + classes
        if not os.path.isdir(image_dir):
            continue
        for image_path in os.listdir(image_dir)[:-1]:
            if image_path.endswith(".jpg"):
                img = Image.open(image_dir+"/"+image_path)
                img_w, img_h = img.size
                img.thumbnail((img_w//10, img_h//10))
                image_list.append(np.asarray(img).flatten())
                label_list.append(classes)
    return image_list, label_list

用SVM训练,得到model

代码语言:javascript
复制
def training_model():
    train_img, train_label = pre_train_datas()

    linear_svc = svm.LinearSVC()
    linear_svc.fit(train_img, train_label)
    model_name = 'model/' + str(img_w) + '_' + str (img_h) + '_model'
    joblib.dump(linear_svc, model_name)
4、测试

将测试视频输入后按帧分割,进行识别,记录启动时和加载完成的时间戳,将时间戳一减便能得到启动时间

代码语言:javascript
复制
def check_video(i_video):
    videoCap= cv2.VideoCapture(i_video)
    if not videoCap.isOpened():
        log = i_video + " 该输入路径视频不存在,请检查"
        print(log)
    
    width = int(videoCap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(videoCap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    model_name = 'model/' + str(width) + '_' + str(height) + '_model'
    clf = joblib.load(model_name)
    success = True
    start = 0.0
    end = 0.0
    count = 0
    while success:
        success, frame = videoCap.read()
        count += 1
        if success:
            milliseconds = videoCap.get(cv2.CAP_PROP_POS_MSEC)
            img = Image.fromarray(cv2.cvtColor(frame,cv2.COLOR_BGR2RGB))  
            img.thumbnail((width//10, height//10))
            a = np.array(img).reshape(1, -1)
            predicts = clf.predict(a)
            print predicts
            if predicts[0] == '2_icon_click' and start == 0:
                start = milliseconds
            if predicts[0] == '6_finish' and end == 0:
                end = milliseconds
    duration = end - start
    print '本次启动时间:' + str(int(duration)) + 'ms'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0、统计方案
  • 1、机器学习自动识别过程
  • 2、准备训练数据
  • 3、模型训练
  • 4、测试
相关产品与服务
腾讯云 TI 平台
腾讯云 TI 平台(TencentCloud TI Platform)是基于腾讯先进 AI 能力和多年技术经验,面向开发者、政企提供的全栈式人工智能开发服务平台,致力于打通包含从数据获取、数据处理、算法构建、模型训练、模型评估、模型部署、到 AI 应用开发的产业 + AI 落地全流程链路,帮助用户快速创建和部署 AI 应用,管理全周期 AI 解决方案,从而助力政企单位加速数字化转型并促进 AI 行业生态共建。腾讯云 TI 平台系列产品支持公有云访问、私有化部署以及专属云部署。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档