需要改一下路径
import cv2
# (1)导入yolov4-tiny网络模型结构
# 传入模型结构.cfg文件,模型权重参数.weight文件
net = cv2.dnn.readNet('C:\\Users\\17242\\Desktop\\yolov4-tiny.cfg', 'C:\\Users\\17242\\Desktop\\yolov4-tiny.weights')
# 定义一个目标检测模型,将模型传进去
model = cv2.dnn_DetectionModel(net)
# 设置模型的输入
model.setInputParams(size=(320, 320), scale=1 / 255)
# (2)获取分类文本的信息
classes = [] # 存放每个分类的名称
with open('C:\\Users\\17242\\Desktop\\classes.txt') as file_obj:
# 获取文本中的每一行
for class_name in file_obj.readlines():
# 删除文本中的换行符、空格等
class_name = class_name.strip()
# 将每个分类名保存到列表中
classes.append(class_name)
# (3)视频捕获
cap = cv2.VideoCapture('C:\\Users\\17242\\Desktop\\1.mp4')
# (4)对每一帧视频图像处理
while True:
# 返回是否读取成功ret和读取的帧图像frame
ret, frame = cap.read()
# 图像比较大把它缩小一点
frame = cv2.resize(frame, (1280, 720))
# 视频比较短,循环播放
if cap.get(cv2.CAP_PROP_POS_FRAMES) == cap.get(cv2.CAP_PROP_FRAME_COUNT):
# 如果当前帧==总帧数,那就重置当前帧为0
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
# 目标检测
classids, scores, bboxes = model.detect(frame, 0.5, 0.3)
print('classids:', classids) # 如:[0]
print('score:', scores) # 如:0.9469002
print('bboxes:', bboxes) # 如:[159 176 816 533]
# (5)显示检测结果
# 遍历所有的检测框信息,把它们绘制出来
for class_id, score, bbox in zip(classids, scores, bboxes):
# 获取检测框的左上角坐标和宽高
x, y, w, h = bbox
# 获取检测框对应的分类名
class_name = classes[class_id]
# 绘制矩形框
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)
# 显示分类文本
cv2.putText(frame, class_name, (x, y + h + 20), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 2)
# 显示类别概率
cv2.putText(frame, str(int(score * 100)) + '%', (x, y - 5), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 255), 2)
# (6)显示图像
cv2.imshow('Image', frame) # 窗口名,图像变量
if cv2.waitKey(30) & 0xFF == 27: # 每帧滞留30毫秒后消失
break
# 释放视频资源
cap.release()
cv2.destroyAllWindows()
https://blog.csdn.net/weixin_41868104/article/details/115748281
上图解决。