前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技巧 | OpenCV程序执行时间计算

技巧 | OpenCV程序执行时间计算

作者头像
OpenCV学堂
发布2020-12-08 14:36:34
1.7K0
发布2020-12-08 14:36:34
举报
01

引言

大家用OpenCV做开发,经常需要调试算法,打印出算法的执行时间,OpenCV中没有直接获取时间戳的函数,但是有两个根据CPU时钟可以精准计算算法每个步骤执行时间的函数,通过它们可以计算一行或者多行代码的执行时间,视频处理的FPS等性能指标。

计算执行时间

代码语言:javascript
复制
cv.getTickCount,

返回CPU执行的时间周期数,

代码语言:javascript
复制
cv.getTickFrequency

每秒CPU时间周期总数

计算一段算法处理执行的时间秒数,代码结构如下:

代码语言:javascript
复制
e1 = cv.getTickCount()
# your code execution
e2 = cv.getTickCount()
time = (e2 - e1)/ cv.getTickFrequency()

time是以秒位单位。

计算秒/毫秒/FPS

在算法执行阶段,有三个经常使用的速度性能计量指标分别是秒、毫秒、FPS(每秒多少帧),根据上面的cv.getTickCount与cv.getTickFrequency两个函数,这三个指标的计算代码如下:

代码语言:javascript
复制
e1 = cv.getTickCount()
# your code execution
e2 = cv.getTickCount()
## 计算秒
time = (e2 - e1)/ cv.getTickFrequency()


## 计算毫秒
mt =((e2 - e1)/ cv.getTickFrequency())*1000


## 计算FPS
fps = cv.getTickFrequency() / (e2 - e1)

网络模型推理执行时间计算

OpenCV中还提供了网络模型推理执行时间得计算函数,完成一次深度学习模型推理的时间,可以从模型的getPerfProfile函数中获取,转换为毫秒数,相关的计算代码如下:

代码语言:javascript
复制
# Put efficiency information.
t, _ = net.getPerfProfile()
label = 'Inference time: %.2f ms' % (t * 1000.0 / cv.getTickFrequency())

人脸检测模型与代码执行时间计算

下面的代码演示了实时视频人脸检测模型推理时间毫秒数与计算执行时间FPS

代码语言:javascript
复制
# 人脸检测
while True:
    e1 = cv.getTickCount()
    ret, frame = capture.read()
    if ret is not True:
        break
    h, w, c = frame.shape
    blobImage = cv.dnn.blobFromImage(frame, 1.0, (300, 300), (104.0, 177.0, 123.0), False, False);
    net.setInput(blobImage)
    cvOut = net.forward()

    # Put efficiency information.
    t, _ = net.getPerfProfile()
    label = 'Inference time: %.2f ms' % (t * 1000.0 / cv.getTickFrequency())

    # 绘制检测矩形
    for detection in cvOut[0,0,:,:]:
        score = float(detection[2])
        objIndex = int(detection[1])
        if score > 0.5:
            left = detection[3]*w
            top = detection[4]*h
            right = detection[5]*w
            bottom = detection[6]*h

            # 绘制
            cv.rectangle(frame, (int(left), int(top)), (int(right), int(bottom)), (255, 0, 0), thickness=2)
            cv.putText(frame, "score:%.2f"%score, (int(left), int(top)), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
    e2 = cv.getTickCount()
    fps = cv.getTickFrequency() / (e2 - e1)
    cv.putText(frame, label + (" FPS: %.2f"%fps), (10, 50), cv.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2)
    cv.imshow('face-detection-demo', frame)
    cv.waitKey(1)

此外,OpenCV还有两个函数可以决定程序执行时间,默认情况下OpenCV会自动编译优化代码,检测是否启用自动化,它们分别是:

代码语言:javascript
复制
cv.useOptimized() ## 检查是否使用优化
cv.setUseOptimized() ### 设置优化

默认情况下,OpenCV都是自动启动优化,根据CPU支持不同,可以启动SSE/AVX等底层指令集优化!

君子藏器于身,待时而动

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

本文分享自 OpenCV学堂 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档