private static void test_coco(string cfgfile, string weightfile, string filename, float thresh) { Image[][] alphabet = LoadArgs.load_alphabet(); Network net = Parser.parse_network_cfg(cfgfile); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Layer l = net.Layers[net.N - 1]; Network.set_batch_network(net, 1); Utils.Rand = new Random(2222222); float nms = .4f; var sw = new Stopwatch(); int j; Box[] boxes = new Box[l.Side * l.Side * l.N]; float[][] probs = new float[l.Side * l.Side * l.N][]; for (j = 0; j < l.Side * l.Side * l.N; ++j) probs[j] = new float[l.Classes]; while (true) { string input; if (!string.IsNullOrEmpty(filename)) { input = filename; } else { Console.Write($"Enter Image Path: "); input = Console.ReadLine(); if (string.IsNullOrEmpty(input)) return; input = input.TrimEnd(); } Image im = LoadArgs.load_image_color(input, 0, 0); Image sized = LoadArgs.resize_image(im, net.W, net.H); float[] x = sized.Data; sw.Reset(); sw.Start(); Network.network_predict(net, x); sw.Stop(); Console.Write($"%s: Predicted ini %f seconds.\n", input, sw.Elapsed.Seconds); l.get_detection_boxes( 1, 1, thresh, probs, boxes, false); if (nms != 0) Box.do_nms_sort(boxes, probs, l.Side * l.Side * l.N, l.Classes, nms); LoadArgs.draw_detections(im, l.Side * l.Side * l.N, thresh, boxes, probs, CocoClasses, alphabet, 80); LoadArgs.save_image(im, "prediction"); LoadArgs.show_image(im, "predictions"); CvInvoke.WaitKey(); CvInvoke.DestroyAllWindows(); if (!string.IsNullOrEmpty(filename)) break; } }
public static void DemoRun(string cfgfile, string weightfile, float thresh, int camIndex, string filename, string[] names, int classes, int frameSkip, string prefix) { //skip = frame_skip; Image[][] alphabet = LoadArgs.load_alphabet(); int delay = frameSkip; demoNames = names; demoAlphabet = alphabet; demoClasses = classes; demoThresh = thresh; Console.Write($"Demo\n"); net = Parser.parse_network_cfg(cfgfile); if (!string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Network.set_batch_network(net, 1); if (!string.IsNullOrEmpty(filename)) { Console.Write($"video file: %s\n", filename); } using (var capture = !string.IsNullOrEmpty(filename) ? new VideoCapture(filename) : new VideoCapture(camIndex)) { vidCap = capture; if (!vidCap.IsOpened) { Utils.Error("Couldn't connect to webcam.\n"); } Layer l = net.Layers[net.N - 1]; int j; avg = new float[l.Outputs]; for (j = 0; j < frames; ++j) { predictions[j] = new float[l.Outputs]; } for (j = 0; j < frames; ++j) { images[j] = new Image(1, 1, 3); } boxes = new Box[l.W * l.H * l.N]; probs = new float[l.W * l.H * l.N][]; for (j = 0; j < l.W * l.H * l.N; ++j) { probs[j] = new float[l.Classes]; } Thread fetchThread; Thread detectThread; fetch_in_thread(); det = inputImage; detS = inS; fetch_in_thread(); detect_in_thread(); disp = det; det = inputImage; detS = inS; for (j = 0; j < frames / 2; ++j) { fetch_in_thread(); detect_in_thread(); disp = det; det = inputImage; detS = inS; } int count = 0; var sw = new Stopwatch(); sw.Stop(); while (true) { ++count; fetchThread = new Thread(fetch_in_thread); detectThread = new Thread(detect_in_thread); fetchThread.Start(); detectThread.Start(); if (string.IsNullOrEmpty(prefix)) { LoadArgs.show_image(disp, "Demo"); int c = CvInvoke.WaitKey(1); if (c == 10) { if (frameSkip == 0) { frameSkip = 60; } else if (frameSkip == 4) { frameSkip = 0; } else if (frameSkip == 60) { frameSkip = 4; } else { frameSkip = 0; } } } else { var buff = $"{prefix}_{count:08}"; LoadArgs.save_image(disp, buff); } fetchThread.Join(); detectThread.Join(); if (delay == 0) { disp = det; } det = inputImage; detS = inS; --delay; if (delay < 0) { delay = frameSkip; sw.Stop(); float curr = 1f / sw.Elapsed.Seconds; fps = curr; sw.Reset(); sw.Start(); } } } vidCap = null; }
public static void test_detector(string datacfg, string cfgfile, string weightfile, string filename, float thresh) { var options = OptionList.read_data_cfg(datacfg); string nameList = OptionList.option_find_str(options, "names", "Data.Data/names.list"); string[] names = Data.Data.get_labels(nameList); Image[][] alphabet = LoadArgs.load_alphabet(); Network net = Parser.parse_network_cfg(cfgfile); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Network.set_batch_network(net, 1); Utils.Rand = new Random(2222222); var sw = new Stopwatch(); string input = ""; int j; float nms = .4f; while (true) { if (!string.IsNullOrEmpty(filename)) { input = filename; } else { Console.Write($"Enter Image Path: "); input = Console.ReadLine(); if (string.IsNullOrEmpty(input)) { return; } input = input.TrimEnd(); } Image im = LoadArgs.load_image_color(input, 0, 0); Image sized = LoadArgs.resize_image(im, net.W, net.H); Layer l = net.Layers[net.N - 1]; Box[] boxes = new Box[l.W * l.H * l.N]; float[][] probs = new float[l.W * l.H * l.N][]; for (j = 0; j < l.W * l.H * l.N; ++j) { probs[j] = new float[l.Classes]; } float[] x = sized.Data; sw.Start(); Network.network_predict(net, x); sw.Stop(); Console.Write($"%s: Predicted ini %f seconds.\n", input, sw.Elapsed.Seconds); Layer.get_region_boxes(l, 1, 1, thresh, probs, boxes, false, new int[0]); if (nms != 0) { Box.do_nms_sort(boxes, probs, l.W * l.H * l.N, l.Classes, nms); } LoadArgs.draw_detections(im, l.W * l.H * l.N, thresh, boxes, probs, names, alphabet, l.Classes); LoadArgs.save_image(im, "predictions"); LoadArgs.show_image(im, "predictions"); CvInvoke.WaitKey(); CvInvoke.DestroyAllWindows(); if (!string.IsNullOrEmpty(filename)) { break; } } }