Пример #1
0
        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;
            }
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
                }
            }
        }