opencv4.4尝鲜(玩转yolov4检测)

新出的opencv4.4是:

1、支持yolov4检测的,opencv4.3及其之前版本是不支持yolov4的。

2、对比于之前在darknet上使用yolov4检测,直接使用opencv即可,更加方便,并且速度更快。

前置:https://blog.csdn.net/qq_34717531/article/details/107763872

 

一、批量图片yolov4检测,计数并保存:

#引用包
import cv2 as cv
import time
import os

#置信度和nms设置
confThreshold = 0.25
nmsThreshold = 0.4

class_names = []#初始化一个列表以存储类名
COLORS = [(0, 255, 255),(0,0,255), (255, 255, 0),(0, 255, 0), (255, 0, 0)]#颜色
color=(0,255,0)
color1=(0,0,255)
c=(0, 0, 0)

#模型参数
weights="/home/ycc/opencv/yolov4.weights"
cfg="/home/ycc/opencv/yolov4.cfg"
m="/home/ycc/opencv/coco.names"

# 网络设置
net = cv.dnn_DetectionModel(cfg, weights)
#GPU运行
net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)
net.setInputSize(608, 608)
net.setInputScale(1.0 / 255)
net.setInputSwapRB(True)
with open(m, "r") as f:
    class_names = [cname.strip() for cname in f.readlines()]
#批量图片检测和保存位置
test_dir = '/home/ycc/darknet-master/ming/'
save_dir = '/home/ycc/opencv/out1/'

#批量加载图像
pics = os.listdir(test_dir)
for im in pics:
    s = time.time()
    img = os.path.join(test_dir,im)
    image = cv.imread(img)

    #模型检测
    classes, confidences, boxes = net.detect(image, confThreshold, nmsThreshold)
    count=0
    #循环画框
    for (classid, score, box) in zip(classes, confidences, boxes):
        #label = '%s: %.2f' % (class_names[classid], score)
        label = "%s(%2.0f%%)" % (class_names[classid[0]], score*100)#标签置信度
        labelSize, baseLine = cv.getTextSize(label, cv.FONT_HERSHEY_SIMPLEX, 0.5, 1)
        left, top, width, height = box
        cv.rectangle(image, box, color1, 1)
        cv.rectangle(image, (left-1, top - labelSize[1]-5), (left + labelSize[0], top), color, cv.FILLED)
        cv.putText(image, label, (left, top-5), cv.FONT_HERSHEY_SIMPLEX, 0.5, c,2)
    #num_detections = len(boxes)
    #for (classid, score, box) in zip(classes, scores, boxes):
        #print(classid, score, box)
        #color = COLORS[int(classid) % len(COLORS)]
        #label = "%s : %f" % (class_names[classid[0]], score)
        #cv2.rectangle(image, box, color, 2)
        #cv2.putText(image, label, (box[0], box[1] ), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
        count+=1
    print("一张图检测耗时:%.3f秒" % (time.time() - s))
    cv.putText(image,"Num: %s" % str(count),(25,50),cv.FONT_HERSHEY_SIMPLEX,1,[255,255,0],2)
    cv.imwrite(os.path.join(save_dir,im),image)#用原始图像名im保存转换后的图片

    


opencv4.4在进行检测之前是进行了一次初始化,后面的检测时间包括读图,检测,画框。

 

 

二、视频检测,计数并保存

import cv2 as cv
import time
import os


#置信度和nms设置
confThreshold = 0.25
nmsThreshold = 0.4

class_names = []#初始化一个列表以存储类名
COLORS = [(0, 255, 255),(0,0,255), (255, 255, 0),(0, 255, 0), (255, 0, 0)]#颜色
color=(0,255,0)
color1=(0,0,255)
c=(0, 0, 0)

#模型参数
weights="/home/ycc/opencv/yolov4-tiny.weights"
cfg="/home/ycc/opencv/yolov4-tiny.cfg"
m="/home/ycc/opencv/coco.names"

# 网络设置
net = cv.dnn_DetectionModel(cfg, weights)
#GPU运行
net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)

net.setInputSize(608, 608)
net.setInputScale(1.0 / 255)
net.setInputSwapRB(True)
with open(m, "r") as f:
    class_names = [cname.strip() for cname in f.readlines()]

#保存处理后视频的一套
cap = cv.VideoCapture("1.ts")
#cap = cv.VideoCapture(rtsp)
fps = int(cap.get(cv.CAP_PROP_FPS))
width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
fourcc = cv.VideoWriter_fourcc(*"MJPG")
out = cv.VideoWriter('11.avi', fourcc, int(fps), (int(width),int(height)))


while cv.waitKey(1) < 1:
    (grabbed, frame) = cap.read()#获取每一帧
    if not grabbed:
        exit()
     
    start = time.time()
    classes, confidences, boxes = net.detect(frame, confThreshold, nmsThreshold)
    end = time.time()

    start_drawing = time.time()
    count=0
    for (classid, score, box) in zip(classes, confidences, boxes):
        label = "%s(%2.0f%%)" % (class_names[classid[0]], score*100)#标签置信度
        labelSize, baseLine = cv.getTextSize(label, cv.FONT_HERSHEY_SIMPLEX, 0.5, 1)
        left, top, width, height = box
        cv.rectangle(frame, box, color1, 1)
        cv.rectangle(frame, (left-1, top - labelSize[1]-5), (left + labelSize[0], top), color, cv.FILLED)
        cv.putText(frame, label, (left, top-5), cv.FONT_HERSHEY_SIMPLEX, 0.5, c,2)
        count+=1
    end_drawing = time.time() 
    fps_label = "FPS: %.2f (excluding drawing time of %.2fms)" % (1 / (end - start),(end_drawing - start_drawing) * 1000)
    cv.putText(frame,"Num: %s" % str(count),(100,150),cv.FONT_HERSHEY_SIMPLEX,2,[255,255,0],3)
    cv.putText(frame, fps_label, (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 255), 2)
    out.write(frame)
    cv.imshow("detections", frame)
cap.release()
out.release()
cv.destoryAllWindows()
    

计数:

 

 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
opencv-4.4.0-vc14_vc15.exe 版本:4.4.0 2020年7月 OpenCV 4.x的夏季更新已发布 :晴天: 此版本的亮点: SIFT(尺度不变特征变换)算法已移至主存储库(SIFT的专利已过期) DNN模块: 改进的图层/激活/支持更多模型: 最新的Yolo v4检测器:#17148。为[yolo]层(Yolo v3和Yolo v4)禁用了每层NMS,因为它们是不正确的-用于cv::dnn::NMSBoxes所有检测。 ONNX:添加对Resnet_backbone(Torchvision)的支持#16887 EfficientDet模型支持:#17384 新样本/演示: 添加文本识别示例:C ++ / Python FlowNet2光流:#16575 英特尔®推理引擎后端(OpenVINO™): 增加了对OpenVINO 2020.3 LTS / 2020.4版本的支持 计划在下一版本中删除对NN Builder API的支持 CUDA后端中的许多修复和优化(感谢@YashasSamaga):PR G-API模块: 在OpenCV后端引入了用于状态内核的新API :GAPI_OCV_KERNEL_ST。有状态内核在各个图执行(标准中更多)或流的视频帧之间(以流模式)保留其状态。 在G-API推出更多面向视频的操作:goodFeaturesToTrack,buildOpticalFlowPyramid,calcOpicalFlowPyrLK。 添加了更多的图像处理内核:Laplacian和双边过滤器。 修复了G-API的OpenCL后端中的潜在崩溃。 OpenCV社区的许多其他伟大贡献,包括但不限于: Obj-C / Swift绑定:#17165 (opencv_contrib)Julia绑定是正在进行的GSoC项目的一部分:#2547 (opencv_contrib)BIMEF:生物启发的多重曝光融合框架,用于弱光图像增强: #2448 为CV_16UC1图像启用Otsu阈值:#16640 为文本检测添加笔划宽度变换算法:#2464 计划在Apache 2许可证上进行下一版本OE-32的 迁移#17491

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学术菜鸟小晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值