| | |
| | | #lib = CDLL("darknet.so", RTLD_GLOBAL) |
| | | hasGPU = True |
| | | if os.name == "nt": |
| | | winGPUdll = "yolo_cpp_dll.dll" |
| | | winNoGPUdll = "yolo_cpp_dll_nogpu.dll" |
| | | cwd = os.path.dirname(__file__) |
| | | os.environ['PATH'] = cwd + ';' + os.environ['PATH'] |
| | | winGPUdll = os.path.join(cwd, "yolo_cpp_dll.dll") |
| | | winNoGPUdll = os.path.join(cwd, "yolo_cpp_dll_nogpu.dll") |
| | | envKeys = list() |
| | | for k, v in os.environ.items(): |
| | | envKeys.append(k) |
| | | try: |
| | | tmp = os.environ["CUDA_HOME"] |
| | | try: |
| | | tmp = os.environ["FORCE_CPU"].lower() |
| | | if tmp in ["1", "true", "yes", "on"]: |
| | |
| | | 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("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 = CDLL("./darknet.so", RTLD_GLOBAL) |
| | | lib.network_width.argtypes = [c_void_p] |
| | | lib.network_width.restype = c_int |
| | | lib.network_height.argtypes = [c_void_p] |
| | |
| | | load_net.argtypes = [c_char_p, c_char_p, c_int] |
| | | load_net.restype = c_void_p |
| | | |
| | | load_net_custom = lib.load_network_custom |
| | | load_net_custom.argtypes = [c_char_p, c_char_p, c_int, c_int] |
| | | load_net_custom.restype = c_void_p |
| | | |
| | | do_nms_obj = lib.do_nms_obj |
| | | do_nms_obj.argtypes = [POINTER(DETECTION), c_int, c_int, c_float] |
| | | |
| | |
| | | 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 = [] |
| | |
| | | """ |
| | | #pylint: disable= C0321 |
| | | im = load_image(image, 0, 0) |
| | | #import cv2 |
| | | #custom_image = cv2.imread(image) # use: detect(,,imagePath,) |
| | | #import scipy.misc |
| | | #custom_image = scipy.misc.imread(image) |
| | | #im, arr = array_to_image(custom_image) # you should comment line below: free_image(im) |
| | | if debug: print("Loaded image") |
| | | num = c_int(0) |
| | | if debug: print("Assigned num") |
| | |
| | | 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. |
| | | |
| | |
| | | if not os.path.exists(metaPath): |
| | | raise ValueError("Invalid data file path `"+os.path.abspath(metaPath)+"`") |
| | | if netMain is None: |
| | | netMain = load_net(configPath.encode("ascii"), weightPath.encode("ascii"), 0) |
| | | netMain = load_net_custom(configPath.encode("ascii"), weightPath.encode("ascii"), 0, 1) # batch size = 1 |
| | | if metaMain is None: |
| | | metaMain = load_meta(metaPath.encode("ascii")) |
| | | if altNames is None: |