Darknet YoloV3调用python接口统计检测个数(批量图片和视频)
2020-07-21 16:13
483 查看
前篇进阶:https://blog.csdn.net/qq_34717531/article/details/107483479
前篇进阶:https://blog.csdn.net/qq_34717531/article/details/107468262
一、批量图片计数:
[code]# 将检测结果绘制到照片上并且保存 if __name__ == "__main__": #os.environ["CUDA_VISIBLE_DEVICES"] = "0" #加载模型 net = load_net("./cfg/yolov3.cfg".encode('utf-8'), "./yolov3.weights".encode('utf-8'), 0) meta = load_meta("./cfg/coco.data".encode('utf-8')) # 测试数据集的路径 test_dir = '/home/ycc/darknet-master/edata/VOC2008/JPEGImages/' # 检测结果保存路径 save_dir = '/home/ycc/projects/results/' #如果保存检测图像文件夹不存在,生成它 if not os.path.exists(save_dir): os.mkdir(save_dir) #os.listdir(path):列出path下的文件列表 pics = os.listdir(test_dir) #保存图片计数count count = 0 #对test_dir列表下的所有图片pics进行循环检测 for im in pics: #统计计数detection detection = 0 #os.path.join():python路径拼接函数,img得到完整图片路径 img = os.path.join(test_dir, im) #检测计时开始 s = time.time() #detect检测 r = detect(net, meta, img.encode('utf-8')) #检测计时结束 print("一张图检测耗时:%.3f秒" % (time.time() - s)) # 输出的检测结果中坐标信息为目标的中心点坐标和box的w和w im = cv2.imread(img) for res in r: #detect检测出来的是检测的中心点坐标x,y和宽高w,h,要画框所以做了转换 x1 = int(res[2][0] - (res[2][2] / 2)) x2 = int(res[2][0] + (res[2][2] / 2)) y1 = int(res[2][1] - (res[2][3] / 2)) y2 = int(res[2][1] + (res[2][3] / 2)) #画矩形框cv2.rectangle()参数: 图像,左上角坐标,右下角坐标,颜色, 线条粗细。 cv2.rectangle(im, (x1, y1), (x2, y2), (0, 255, 0), 2) #打标签(添加字体)cv2.putText()参数:图像,显示字符,左上角坐标,定义字体,字体大小,颜色,字体粗细 #res[0]就是标签信息,res[2][0]代表的是第二维度第一个元素,就是x cv2.putText(im, str(res[0]).split("'")[1], (x1-10, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) #统计计数detection加一 detection += 1 #显示统计总数 cv2.putText(im,"num: %s" % str(detection),(75,100),cv2.FONT_HERSHEY_SIMPLEX,2,[0,255,255],3) #保存画过框,打上标签的图片 cv2.imwrite(save_dir +str(count) +'.jpg', im) #图片计数+1 count += 1
二、视频计数
[code]if __name__ == "__main__": #加载模型 net = load_net('cfg/yolov3.cfg'.encode('utf-8'), 'yolov3.weights'.encode('utf-8'), 0) meta = load_meta('cfg/coco.data'.encode('utf-8')) #读取视频 vid = cv2.VideoCapture('1.ts') #FourCC全称Four-Character Codes,代表四字符代码 (four character code), 它是一个32位的标示符,其实就是typedef unsigned int FOURCC;是一种独立标示视频数据流格式的四字符代码。 fourcc = cv2.VideoWriter_fourcc('M','P','4','2') #opencv3.0 #保存检测后的视频cv2.VideoWriter()参数:视频,fourcc指定编码器,保存视频的fps,保存视频的尺寸 videoWriter = cv2.VideoWriter('11.avi', fourcc, 25, (1920,1080)) while True: detection = 0 return_value,arr=vid.read() if not return_value: break im=nparray_to_image(arr) boxes= detect(net, meta, im) for i in range(len(boxes)): score=boxes[i][1] label=boxes[i][0] xmin=boxes[i][2][0]-boxes[i][2][2]/2 ymin=boxes[i][2][1]-boxes[i][2][3]/2 xmax=boxes[i][2][0]+boxes[i][2][2]/2 ymax=boxes[i][2][1]+boxes[i][2][3]/2 #画框 cv2.rectangle(arr,(int(xmin),int(ymin)),(int(xmax),int(ymax)),(0,255,0),2) #打标签 cv2.putText(arr,str(label),(int(xmin),int(ymin)),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=0.8,color=(0,255,255),thickness=2) detection += 1 cv2.putText(arr,"num: %s" % str(detection),(75,100),cv2.FONT_HERSHEY_SIMPLEX,2,[0,255,255],3) cv2.imshow("Canvas", arr) videoWriter.write(arr) cv2.waitKey(1) cv2.destroyAllWindows()
相关文章推荐
- Darknet-yolo3调用python接口批量检测图片
- Darknet YoloV4调用python接口进行批量图片检测保存并计数
- Darknet Python调用yolov4检测视频或rtsp流实时统计检测个数
- python调用搜狗OCR接口实现图片文字识别
- texturepacker使用python调用命令行对批量图片进行打包
- python实现调用百度图像识别api得到图片识别与检测类别和详细信息以及相关准确度
- Linux下python调用C++接口实现图片及文件的AES加解密
- 关于Python+Opencv实现人脸检测的实验笔记(调用图片文件篇)
- 用python调用七牛的fetch接口保存网络上的图片
- python-opencv基于人脸分类器的图片或视频或摄像头的人脸识别、统计人数等
- python 批量视频转换成图片
- python调用sendcloud接口实现邮件批量发送收取及url回调 推荐
- Python调用OpenCV对图片人脸进行检测识别
- 多线程的应用(批量调用淘宝接口get图片)
- Python调用face++API完成本地图片的人脸检测
- caffe的python接口以opencv的方式读取视频,图片做分类时出错的解决
- 微信域名检测接口调用演示步骤(含PHP、Python)
- HttpClientUtil工具类、java批量下载网址中的图片到本地、 java后台发送doGet、doPost请求调用接口接受返回值。
- 微信域名检测官方api接口的分享(含PHP、JAVA、Python调用文档)
- python requests模块post请求(请求头+请求主体) 调用web接口批量查询ip所属地址