代码拉取完成,页面将自动刷新
# import the necessary packages
from imutils.video import FileVideoStream
from imutils.video import FPS
import numpy as np
import argparse
import imutils
import time
import cv2
import configparser
def postprocess(img, out):
h = img.shape[0]
w = img.shape[1]
box = out[0,0,:,3:7] * np.array([w, h, w, h])
cls = out[0,0,:,1]
conf = out[0,0,:,2]
return (box.astype(np.int32), conf, cls)
def detect(origimg):
#img = preprocess(origimg)
(h,w) = origimg.shape[:2]
blob = cv2.dnn.blobFromImage(cv2.resize(origimg, (300,300)),
0.007843,(300, 300), 127.5)
cv2_net.setInput(blob)
detections = cv2_net.forward()
#img = img.astype(np.float32)
#img = img.transpose((2, 0, 1))
#net.blobs['data'].data[...] = img
#out = net.forward()
box, conf, cls = postprocess(origimg, detections)
for i in range(len(box)):
p1 = (box[i][0], box[i][1])
p2 = (box[i][2], box[i][3])
if conf[i] > 0.20 :
c = tuple(map(int, COLORS[int(cls[i])]))
cv2.rectangle(origimg, p1, p2,c,3)
p3 = (max(p1[0], 15), max(p1[1], 15))
title = "%s:%.2f" % (CLASSES[int(cls[i])], conf[i])
cv2.putText(origimg, title, p3, cv2.FONT_ITALIC, 0.6, c, 2)
return origimg
if __name__ == '__main__':
config = configparser.ConfigParser()
config.read('settings-config.ini')
train_iter_model = config['DEPLOY']['train_iter_model']
dataset_name = config['DEFAULT']['dataset_name']
net_file= 'example/MobileNetSSD_deploy.prototxt'
caffe_model='deploy/MobileNetSSD_deploy_{}_{}.caffemodel'.format(train_iter_model,dataset_name)
#" for frozenElsaDataSet"
'''
CLASSES = ('background','bigGirl','smallGirl','dog')
COLORS = np.array([[255,255,255],
[255, 0, 255],
[64, 64, 64],
[255,153, 51]])
'''
# for ucwin objects
CLASSES = ('background','car','bus','streetlight','person','bike')
COLORS = np.array([[255,255,255],
[255, 0, 255],
[64, 64, 200],
[255,153, 51],
[0,255,0],
[0,0,255]])
# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", required=True,
help="path to input video file")
args = vars(ap.parse_args())
# start the file video stream thread and allow the buffer to
# start to fill
print("[INFO] starting video file thread...")
fvs = FileVideoStream(args["video"]).start()
time.sleep(1.0)
# start the FPS timer
fps = FPS().start()
##
FOURCC = cv2.VideoWriter_fourcc(*'MJPG')
vidWriter =None
(h,w) = (None, None)
zeros = None
out_video_file = '{}_{}.avi'.format(dataset_name,train_iter_model)
out_fps = 10
#net = caffe.Net(net_file,caffe_model,caffe.TEST)
cv2_net = cv2.dnn.readNetFromCaffe(net_file,caffe_model)
while fvs.more():
# grab the frame from the threaded video file stream, resize
# it, and convert it to grayscale (while still retaining 3
# channels)
frame = fvs.read()
#frame = imutils.resize(frame, width=450)
#frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#frame = np.dstack([frame, frame, frame])
# display the size of the queue on the frame
frame = detect(frame)
cv2.putText(frame, "Transfer Learning: MobileNet-SSD Detection in Forum-8 UC-Win/Road Virtual Driving Simulator ",
(10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2)
cv2.putText(frame, "code available at https://github.com/inayatkh",
(10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2)
# show the frame and update the FPS counter
cv2.imshow("{} Objects Detections".format(dataset_name), frame)
if vidWriter is None:
(h, w) = frame.shape[:2]
vidWriter = cv2.VideoWriter(out_video_file, FOURCC, out_fps,
(w,h), True)
zeros = np.zeros((h,w),dtype="uint8")
vidWriter.write(frame)
key = cv2.waitKey(1)
if key == 27 :
break
fps.update()
# stop the timer and display FPS information
fps.stop()
print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
# do a bit of cleanup
cv2.destroyAllWindows()
fvs.stop()
vidWriter.release()
# stop the timer and display FPS information
fps.stop()
print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
# do a bit of cleanup
cv2.destroyAllWindows()
fvs.stop()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。