import numpy as np
import cv2
#yolov3目标检测
def model_output(image, w, h):
net = cv2.dnn.readNetFromDarknet('./yolo-coco/yolov3-tiny.cfg', './yolo-coco/yolov3-tiny.weights')
#加载已训练好的yolov3网络的权重和相应的配置数据
blob_image = cv2.dnn.blobFromImage(image, 1/255.)
#图像预处理,归一化作用,确保输入数据在相同的尺度范围内,避免不同图像之间的像素值差异过大。
# 这有助于网络模型更好地学习图像特征,提高模型的稳定性和收敛速度,提高识别精度。
# print(blob_image)
net.setInput(blob_image) #将blob_image输入到网络
out_names = net.getUnconnectedOutLayersNames()
# 获取网络输出层信息(所有输出层的名字)Net类中的forward函数需要一个结束层,
# 它应该在网络中运行到该层。因此我们通过getUnconnectedOutLayersNames来识别网络的最后一层从而运行整个网络
# print(out_names)
outs = net.forward(out_names)#模型开始正向推理,得到输出结果
ids = [] #表示识别的目标归属于哪一类 类别的编号0~79
confidences = [] # 表示识别目标是某种物体的置信度
boxes = [] # # 用于存放识别物