下面简单介绍实现过程。下面这个链接是模型和库安装包百度云链接:https://pan.baidu.com/s/1ua9WSJgXdmmcLloW0saoQg提取码:yhib
工具/原料
python3.7
pycharm
电脑
代码第2行到第4行:
1、首先建立好一个python工程,引入本项目需要的库。如果numpy库没有,在命令提示符中键入pipinstallnumpyopencv库一样,键入pipinstallopencvopencv库安装失败的话,我的百度云盘中有opencv的安装包,在命令提示符中键入pipinstall“后接安装包的文件目录”之后安装包会自动安装完毕。
代码第7行到第16行:
1、库无误地载入完毕后,之后的代码的pyt丝群闻栝hon强大的解析器,意思就是一种对应关系。如:ap.add_argumen墉掠载牿t("-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.1
代码第18行到第23行:
1、是CLASS类别,里面写入的就是之后目标输出的类别,飞机,自行车之类。注:这些类别的顺序不要更改,顺序后之后的输出有对应关系。颜色随机生成。
代码第26行到第35行:神经网络的输入和输出
1、代码第26行到第35行:神经网络的输入和输出net=cv2.dnn.筠续师诈readNetFromCaffe(args["pro墉掠载牿totxt"],args["model"])在opencv3.3版本之后,库里自带了一个用于训练的DNN(深度神经网络)用于训练的模型prototxt和model在我百度云连接中有,下载,在代码解析器处键入自己的连接就可以啦。image=cv2.imread(args['image'])输入需要目标识别的图片blob=cv2.dnn.blobFromImage该函数是从图片中提取二进制像素数据,存放在blob变量中,用于后面神经网络输入。detections=net.forward()detections存储着DNN的输出信息。
详细讲解一下detections变量
1、详细讲解一下detections里面有什么,怎么提取数据。detections数组的构成,存储了可疑的几个被检出出来的东西,这些可疑的东西是组成了数,这些数组中从第二位开始是有效数据,第二个数据是标签,对应class里面的物体名第三个是可信度,可信度越高,越准确第四个到第七个数据是这个物体在图片中的位置所以detections[0,0,1,1]为第一个可疑目标的标签detections[0,0,1,2]为第一个可疑目标的置信度detections[0,0,1,3:7]为第一个可疑目标的在图片中的位置,起点的xy坐标,终点的xy坐标
代码第41行到第57行:判断可疑目标的置信度
1、forii艘绒庳焰nnp.arange(0,detections.shape[2]):进行循环的开始,detections.s茑霁酌绡hape[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在方框上放置文字说明
最后的结果展示