python 3.7
pycharm
电脑
首先建立好一个python工程,引入本项目需要的库。 如果numpy库没有,在命令提示符中键入 pip install numpyopencv库一样,键入 pip install opencv opencv库安装失败的话,我的百度云盘中有opencv的安装包,在命令提示符中键入 pip install “后接安装包的文件目录”之后安装包会自动安装完毕。END
库 无误地载入完毕后,之后的代码的python强大的解析器,意思就是一种对应关系。如: ap.add_argument('-i', '--image',default='D:/images/example_13.jpg')意思就是之后代码中的“image”就相当于'D:/images/example_13.jpg'图片地址。 ap.add_argument('-c', '--confidence', type=float, default=0.1,)意思就是之后代码中的'confidence'就相当于浮点型的 0.1END
是CLASS类别,里面写入的就是之后目标输出的类别,飞机,自行车之类。注:这些类别的顺序不要更改,顺序后之后的输出有对应关系。 颜色随机生成。END
代码第26行到第35行:神经网络的输入和输出 net = cv2.dnn.readNetFromCaffe(args['prototxt'], args['model'])在opencv3.3版本之后,库里自带了一个用于训练的DNN(深度神经网络)用于训练的模型prototxt和model 在我百度云连接中有,下载,在代码解析器处键入自己的连接就可以啦。 image = cv2.imread(args['image'])输入需要目标识别的图片 blob = cv2.dnn.blobFromImage该函数是从图片中提取二进制像素数据,存放在blob 变量中,用于后面神经网络输入。 detections = net.forward()detections 存储着DNN的输出信息。END
详细讲解一下 detections里面有什么,怎么提取数据。detections数组的构成,存储了可疑的几个被检出出来的东西,这些可疑的东西是组成了数,这些数组中从第二位开始是有效数据,第二个数据是标签,对应class里面的物体名第三个是可信度,可信度越高,越准确第四个到第七个数据是这个物体在图片中的位置 所以detections[0, 0, 1, 1] 为第一个可疑目标的标签 detections[0, 0, 1, 2] 为第一个可疑目标的置信度 detections[0, 0, 1, 3:7] 为第一个可疑目标的在图片中的位置,起点的 x y坐标,终点的x y坐标END
for i in np.arange(0, detections.shape[2]):进行循环的开始,detections.shape[2]变量是有几个可疑目标循环检测置信度是否超过设定的阈值args['confidence']超过就框处目标物。 confidence = detections[0, 0, i, 2] 提取置信度idx = int(detections[0, 0, i, 1]) 提取标签box = detections[0, 0, i, 3:7]提取位置信息 cv2.rectangle 在目标物上绘制方框cv2.putText 在方框上放置文字说明END
图片路径和模型路径一定要写对,路径中不能有中文字符