|
微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 大家用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 executione2 = cv.getTickCount()## 计算秒time = (e2 - e1)/ cv.getTickFrequency()## 计算毫秒mt =((e2 - e1)/ cv.getTickFrequency())*1000## 计算FPSfps = 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等底层指令集优化! 君子藏器于身,待时而动 推荐阅读 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |