Open BahaaMansour opened 5 years ago
Im trying to run my yolov3 model that i trained earlier in darknet_vid.py .
Did you trained your model by using darknet_vid.py
or by using ./darknet detector train ...
?
I compiled yolo_cpp_dll and i keep on getting this error. Can you tell me what to change/fix?
Did you compile: build/darknet/yolo_cpp_dll.sln
?
And do you run this Python file? build/darknet/x64/darknet.py
Im trying to run my yolov3 model that i trained earlier in darknet_vid.py .
Did you trained your model by using
darknet_vid.py
or by using./darknet detector train ...
? i trained my model using**darknet.exe detector train data/Thesis.data cfg/yolov3-tiny_Thesis.cfg yolov3-tiny_Thesis_last.weights -dont_show
**Did you compile:
build/darknet/yolo_cpp_dll.sln
? Yes i compiled it. i have yolo_cpp_dll.dll appeared in my darknet/x64 And do you run this Python file?build/darknet/x64/darknet.py
yes, this error appears when i run build/darknet/x64/darknet.py
@AlexeyAB
What i want is to be able to use my
trained ( Yolov3-tiny-last.weights) with the data.exe and cfg to be able to edit and change the box styles and Add lines to be able to count objects. just like in the following
picture
I would really appreciate it if someone can help me
@BahaaMansour
Try to set full path to your yolo_cpp_dll.dll
library here
F.e. use winGPUdll = "D:\\Darknet2\\darknet\\build\\darknet\\x64\\yolo_cpp_dll.dll"
instead of: https://github.com/AlexeyAB/darknet/blob/5343aa423563c107e0071b1427ad5defc27b56d2/build/darknet/x64/darknet.py#L83
Or just copy yolo_cpp_dll.dll
to the your work directory.
""" Python 3 wrapper for identifying objects in images
Requires DLL compilation
Both the GPU and no-GPU version should be compiled; the no-GPU version should be renamed "yolo_cpp_dll_nogpu.dll".
On a GPU system, you can force CPU evaluation by any of:
To use, either run performDetect() after import, or modify the end of this file.
See the docstring of performDetect() for parameters.
Directly viewing or returning bounding-boxed images requires scikit-image to be installed (pip install scikit-image
)
Original *nix 2.7: https://github.com/pjreddie/darknet/blob/0f110834f4e18b30d5f101bf8f1724c34b7b83db/python/darknet.py Windows Python 2.7 version: https://github.com/AlexeyAB/darknet/blob/fc496d52bf22a0bb257300d3c79be9cd80e722cb/build/darknet/x64/darknet.py
@author: Philip Kahn @date: 20180503 """
from ctypes import * import math import random import os
def sample(probs): s = sum(probs) probs = [a/s for a in probs] r = random.uniform(0, 1) for i in range(len(probs)): r = r - probs[i] if r <= 0: return i return len(probs)-1
def c_array(ctype, values): arr = (ctype*len(values))() arr[:] = values return arr
class BOX(Structure): fields = [("x", c_float), ("y", c_float), ("w", c_float), ("h", c_float)]
class DETECTION(Structure): fields = [("bbox", BOX), ("classes", c_int), ("prob", POINTER(c_float)), ("mask", POINTER(c_float)), ("objectness", c_float), ("sort_class", c_int)]
class IMAGE(Structure): fields = [("w", c_int), ("h", c_int), ("c", c_int), ("data", POINTER(c_float))]
class METADATA(Structure): fields = [("classes", c_int), ("names", POINTER(c_char_p))]
hasGPU = True if os.name == "nt": cwd = os.path.dirname(file) os.environ['PATH'] = cwd + ';' + os.environ['PATH'] winGPUdll = os.path.join(cwd, "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\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: try: tmp = os.environ["FORCE_CPU"].lower() if tmp in ["1", "true", "yes", "on"]: raise ValueError("ForceCPU") else: print("Flag value '"+tmp+"' not forcing CPU mode") except KeyError:
if 'CUDA_VISIBLE_DEVICES' in envKeys:
if int(os.environ['CUDA_VISIBLE_DEVICES']) < 0:
raise ValueError("ForceCPU")
try:
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")
if not os.path.exists(winGPUdll):
raise ValueError("NoDLL")
lib = CDLL(winGPUdll, RTLD_GLOBAL)
except (KeyError, ValueError):
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] lib.network_width.restype = c_int lib.network_height.argtypes = [c_void_p] lib.network_height.restype = c_int
predict = lib.network_predict predict.argtypes = [c_void_p, POINTER(c_float)] predict.restype = POINTER(c_float)
if hasGPU: set_gpu = lib.cuda_set_device set_gpu.argtypes = [c_int]
make_image = lib.make_image make_image.argtypes = [c_int, c_int, c_int] make_image.restype = IMAGE
get_network_boxes = lib.get_network_boxes get_network_boxes.argtypes = [c_void_p, c_int, c_int, c_float, c_float, POINTER(c_int), c_int, POINTER(c_int), c_int] get_network_boxes.restype = POINTER(DETECTION)
make_network_boxes = lib.make_network_boxes make_network_boxes.argtypes = [c_void_p] make_network_boxes.restype = POINTER(DETECTION)
free_detections = lib.free_detections free_detections.argtypes = [POINTER(DETECTION), c_int]
free_ptrs = lib.free_ptrs free_ptrs.argtypes = [POINTER(c_void_p), c_int]
network_predict = lib.network_predict network_predict.argtypes = [c_void_p, POINTER(c_float)]
reset_rnn = lib.reset_rnn reset_rnn.argtypes = [c_void_p]
load_net = lib.load_network 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]
do_nms_sort = lib.do_nms_sort do_nms_sort.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
free_image = lib.free_image free_image.argtypes = [IMAGE]
letterbox_image = lib.letterbox_image letterbox_image.argtypes = [IMAGE, c_int, c_int] letterbox_image.restype = IMAGE
load_meta = lib.get_metadata lib.get_metadata.argtypes = [c_char_p] lib.get_metadata.restype = METADATA
load_image = lib.load_image_color load_image.argtypes = [c_char_p, c_int, c_int] load_image.restype = IMAGE
rgbgr_image = lib.rgbgr_image rgbgr_image.argtypes = [IMAGE]
predict_image = lib.network_predict_image predict_image.argtypes = [c_void_p, IMAGE] predict_image.restype = POINTER(c_float)
def array_to_image(arr): import numpy as np
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 = [] for i in range(meta.classes): if altNames is None: nameTag = meta.names[i] else: nameTag = altNames[i] res.append((nameTag, out[i])) res = sorted(res, key=lambda x: -x[1]) return res
def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45, debug= False): """ Performs the meat of the detection """
im = load_image(image, 0, 0)
#import cv2
#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)
if debug: print("Loaded image")
num = c_int(0)
if debug: print("Assigned num")
pnum = pointer(num)
if debug: print("Assigned pnum")
predict_image(net, im)
if debug: print("did prediction")
#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")
if nms:
do_nms_sort(dets, num, meta.classes, nms)
if debug: print("did sort")
res = []
if debug: print("about to range")
for j in range(num):
if debug: print("Ranging on "+str(j)+" of "+str(num))
if debug: print("Classes: "+str(meta), meta.classes, meta.names)
for i in range(meta.classes):
if debug: print("Class-ranging on "+str(i)+" of "+str(meta.classes)+"= "+str(dets[j].prob[i]))
if dets[j].prob[i] > 0:
b = dets[j].bbox
if altNames is None:
nameTag = meta.names[i]
else:
nameTag = altNames[i]
if debug:
print("Got bbox", b)
print(nameTag)
print(dets[j].prob[i])
print((b.x, b.y, b.w, b.h))
res.append((nameTag, dets[j].prob[i], (b.x, b.y, b.w, b.h)))
if debug: print("did range")
res = sorted(res, key=lambda x: -x[1])
if debug: print("did sort")
free_image(im)
if debug: print("freed image")
free_detections(dets, num)
if debug: print("freed detections")
return res
netMain = None metaMain = None altNames = None
def performDetect(imagePath="data/dog.jpg", thresh= 0.25, configPath = "./cfg/yolov3.cfg", weightPath = "yolov3.weights", metaPath= "./cfg/coco.data", showImage= True, makeImageOnly = False, initOnly= False): """ Convenience function to handle the detection and returns of objects.
Displaying bounding boxes requires libraries scikit-image and numpy
Parameters
----------------
imagePath: str
Path to the image to evaluate. Raises ValueError if not found
thresh: float (default= 0.25)
The detection threshold
configPath: str
Path to the configuration file. Raises ValueError if not found
weightPath: str
Path to the weights file. Raises ValueError if not found
metaPath: str
Path to the data file. Raises ValueError if not found
showImage: bool (default= True)
Compute (and show) bounding boxes. Changes return.
makeImageOnly: bool (default= False)
If showImage is True, this won't actually *show* the image, but will create the array and return it.
initOnly: bool (default= False)
Only initialize globals. Don't actually run a prediction.
Returns
----------------------
When showImage is False, list of tuples like
('obj_label', confidence, (bounding_box_x_px, bounding_box_y_px, bounding_box_width_px, bounding_box_height_px))
The X and Y coordinates are from the center of the bounding box. Subtract half the width or height to get the lower corner.
Otherwise, a dict with
{
"detections": as above
"image": a numpy array representing an image, compatible with scikit-image
"caption": an image caption
}
"""
# Import the global variables. This lets us instance Darknet once, then just call performDetect() again without instancing again
global metaMain, netMain, altNames #pylint: disable=W0603
assert 0 < thresh < 1, "Threshold should be a float between zero and one (non-inclusive)"
if not os.path.exists(configPath):
raise ValueError("Invalid config path `"+os.path.abspath(configPath)+"`")
if not os.path.exists(weightPath):
raise ValueError("Invalid weight path `"+os.path.abspath(weightPath)+"`")
if not os.path.exists(metaPath):
raise ValueError("Invalid data file path `"+os.path.abspath(metaPath)+"`")
if netMain is None:
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:
# In Python 3, the metafile default access craps out on Windows (but not Linux)
# Read the names file and create a list to feed to detect
try:
with open(metaPath) as metaFH:
metaContents = metaFH.read()
import re
match = re.search("names *= *(.*)$", metaContents, re.IGNORECASE | re.MULTILINE)
if match:
result = match.group(1)
else:
result = None
try:
if os.path.exists(result):
with open(result) as namesFH:
namesList = namesFH.read().strip().split("\n")
altNames = [x.strip() for x in namesList]
except TypeError:
pass
except Exception:
pass
if initOnly:
print("Initialized detector")
return None
if not os.path.exists(imagePath):
raise ValueError("Invalid image path `"+os.path.abspath(imagePath)+"`")
# Do the detection
#detections = detect(netMain, metaMain, imagePath, thresh) # if is used cv2.imread(image)
detections = detect(netMain, metaMain, imagePath.encode("ascii"), thresh)
if showImage:
try:
from skimage import io, draw
import numpy as np
image = io.imread(imagePath)
print("*** "+str(len(detections))+" Results, color coded by confidence ***")
imcaption = []
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)
if not makeImageOnly:
io.imshow(image)
io.show()
detections = {
"detections": detections,
"image": image,
"caption": "\n<br/>".join(imcaption)
}
except Exception as e:
print("Unable to show image: "+str(e))
return detections
if name == "main": print(performDetect())
Same issue again,
I didnt understand why do i keep on getting "%1 is not a valid Win32 application"
Dont use os.path.join(cwd,
And use \\
instead of \
Use
winGPUdll = "C:\\Users\\Bahaa\\Desktop\\Darknet_master\\darknet-master\\build\\darknet\\x64\\yolo_cpp_dll.dll"
instead of
winGPUdll = os.path.join(cwd, "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\yolo_cpp_dll.dll")
Dont use
os.path.join(cwd,
And use\\
instead of\
Use
winGPUdll = "C:\\Users\\Bahaa\\Desktop\\Darknet_master\\darknet-master\\build\\darknet\\x64\\yolo_cpp_dll.dll"
instead of
winGPUdll = os.path.join(cwd, "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\yolo_cpp_dll.dll")
lib = CDLL("libdarknet.so", RTLD_GLOBAL) hasGPU = True if os.name == "nt": cwd = os.path.dirname(file) os.environ['PATH'] = cwd + ';' + os.environ['PATH'] winGPUdll = "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\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)
same error again on line 110.
Exception has occurred: OSError
[WinError 193] %1 is not a valid Win32 application
File "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\darknet.py", line 120, in "+winNoGPUdll+"
. Trying a GPU run anyway.")
@AlexeyAB thank you so much for replying to me btw i really appreciate it...
from ctypes import * import math import random import os import cv2 import numpy as np import time
def sample(probs): s = sum(probs) probs = [a/s for a in probs] r = random.uniform(0, 1) for i in range(len(probs)): r = r - probs[i] if r <= 0: return i return len(probs)-1
def c_array(ctype, values): arr = (ctype*len(values))() arr[:] = values return arr
class BOX(Structure): fields = [("x", c_float), ("y", c_float), ("w", c_float), ("h", c_float)]
class DETECTION(Structure): fields = [("bbox", BOX), ("classes", c_int), ("prob", POINTER(c_float)), ("mask", POINTER(c_float)), ("objectness", c_float), ("sort_class", c_int)]
class IMAGE(Structure): fields = [("w", c_int), ("h", c_int), ("c", c_int), ("data", POINTER(c_float))]
class METADATA(Structure): fields = [("classes", c_int), ("names", POINTER(c_char_p))]
hasGPU = True
lib = CDLL("C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\yolo_cpp_dll.dll") lib.network_width.argtypes = [c_void_p] lib.network_width.restype = c_int lib.network_height.argtypes = [c_void_p] lib.network_height.restype = c_int
predict = lib.network_predict predict.argtypes = [c_void_p, POINTER(c_float)] predict.restype = POINTER(c_float)
if hasGPU: set_gpu = lib.cuda_set_device set_gpu.argtypes = [c_int]
make_image = lib.make_image make_image.argtypes = [c_int, c_int, c_int] make_image.restype = IMAGE
get_network_boxes = lib.get_network_boxes get_network_boxes.argtypes = \ [c_void_p, c_int, c_int, c_float, c_float, POINTER( c_int), c_int, POINTER(c_int), c_int] get_network_boxes.restype = POINTER(DETECTION)
make_network_boxes = lib.make_network_boxes make_network_boxes.argtypes = [c_void_p] make_network_boxes.restype = POINTER(DETECTION)
free_detections = lib.free_detections free_detections.argtypes = [POINTER(DETECTION), c_int]
free_ptrs = lib.free_ptrs free_ptrs.argtypes = [POINTER(c_void_p), c_int]
network_predict = lib.network_predict network_predict.argtypes = [c_void_p, POINTER(c_float)]
reset_rnn = lib.reset_rnn reset_rnn.argtypes = [c_void_p]
load_net = lib.load_network 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]
do_nms_sort = lib.do_nms_sort do_nms_sort.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
free_image = lib.free_image free_image.argtypes = [IMAGE]
letterbox_image = lib.letterbox_image letterbox_image.argtypes = [IMAGE, c_int, c_int] letterbox_image.restype = IMAGE
load_meta = lib.get_metadata lib.get_metadata.argtypes = [c_char_p] lib.get_metadata.restype = METADATA
load_image = lib.load_image_color load_image.argtypes = [c_char_p, c_int, c_int] load_image.restype = IMAGE
rgbgr_image = lib.rgbgr_image rgbgr_image.argtypes = [IMAGE]
predict_image = lib.network_predict_image predict_image.argtypes = [c_void_p, IMAGE] predict_image.restype = POINTER(c_float)
def array_to_image(arr): import numpy as np 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 = [] for i in range(meta.classes): if altNames is None: nameTag = meta.names[i] else: nameTag = altNames[i] res.append((nameTag, out[i])) res = sorted(res, key=lambda x: -x[1]) return res
def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45, debug=False): im, arr = array_to_image(image) if debug: print("Loaded image") num = c_int(0) if debug: print("Assigned num") pnum = pointer(num) if debug: print("Assigned pnum") predict_image(net, im) if debug: print("did prediction")
# net, image.shape[1], image.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")
if nms:
do_nms_sort(dets, num, meta.classes, nms)
if debug:
print("did sort")
res = []
if debug:
print("about to range")
for j in range(num):
if debug:
print("Ranging on "+str(j)+" of "+str(num))
if debug:
print("Classes: "+str(meta), meta.classes, meta.names)
for i in range(meta.classes):
if debug:
print("Class-ranging on "+str(i)+" of " +
str(meta.classes)+"= "+str(dets[j].prob[i]))
if dets[j].prob[i] > 0:
b = dets[j].bbox
if altNames is None:
nameTag = meta.names[i]
else:
nameTag = altNames[i]
if debug:
print("Got bbox", b)
print(nameTag)
print(dets[j].prob[i])
print((b.x, b.y, b.w, b.h))
res.append((nameTag, dets[j].prob[i], (b.x, b.y, b.w, b.h)))
if debug:
print("did range")
res = sorted(res, key=lambda x: -x[1])
if debug:
print("did sort")
# free_image(im)
if debug:
print("freed image")
free_detections(dets, num)
if debug:
print("freed detections")
return res
def convertBack(x, y, w, h): xmin = int(round(x - (w / 2))) xmax = int(round(x + (w / 2))) ymin = int(round(y - (h / 2))) ymax = int(round(y + (h / 2))) return xmin, ymin, xmax, ymax
def cvDrawBoxes(detections, img): for detection in detections: x, y, w, h = detection[2][0],\ detection[2][1],\ detection[2][2],\ detection[2][3] xmin, ymin, xmax, ymax = convertBack( float(x), float(y), float(w), float(h)) pt1 = (xmin, ymin) pt2 = (xmax, ymax) cv2.rectangle(img, pt1, pt2, (0, 255, 0), 2) cv2.putText(img, detection[0].decode() + " [" + str(round(detection[1] * 100, 2)) + "]", (pt1[0], pt1[1] + 20), cv2.FONT_HERSHEY_SIMPLEX, 1, [0, 255, 0], 4) return img
netMain = None metaMain = None altNames = None
def YOLO():
global metaMain, netMain, altNames
configPath = "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\cfg\yolov3-tiny_Thesis.cfg"
weightPath = "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\yolov3-tiny_Thesis_last.weights"
metaPath = "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\data\Thesis.data"
if not os.path.exists(configPath):
raise ValueError("Invalid config path " + os.path.abspath(configPath)+"
")
if not os.path.exists(weightPath):
raise ValueError("Invalid weight path " + os.path.abspath(weightPath)+"
")
if not os.path.exists(metaPath):
raise ValueError("Invalid data file path " + os.path.abspath(metaPath)+"
")
if netMain is None:
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:
try:
with open(metaPath) as metaFH:
metaContents = metaFH.read()
import re
match = re.search("names = (.*)$", metaContents,
re.IGNORECASE | re.MULTILINE)
if match:
result = match.group(1)
else:
result = None
try:
if os.path.exists(result):
with open(result) as namesFH:
namesList = namesFH.read().strip().split("\n")
altNames = [x.strip() for x in namesList]
except TypeError:
pass
except Exception:
pass
cap = cv2.VideoCapture("C:\\Users\\Bahaa\\Desktop\\Darknet_master\\darknet-master\\build\\darknet\\x64\\0.mp4")
cap.set(3, 1280)
cap.set(4, 720)
out = cv2.VideoWriter(
"output.avi", cv2.VideoWriter_fourcc(*"MJPG"), 10.0,
(lib.network_width(netMain), lib.network_height(netMain)))
print("Starting the YOLO loop...")
while True:
prev_time = time.time()
ret, frame_read = cap.read()
frame_rgb = cv2.cvtColor(frame_read, cv2.COLOR_BGR2RGB)
frame_resized = cv2.resize(frame_rgb,
(lib.network_width(netMain),
lib.network_height(netMain)),
interpolation=cv2.INTER_LINEAR)
detections = detect(netMain, metaMain, frame_resized, thresh=0.25)
image = cvDrawBoxes(detections, frame_resized)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
print(1/(time.time()-prev_time))
cap.release()
out.release()
if name == "main": YOLO()
This is what happens when i run darknet_video.py
darknet.py
by mouse double click. Will it run successfully?yolo_console_cpp.sln
and run it. Will it run successfully?
- Try to run
darknet.py
by mouse double click. Will it run successfully?
and i got this result.
- Try to compile
yolo_console_cpp.sln
and run it. Will it run successfully?1. i built 'yolo_console_cpp.sln'
2.it compiled successfully
3. and yolo_console_dll
.exe ran successfully
@AlexeyAB My objective is to run darknet_video.py but it keeps on fail on running.
@AlexeyAB I'm having the same error also when executing darknet.py. I compiled both GPU and non GPU version and I already have them on my workspace directory. What could be the problem?
@BahaaMansour Hi,
@AlexeyAB My objective is to run darknet_video.py but it keeps on fail on running.
Try to run darknet_video.py
by using Python 2.7: https://www.python.org/downloads/release/python-2715/
Also you should have any test.mp4
videofile near with darknet_video.py
@BahaaMansour @OndoyManing
Also look at this file, may be you should install do pip install
for: numpy, sci and opencv
python-packages: https://github.com/AlexeyAB/darknet/blob/1b15e2f8df5794a8c81fdfafddb3863c9a1a9e16/build/darknet/x64/darknet_python.cmd#L1-L19
@AlexeyAB I installed all required packages, but still the same error on line 110 in darknet.py.
I had this issue and it turned out to be I had 32 bit python
it's not a darknet bug
has said by @blaine141 seems like you're launching python scripts with a 32-bit python interpreter. to check wich version of python is running try to look the output of "python --version" and it should give show "32-bit" somewhere.
In order to work you have to use a 64-bit python executable (you can download it from the python website)
Probably you're using a custom python installation (32-bit) and when testing by IDLE you're using a different version at 64-bit (maybe the one that came with Visual Studio). Update it by setting the right path into the environment variables. Remember that when you switch python version you have to switch pip too
Im trying to run my yolov3 model that i trained earlier in darknet_vid.py . I compiled yolo_cpp_dll and i keep on getting this error. Can you tell me what to change/fix?
from ctypes import * import math import random import os import cv2 import numpy as np import time
def sample(probs): s = sum(probs) probs = [a/s for a in probs] r = random.uniform(0, 1) for i in range(len(probs)): r = r - probs[i] if r <= 0: return i return len(probs)-1
def c_array(ctype, values): arr = (ctype*len(values))() arr[:] = values return arr
class BOX(Structure): fields = [("x", c_float), ("y", c_float), ("w", c_float), ("h", c_float)]
class DETECTION(Structure): fields = [("bbox", BOX), ("classes", c_int), ("prob", POINTER(c_float)), ("mask", POINTER(c_float)), ("objectness", c_float), ("sort_class", c_int)]
class IMAGE(Structure): fields = [("w", c_int), ("h", c_int), ("c", c_int), ("data", POINTER(c_float))]
class METADATA(Structure): fields = [("classes", c_int), ("names", POINTER(c_char_p))]
hasGPU = True
lib = CDLL("yolo_cpp_dll.dll", RTLD_GLOBAL) lib.network_width.argtypes = [c_void_p] lib.network_width.restype = c_int lib.network_height.argtypes = [c_void_p] lib.network_height.restype = c_int
predict = lib.network_predict predict.argtypes = [c_void_p, POINTER(c_float)] predict.restype = POINTER(c_float)
if hasGPU: set_gpu = lib.cuda_set_device set_gpu.argtypes = [c_int]
make_image = lib.make_image make_image.argtypes = [c_int, c_int, c_int] make_image.restype = IMAGE
get_network_boxes = lib.get_network_boxes get_network_boxes.argtypes = \ [c_void_p, c_int, c_int, c_float, c_float, POINTER( c_int), c_int, POINTER(c_int), c_int] get_network_boxes.restype = POINTER(DETECTION)
make_network_boxes = lib.make_network_boxes make_network_boxes.argtypes = [c_void_p] make_network_boxes.restype = POINTER(DETECTION)
free_detections = lib.free_detections free_detections.argtypes = [POINTER(DETECTION), c_int]
free_ptrs = lib.free_ptrs free_ptrs.argtypes = [POINTER(c_void_p), c_int]
network_predict = lib.network_predict network_predict.argtypes = [c_void_p, POINTER(c_float)]
reset_rnn = lib.reset_rnn reset_rnn.argtypes = [c_void_p]
load_net = lib.load_network 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]
do_nms_sort = lib.do_nms_sort do_nms_sort.argtypes = [POINTER(DETECTION), c_int, c_int, c_float]
free_image = lib.free_image free_image.argtypes = [IMAGE]
letterbox_image = lib.letterbox_image letterbox_image.argtypes = [IMAGE, c_int, c_int] letterbox_image.restype = IMAGE
load_meta = lib.get_metadata lib.get_metadata.argtypes = [c_char_p] lib.get_metadata.restype = METADATA
load_image = lib.load_image_color load_image.argtypes = [c_char_p, c_int, c_int] load_image.restype = IMAGE
rgbgr_image = lib.rgbgr_image rgbgr_image.argtypes = [IMAGE]
predict_image = lib.network_predict_image predict_image.argtypes = [c_void_p, IMAGE] predict_image.restype = POINTER(c_float)
def array_to_image(arr): import numpy as np 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 = [] for i in range(meta.classes): if altNames is None: nameTag = meta.names[i] else: nameTag = altNames[i] res.append((nameTag, out[i])) res = sorted(res, key=lambda x: -x[1]) return res
def detect(net, meta, image, thresh=.5, hier_thresh=.5, nms=.45, debug=False): im, arr = array_to_image(image) if debug: print("Loaded image") num = c_int(0) if debug: print("Assigned num") pnum = pointer(num) if debug: print("Assigned pnum") predict_image(net, im) if debug: print("did prediction")
dets = get_network_boxes(
def convertBack(x, y, w, h): xmin = int(round(x - (w / 2))) xmax = int(round(x + (w / 2))) ymin = int(round(y - (h / 2))) ymax = int(round(y + (h / 2))) return xmin, ymin, xmax, ymax
def cvDrawBoxes(detections, img): for detection in detections: x, y, w, h = detection[2][0],\ detection[2][1],\ detection[2][2],\ detection[2][3] xmin, ymin, xmax, ymax = convertBack( float(x), float(y), float(w), float(h)) pt1 = (xmin, ymin) pt2 = (xmax, ymax) cv2.rectangle(img, pt1, pt2, (0, 255, 0), 2) cv2.putText(img, detection[0].decode() + " [" + str(round(detection[1] * 100, 2)) + "]", (pt1[0], pt1[1] + 20), cv2.FONT_HERSHEY_SIMPLEX, 1, [0, 255, 0], 4) return img
netMain = None metaMain = None altNames = None
def YOLO(): global metaMain, netMain, altNames configPath = "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\cfg\yolov3-tiny_Thesis.cfg" weightPath = "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\yolov3-tiny_Thesis_last.weights" metaPath = "C:\Users\Bahaa\Desktop\Darknet_master\darknet-master\build\darknet\x64\data\Thesis.data" if not os.path.exists(configPath): raise ValueError("Invalid config path
" + os.path.abspath(configPath)+"
") if not os.path.exists(weightPath): raise ValueError("Invalid weight path" + os.path.abspath(weightPath)+"
") if not os.path.exists(metaPath): raise ValueError("Invalid data file path" + os.path.abspath(metaPath)+"
") if netMain is None: 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: try: with open(metaPath) as metaFH: metaContents = metaFH.read() import re match = re.search("names = (.*)$", metaContents, re.IGNORECASE | re.MULTILINE) if match: result = match.group(1) else: result = None try: if os.path.exists(result): with open(result) as namesFH: namesList = namesFH.read().strip().split("\n") altNames = [x.strip() for x in namesList] except TypeError: pass except Exception: passcap = cv2.VideoCapture(0)
if name == "main": YOLO()