Yolo Tensorflow
Yolo Tensorflow
import cv2
import argparse
import numpy as np
import tensorflow as tf
:class Detector(object)
self.net = net
self.weights_file = weight_file
self.classes = cfg.CLASSES
self.num_class = len(self.classes)
self.image_size = cfg.IMAGE_SIZE
self.cell_size = cfg.CELL_SIZE
self.boxes_per_cell = cfg.BOXES_PER_CELL
self.threshold = cfg.THRESHOLD
self.iou_threshold = cfg.IOU_THRESHOLD
\+ self.boundary2 = self.boundary1
)(self.sess = tf.Session
self.sess.run(tf.global_variables_initializer())
)(self.saver = tf.train.Saver
self.saver.restore(self.sess, self.weights_file)
:def draw_result(self, img, result)
:for i in range(len(result))
x = int(result[i][1])
y = int(result[i][2])
w = int(result[i][3] / 2)
h = int(result[i][4] / 2)
,cv2.rectangle(img, (x - w, y - h - 20)
(cv2.putText
result = self.detect_from_cvmat(inputs)[0]
:for i in range(len(result))
return result
,net_output = self.sess.run(self.net.logits
)feed_dict={self.net.images: inputs}
][ = results
:for i in range(net_output.shape[0])
results.append(self.interpret_output(net_output[i]))
return results
))self.boxes_per_cell, self.num_class
(class_probs = np.reshape
,output[0:self.boundary1]
(scales = np.reshape
,output[self.boundary1:self.boundary2]
(boxes = np.reshape
,output[self.boundary2:]
(offset = np.array
(offset = np.transpose
(np.reshape
,offset
))0 ,2 ,1(
boxes[:, :, :, 0] += offset
boxes *= self.image_size
:for i in range(self.boxes_per_cell)
:for j in range(self.num_class)
(probs[:, :, i, j] = np.multiply
filter_mat_boxes = np.nonzero(filter_mat_probs)
,boxes_filtered = boxes[filter_mat_boxes[0]
]filter_mat_boxes[1], filter_mat_boxes[2]
probs_filtered = probs[filter_mat_probs]
(classes_num_filtered = np.argmax
[)filter_mat_probs, axis=3
argsort = np.array(np.argsort(probs_filtered))[::-1]
boxes_filtered = boxes_filtered[argsort]
probs_filtered = probs_filtered[argsort]
classes_num_filtered = classes_num_filtered[argsort]
:for i in range(len(boxes_filtered))
:if probs_filtered[i] == 0
continue
probs_filtered[j] = 0.0
boxes_filtered = boxes_filtered[filter_iou]
probs_filtered = probs_filtered[filter_iou]
classes_num_filtered = classes_num_filtered[filter_iou]
][ = result
:for i in range(len(boxes_filtered))
(result.append
,self.classes[classes_num_filtered[i]][
,boxes_filtered[i][0]
,boxes_filtered[i][1]
,boxes_filtered[i][2]
,boxes_filtered[i][3]
)]probs_filtered[i]
return result
)(detect_timer = Timer
)(ret, _ = cap.read
:while ret
)(detect_timer.tic
result = self.detect(frame)
)(detect_timer.toc
))detect_timer.average_time
self.draw_result(frame, result)
cv2.imshow('Camera', frame)
cv2.waitKey(wait)
)(detect_timer = Timer
image = cv2.imread(imname)
)(detect_timer.tic
result = self.detect(image)
)(detect_timer.toc
))detect_timer.average_time
self.draw_result(image, result)
cv2.imshow('Image', image)
cv2.waitKey(wait)
:)(def main
)(parser = argparse.ArgumentParser
)(args = parser.parse_args
os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu
yolo = YOLONet(False)
cap = cv2.VideoCapture(-1) #
detector.camera_detector(cap) #
detect from image file #
'imname = 'test/person.jpg
detector.image_detector(imname)
)(main