From 573d7e80814a4cc3c08897f6c0f67ea189339856 Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Wed, 16 May 2018 00:03:23 +0000
Subject: [PATCH] Added def array_to_image(arr): to the darknet.py Usage:     import scipy.misc     sci_image = scipy.misc.imread(image)     im, arr = array_to_image(sci_image)

---
 darknet.py |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/darknet.py b/darknet.py
index 2f77bad..700ed0c 100644
--- a/darknet.py
+++ b/darknet.py
@@ -97,26 +97,26 @@
                 if int(os.environ['CUDA_VISIBLE_DEVICES']) < 0:
                     raise ValueError("ForceCPU")
             try:
-                # Check a global
                 global DARKNET_FORCE_CPU
                 if DARKNET_FORCE_CPU:
                     raise ValueError("ForceCPU")
             except NameError:
                 pass
-            print(os.environ.keys())
-            print("FORCE_CPU flag undefined, proceeding with GPU")
+            # print(os.environ.keys())
+            # print("FORCE_CPU flag undefined, proceeding with GPU")
         if not os.path.exists(winGPUdll):
             raise ValueError("NoDLL")
         lib = CDLL(winGPUdll, RTLD_GLOBAL)
     except (KeyError, ValueError):
-        print("Notice: GPU-free mode")
         hasGPU = False
         if os.path.exists(winNoGPUdll):
             lib = CDLL(winNoGPUdll, RTLD_GLOBAL)
+            print("Notice: CPU-only mode")
         else:
             # Try the other way, in case no_gpu was
             # compile but not renamed
             lib = CDLL(winGPUdll, RTLD_GLOBAL)
+            print("Environment variables indicated a CPU run, but we didn't find `"+winNoGPUdll+"`. Trying a GPU run anyway.")
 else:
     lib = CDLL("./libdarknet.so", RTLD_GLOBAL)
 lib.network_width.argtypes = [c_void_p]
@@ -188,6 +188,18 @@
 predict_image.argtypes = [c_void_p, IMAGE]
 predict_image.restype = POINTER(c_float)
 
+def array_to_image(arr):
+    import numpy as np
+    # need to return old values to avoid python freeing memory
+    arr = arr.transpose(2,0,1)
+    c = arr.shape[0]
+    h = arr.shape[1]
+    w = arr.shape[2]
+    arr = np.ascontiguousarray(arr.flat, dtype=np.float32) / 255.0
+    data = arr.ctypes.data_as(POINTER(c_float))
+    im = IMAGE(w,h,c,data)
+    return im, arr
+
 def classify(net, meta, im):
     out = predict_image(net, im)
     res = []
@@ -206,6 +218,9 @@
     """
     #pylint: disable= C0321
     im = load_image(image, 0, 0)
+    #import scipy.misc
+    #sci_image = scipy.misc.imread(image)
+    #im, arr = array_to_image(sci_image)		# you should comment line below: free_image(im)
     if debug: print("Loaded image")
     num = c_int(0)
     if debug: print("Assigned num")
@@ -253,7 +268,7 @@
 metaMain = None
 altNames = None
 
-def performDetect(imagePath="data/dog.jpg", thresh= 0.25, configPath = "./yolov3.cfg", weightPath = "yolov3.weights", metaPath= "./data/coco.data", showImage= True, makeImageOnly = False, initOnly= False):
+def performDetect(imagePath="data/dog.jpg", thresh= 0.25, configPath = "./cfg/yolov3.cfg", weightPath = "yolov3.weights", metaPath= "./data/coco.data", showImage= True, makeImageOnly = False, initOnly= False):
     """
     Convenience function to handle the detection and returns of objects.
 

--
Gitblit v1.10.0