专栏名称: OpenCV学堂
一个致力于计算机视觉OpenCV原创技术传播的公众号!OpenCV计算机视觉与tensorflow深度学习相关算法原创文章分享、函数使用技巧、源码分析与讨论、,计算机视觉前沿技术介绍,技术专家经验分享,人才交流,学习交流。
目录
相关文章推荐
工业能源圈  ·  中国船企海外仲裁案大逆转!扬子江船业超60亿 ... ·  2 小时前  
苏州新闻  ·  苏州港“朋友圈”,再+1! ·  昨天  
幸福东台  ·  临时停航!封航! ·  3 天前  
51好读  ›  专栏  ›  OpenCV学堂

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

OpenCV学堂  · 公众号  ·  · 2024-07-19 23:29

正文

点击上方 蓝字 关注我们


微信公众号: OpenCV学堂

关注获取更多计算机视觉与深度学习知识

01

引言

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

计算执行时间

cv.getTickCount,

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

cv.getTickFrequency

每秒CPU时间周期总数


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

e1 = cv.getTickCount()# your code executione2 = cv.getTickCount()time = (e2 - e1)/ cv.getTickFrequency()

time是以秒位单位。


计算秒/毫秒/FPS

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

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函数中获取,转换为毫秒数,相关的计算代码如下:

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

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

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

# 人脸检测
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, (300300), (104.0177.0123.0), FalseFalse);
    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)), (25500), thickness=2)
            cv.putText(frame, "score:%.2f"%score, (int(left), int(top)), cv.FONT_HERSHEY_SIMPLEX, 0.5, (00255), 1)
    e2 = cv.getTickCount()
    fps = cv.getTickFrequency() / (e2 - e1)
    cv.putText(frame, label + (" FPS: %.2f"%fps), (1050), cv.FONT_HERSHEY_SIMPLEX, 1.0, (00255), 2)
    cv.imshow('face-detection-demo', frame)
    cv.waitKey(1)







请到「今天看啥」查看全文