『7x24小时有问必答』
点击上方蓝字关注我们

微信公众号: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,  (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会自动编译优化代码,检测是否启用自动化,它们分别是:
cv.useOptimized() ## 检查是否使用优化cv.setUseOptimized() ### 设置优化
默认情况下,OpenCV都是自动启动优化,根据CPU支持不同,可以启动SSE/AVX等底层指令集优化!

君子藏器于身,待时而动

  推荐阅读  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码