From 5a47c46b39475fc3581b9819f488b977ea1beca3 Mon Sep 17 00:00:00 2001
From: Edmond Yoo <hj3yoo@uwaterloo.ca>
Date: Sun, 16 Sep 2018 03:11:04 +0000
Subject: [PATCH] Moving files from MTGCardDetector
---
darknet.py | 103 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 98 insertions(+), 5 deletions(-)
diff --git a/darknet.py b/darknet.py
index 75ef04b..f00356d 100644
--- a/darknet.py
+++ b/darknet.py
@@ -31,6 +31,8 @@
import math
import random
import os
+import cv2
+import numpy as np
def sample(probs):
s = sum(probs)
@@ -222,9 +224,14 @@
Performs the meat of the detection
"""
#pylint: disable= C0321
- im = load_image(image, 0, 0)
+ if isinstance(image, np.ndarray):
+ im = array_to_image(image)[0]
+ else:
+ im = load_image(image, 0, 0)
#import cv2
- #custom_image = cv2.imread(image) # use: detect(,,imagePath,)
+ #custom_image_bgr = cv2.imread(image) # use: detect(,,imagePath,)
+ #custom_image = cv2.cvtColor(custom_image_bgr, cv2.COLOR_BGR2RGB)
+ #custom_image = cv2.resize(custom_image,(lib.network_width(net), lib.network_height(net)), interpolation = cv2.INTER_LINEAR)
#import scipy.misc
#custom_image = scipy.misc.imread(image)
#im, arr = array_to_image(custom_image) # you should comment line below: free_image(im)
@@ -235,7 +242,8 @@
if debug: print("Assigned pnum")
predict_image(net, im)
if debug: print("did prediction")
- dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, None, 0, pnum, 1)
+ #dets = get_network_boxes(net, custom_image_bgr.shape[1], custom_image_bgr.shape[0], thresh, hier_thresh, None, 0, pnum, 0) # OpenCV
+ dets = get_network_boxes(net, im.w, im.h, thresh, hier_thresh, None, 0, pnum, 0)
if debug: print("Got dets")
num = pnum[0]
if debug: print("got zeroth index of pnum")
@@ -362,7 +370,9 @@
if not os.path.exists(imagePath):
raise ValueError("Invalid image path `"+os.path.abspath(imagePath)+"`")
# Do the detection
- detections = detect(netMain, metaMain, imagePath.encode("ascii"), thresh)
+ #detections = detect(netMain, metaMain, imagePath, thresh) # if is used cv2.imread(image)
+ #detections = detect(netMain, metaMain, imagePath.encode("ascii"), thresh)
+ detections = detect(netMain, metaMain, cv2.imread(imagePath), thresh, debug=True)
if showImage:
try:
from skimage import io, draw
@@ -417,5 +427,88 @@
print("Unable to show image: "+str(e))
return detections
+
+def capture(thresh=.25, hier_thresh=.5, nms=.45, configPath="./cfg/yolov3.cfg", weightPath="yolov3.weights",
+ metaPath="./data/coco.data", showImage=True, makeImageOnly=False, initOnly=False):
+ global metaMain, netMain, altNames # pylint: disable=W0603
+ netMain = load_net_custom(configPath.encode("ascii"), weightPath.encode("ascii"), 0, 1) # batch size = 1
+ metaMain = load_meta(metaPath.encode("ascii"))
+
+ num = c_int(0)
+ pnum = pointer(num)
+ num = pnum[0]
+
+ capture = cv2.VideoCapture('../data/test1.mp4')
+ print(capture.get(cv2.CAP_PROP_FPS))
+
+ capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1024)
+ capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 768)
+
+ while True:
+ ret, frame = capture.read()
+ detections = detect(netMain, metaMain, frame, thresh, debug=True)
+ '''
+ im, arr = array_to_image(frame)
+ predict_image(netMain, im)
+ dets = get_network_boxes(netMain, im.w, im.h, thresh, hier_thresh, None, 0, pnum, 1)
+ if nms:
+ do_nms_sort(dets, num, metaMain.classes, nms)
+ res = []
+ for j in range(num):
+ for i in range(metaMain.classes):
+ if dets[j].prob[i] > 0:
+ b = dets[j].bbox
+ nameTag = metaMain.names[i]
+ res.append((nameTag, dets[j].prob[i], (b.x, b.y, b.w, b.h)))
+ '''
+ for detection in detections:
+ label = detection[0]
+ confidence = detection[1]
+ pstring = label + ": " + str(np.rint(100 * confidence)) + "%"
+ imcaption.append(pstring)
+ print(pstring)
+ bounds = detection[2]
+ shape = image.shape
+ # x = shape[1]
+ # xExtent = int(x * bounds[2] / 100)
+ # y = shape[0]
+ # yExtent = int(y * bounds[3] / 100)
+ yExtent = int(bounds[3])
+ xEntent = int(bounds[2])
+ # Coordinates are around the center
+ xCoord = int(bounds[0] - bounds[2] / 2)
+ yCoord = int(bounds[1] - bounds[3] / 2)
+ boundingBox = [
+ [xCoord, yCoord],
+ [xCoord, yCoord + yExtent],
+ [xCoord + xEntent, yCoord + yExtent],
+ [xCoord + xEntent, yCoord]
+ ]
+ # Wiggle it around to make a 3px border
+ rr, cc = draw.polygon_perimeter([x[1] for x in boundingBox], [x[0] for x in boundingBox], shape=shape)
+ rr2, cc2 = draw.polygon_perimeter([x[1] + 1 for x in boundingBox], [x[0] for x in boundingBox], shape=shape)
+ rr3, cc3 = draw.polygon_perimeter([x[1] - 1 for x in boundingBox], [x[0] for x in boundingBox], shape=shape)
+ rr4, cc4 = draw.polygon_perimeter([x[1] for x in boundingBox], [x[0] + 1 for x in boundingBox], shape=shape)
+ rr5, cc5 = draw.polygon_perimeter([x[1] for x in boundingBox], [x[0] - 1 for x in boundingBox], shape=shape)
+ boxColor = (int(255 * (1 - (confidence ** 2))), int(255 * (confidence ** 2)), 0)
+ draw.set_color(image, (rr, cc), boxColor, alpha=0.8)
+ draw.set_color(image, (rr2, cc2), boxColor, alpha=0.8)
+ draw.set_color(image, (rr3, cc3), boxColor, alpha=0.8)
+ draw.set_color(image, (rr4, cc4), boxColor, alpha=0.8)
+ draw.set_color(image, (rr5, cc5), boxColor, alpha=0.8)
+ print(res)
+ cv2.imshow('frame', frame)
+ if cv2.waitKey(1) & 0xFF == ord('q'):
+ break
+
+ capture.release()
+ cv2.destroyAllWindows()
+
+
if __name__ == "__main__":
- print(performDetect())
+ performDetect(imagePath='data/scream.jpg')
+ #performDetect(imagePath="../data/test1.jpg", thresh=0.25, configPath="./cfg/tiny_yolo.cfg",
+ # weightPath="./weights/second_general/tiny_yolo_17000.weights",
+ # metaPath="./data/obj.data", showImage=True, makeImageOnly=False, initOnly=False)
+ #print(performDetect(showImage=False))
+ #capture()
--
Gitblit v1.10.0