Пример #1
0
        private static void extract_voxel(string lfile, string rfile, string prefix)
        {
            int          w     = 1920;
            int          h     = 1080;
            int          shift = 0;
            int          count = 0;
            VideoCapture lcap  = new VideoCapture(lfile);
            VideoCapture rcap  = new VideoCapture(rfile);

            while (true)
            {
                Image l = LoadArgs.get_image_from_stream(lcap);
                Image r = LoadArgs.get_image_from_stream(rcap);
                if (l.W == 0 || r.W == 0)
                {
                    break;
                }
                if (count % 100 == 0)
                {
                    shift = LoadArgs.best_3d_shift_r(l, r, -l.H / 100, l.H / 100);
                    Console.Write($"{shift}\n");
                }
                Image  ls   = LoadArgs.crop_image(l, (l.W - w) / 2, (l.H - h) / 2, w, h);
                Image  rs   = LoadArgs.crop_image(r, 105 + (r.W - w) / 2, (r.H - h) / 2 + shift, w, h);
                string buff = $"{prefix}_{count:05}_l";
                LoadArgs.save_image(ls, buff);
                buff = $"{prefix}_{count:05}_r";
                LoadArgs.save_image(rs, buff);
                ++count;
            }
        }
Пример #2
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;
            }
        }
Пример #3
0
        private static void test_super(string cfgfile, string weightfile, string filename)
        {
            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 = "";

            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);
                Network.resize_network(net, im.W, im.H);
                Console.Write($"%d %d\n", im.W, im.H);

                float[] x = im.Data;
                sw.Start();
                Network.network_predict(net, x);
                Image outi = Network.get_network_image(net);
                sw.Stop();
                Console.Write($"%s: Predicted ini %f seconds.\n", input, sw.Elapsed.Seconds);
                LoadArgs.save_image(outi, "outf");

                if (!string.IsNullOrEmpty(filename))
                {
                    break;
                }
            }
        }
Пример #4
0
        private static Image save_reconstruction(Network net, Image init, float[] feat, string name, int i)
        {
            Image recon;

            if (init != null)
            {
                recon = new Image(init);
            }
            else
            {
                recon = LoadArgs.make_random_image(net.W, net.H, 3);
            }

            Image update = new Image(net.W, net.H, 3);

            Nightmare.reconstruct_picture(net, feat, recon, update, .01f, .9f, .1f, 2, 50);

            string buff = $"{name}{i}";

            LoadArgs.save_image(recon, buff);
            return(recon);
        }
Пример #5
0
        public static void run_nightmare(List <string> args)
        {
            if (args.Count < 4)
            {
                Console.Error.Write($"usage: %s %s [cfg] [weights] [Image] [Layer] [options! (optional)]\n", args[0], args[1]);
                return;
            }

            string cfg      = args[2];
            string weights  = args[3];
            string input    = args[4];
            int    maxLayer = int.Parse(args[5]);

            int    range       = Utils.find_int_arg(args, "-range", 1);
            bool   norm        = Utils.find_int_arg(args, "-norm", 1) != 0;
            int    rounds      = Utils.find_int_arg(args, "-rounds", 1);
            int    iters       = Utils.find_int_arg(args, "-iters", 10);
            int    octaves     = Utils.find_int_arg(args, "-octaves", 4);
            float  zoom        = Utils.find_int_arg(args, "-zoom", 1);
            float  rate        = Utils.find_int_arg(args, "-rate", .04f);
            float  thresh      = Utils.find_int_arg(args, "-thresh", 1);
            float  rotate      = Utils.find_int_arg(args, "-rotate", 0);
            float  momentum    = Utils.find_int_arg(args, "-momentum", .9f);
            float  lambda      = Utils.find_int_arg(args, "-lambda", .01f);
            string prefix      = Utils.find_int_arg(args, "-prefix", "");
            bool   reconstruct = Utils.find_arg(args, "-reconstruct");
            int    smoothSize  = Utils.find_int_arg(args, "-smooth", 1);

            Network net = Parser.parse_network_cfg(cfg);

            Parser.load_weights(net, weights);
            string cfgbase = Utils.Basecfg(cfg);
            string imbase  = Utils.Basecfg(input);

            Network.set_batch_network(net, 1);
            Image im = LoadArgs.load_image_color(input, 0, 0);

            float[] features = new float[0];
            Image   update   = null;

            if (reconstruct)
            {
                Network.resize_network(net, im.W, im.H);

                int zz = 0;
                Network.network_predict(net, im.Data);
                Image outIm = Network.get_network_image(net);
                Image crop  = LoadArgs.crop_image(outIm, zz, zz, outIm.W - 2 * zz, outIm.H - 2 * zz);
                Image fIm   = LoadArgs.resize_image(crop, outIm.W, outIm.H);
                Console.Write($"%d features\n", outIm.W * outIm.H * outIm.C);


                im       = LoadArgs.resize_image(im, im.W, im.H);
                fIm      = LoadArgs.resize_image(fIm, fIm.W, fIm.H);
                features = fIm.Data;

                int i;
                for (i = 0; i < 14 * 14 * 512; ++i)
                {
                    features[i] += Utils.rand_uniform(-.19f, .19f);
                }

                im     = LoadArgs.make_random_image(im.W, im.H, im.C);
                update = new Image(im.W, im.H, im.C);
            }

            int e;
            int n;

            for (e = 0; e < rounds; ++e)
            {
                Console.Error.Write($"Iteration: ");
                for (n = 0; n < iters; ++n)
                {
                    Console.Error.Write($"%d, ", n);
                    if (reconstruct)
                    {
                        reconstruct_picture(net, features, im, update, rate, momentum, lambda, smoothSize, 1);
                        //if ((n+1)%30 == 0) rate *= .5;
                        LoadArgs.show_image(im, "reconstruction");
                        CvInvoke.WaitKey(10);
                    }
                    else
                    {
                        int layer  = maxLayer + Utils.Rand.Next() % range - range / 2;
                        int octave = Utils.Rand.Next() % octaves;
                        optimize_picture(net, im, layer, 1 / (float)Math.Pow(1.33333333, octave), rate, thresh, norm);
                    }
                }
                Console.Error.Write($"done\n");
                string buff;
                if (!string.IsNullOrEmpty(prefix))
                {
                    buff = $"{prefix}_{imbase}_{cfgbase}_{maxLayer}_{e:06}%s/%s_%s_%d_%06d";
                }
                else
                {
                    buff = $"{imbase}_{cfgbase}_{maxLayer}_{e:06}";
                }
                Console.Write($"%d %s\n", e, buff);
                LoadArgs.save_image(im, buff);
                //LoadArgs.show_image(im, buff);
                //CvInvoke.WaitKey();

                if (rotate != 0)
                {
                    Image rot = LoadArgs.rotate_image(im, rotate);
                    im = rot;
                }
                Image crop    = LoadArgs.crop_image(im, (int)(im.W * (1f - zoom) / 2f), (int)(im.H * (1f - zoom) / 2f), (int)(im.W * zoom), (int)(im.H * zoom));
                Image resized = LoadArgs.resize_image(crop, im.W, im.H);
                im = resized;
            }
        }
Пример #6
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;
        }
Пример #7
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;
                }
            }
        }