예제 #1
0
        public override object Process(object input)
        {
            var list = input as object[];

            var net = list.First(z => z is Nnet) as Nnet;

            var f1 = net.Nodes.FirstOrDefault(z => !z.IsInput);


            var           rets3 = net.OutputDatas[f1.Name] as float[];
            InternalArray arr   = new InternalArray(f1.Dims);

            arr.Data = rets3.Select(z => (double)z).ToArray();


            Mat mat = new Mat(f1.Dims[2],
                              f1.Dims[3], MatType.CV_8UC1,
                              arr.Data.Select(z => (byte)(z * 255)).ToArray());

            Cv2.ApplyColorMap(mat, mat, ColormapTypes.Magma);
            mat = mat.Resize(net.lastReadedMat.Size());
            if (StackWithSourceImage)
            {
                Cv2.HConcat(net.lastReadedMat, mat, mat);
            }

            LastMat = mat;
            Pbox.Invoke((Action)(() =>
            {
                Pbox.Image = BitmapConverter.ToBitmap(mat);
            }));

            return(mat);
        }
예제 #2
0
        /// <summary>
        ///     Return a casted <see cref="UnmanagedStorage"/> to a specific dtype only if necessary
        /// </summary>
        /// <param name="typeCode">The dtype to convert to</param>
        /// <returns>A copy of this <see cref="UnmanagedStorage"/> casted to a specific dtype.</returns>
        /// <remarks>Copies only if dtypes does not match <paramref name="typeCode"/></remarks>
        public UnmanagedStorage CastIfNecessary(NPTypeCode typeCode)
        {
            if (_shape.IsEmpty || _typecode == typeCode)
            {
                return(this);
            }

            //this also handles slices
            return(new UnmanagedStorage((IArraySlice)InternalArray.CastTo(typeCode), _shape.Clone(true, true, true)));
        }
예제 #3
0
        /// <summary>
        ///     Return a casted <see cref="UnmanagedStorage"/> to a specific dtype only if necessary.
        /// </summary>
        /// <typeparam name="T">The dtype to convert to</typeparam>
        /// <returns>A copy of this <see cref="UnmanagedStorage"/> casted to a specific dtype.</returns>
        /// <remarks>Copies only if dtypes does not match <typeparamref name="T"/></remarks>
        public UnmanagedStorage CastIfNecessary <T>() where T : unmanaged
        {
            if (_shape.IsEmpty || _dtype == typeof(T))
            {
                return(this);
            }

            //this also handles slices
            return(new UnmanagedStorage((ArraySlice <T>)InternalArray.CastTo <T>(), _shape.Clone(true, true, true)));
        }
예제 #4
0
파일: IntList.cs 프로젝트: kwende/FastList
        protected override void CopyBuffers(IntPtr source, IntPtr destination, int numberOfElements)
        {
            unsafe
            {
                int *currentPointer = (int *)InternalArray.ToPointer();
                int *newPointer     = (int *)destination.ToPointer();

                for (int c = 0; c < numberOfElements; c++)
                {
                    newPointer[c] = currentPointer[c];
                }
            }
        }
예제 #5
0
        /// <summary>
        ///     Return a casted <see cref="UnmanagedStorage"/> to a specific dtype.
        /// </summary>
        /// <param name="typeCode">The dtype to convert to</param>
        /// <returns>A copy of this <see cref="UnmanagedStorage"/> casted to a specific dtype.</returns>
        /// <remarks>Always copies, If dtype==typeof(T) then a <see cref="Clone"/> is returned.</remarks>
        public UnmanagedStorage Cast(NPTypeCode typeCode)
        {
            if (Shape.IsEmpty)
            {
                return(new UnmanagedStorage(typeCode));
            }

            if (_typecode == typeCode)
            {
                return(Clone());
            }

            //this also handles slices
            return(new UnmanagedStorage((IArraySlice)InternalArray.CastTo(typeCode), Shape.Clone(true, true)));
        }
예제 #6
0
        /// <summary>
        ///     Return a casted <see cref="UnmanagedStorage"/> to a specific dtype.
        /// </summary>
        /// <typeparam name="T">The dtype to convert to</typeparam>
        /// <returns>A copy of this <see cref="UnmanagedStorage"/> casted to a specific dtype.</returns>
        /// <remarks>Always copies, If dtype==typeof(T) then a <see cref="Clone"/> is returned.</remarks>
        public UnmanagedStorage Cast <T>() where T : unmanaged
        {
            if (Shape.IsEmpty)
            {
                return(new UnmanagedStorage(typeof(T)));
            }

            if (_dtype == typeof(T))
            {
                return(Clone());
            }

            //this also handles slices
            return(new UnmanagedStorage((ArraySlice <T>)InternalArray.CastTo <T>(), Shape.Clone(true, true)));
        }
예제 #7
0
        public static KeypointsDetectionInfo[] Decode(Nnet net, int w, int h, double threshold, string[] allowedClasses = null)
        {
            List <KeypointsDetectionInfo> ret = new List <KeypointsDetectionInfo>();
            var inp = net.Nodes.First(z => z.IsInput);
            var f1  = net.Nodes.FirstOrDefault(z => z.Dims.Last() == 3);
            var snd = net.Nodes.FirstOrDefault(z => z.Dims.Length == 1 && z.ElementType == typeof(float));

            if (f1 == null)
            {
                return(null);
            }

            var           rets1  = net.OutputDatas[f1.Name] as float[];
            var           scores = net.OutputDatas[snd.Name] as float[];
            InternalArray ar     = new InternalArray(f1.Dims);

            ar.Data = new double[rets1.Length];
            for (int i = 0; i < rets1.Length; i++)
            {
                ar.Data[i] = rets1[i];
            }

            int cnt = scores.Length;

            for (int i = 0; i < cnt; i++)
            {
                if (scores[i] < 0.9)
                {
                    continue;
                }
                var kp = new KeypointsDetectionInfo();
                ret.Add(kp);
                var            sub = ar.Get2DImageFrom3DArray(i);
                List <Point2f> pp  = new List <Point2f>();
                for (int j = 0; j < sub.Shape[0]; j++)
                {
                    pp.Add(new Point2f((float)(sub.Get2D(j, 0) / inp.Dims[3] * w), (float)(sub.Get2D(j, 1) / inp.Dims[2] * h)));
                }
                kp.Points = pp.ToArray();
            }
            return(ret.ToArray());
        }
예제 #8
0
        /// <summary>
        ///     Clone internal storage and get reference to it
        /// </summary>
        /// <returns>reference to cloned storage as System.Array</returns>
        public IArraySlice CloneData()
        {
            //Incase shape is not sliced, we can copy the internal buffer.
            if (!_shape.IsSliced && !_shape.IsBroadcasted)
            {
                return(InternalArray.Clone());
            }

            if (_shape.IsScalar)
            {
                return(ArraySlice.Scalar(GetValue(0), _typecode));
            }

            //Linear copy of all the sliced items.

            var ret = ArraySlice.Allocate(InternalArray.TypeCode, _shape.size, false);

            MultiIterator.Assign(new UnmanagedStorage(ret, _shape.Clean()), this);

            return(ret);
        }
예제 #9
0
 public abstract int GetStride(InternalArray arrayType);
예제 #10
0
 public abstract IntPtr GetBase(InternalArray arrayType);
예제 #11
0
 public abstract InternalFormat GetFormat(InternalArray arrayType);
예제 #12
0
 public bool Contains(T item)
 {
     return(InternalArray.Contains(item));
 }
예제 #13
0
 public T[] ToArray()
 {
     return(InternalArray.AsSpan().ToArray());
 }
예제 #14
0
 IEnumerator IEnumerable.GetEnumerator()
 {
     return(InternalArray.GetEnumerator());
 }
예제 #15
0
        public SegmentationDetectionInfo[] Decode(Nnet net, int w, int h, string[] allowedClasses = null)
        {
            List <SegmentationDetectionInfo> ret = new List <SegmentationDetectionInfo>();
            var inp    = net.Nodes.First(z => z.IsInput);
            var f1     = net.Nodes.FirstOrDefault(z => z.Dims.Last() == inp.Dims.Last());
            var snd    = net.Nodes.FirstOrDefault(z => z.Dims.Length == 1 && z.ElementType == typeof(float));
            var labels = net.Nodes.FirstOrDefault(z => z.Dims.Length == 1 && z.ElementType != typeof(float));
            var boxes  = net.Nodes.FirstOrDefault(z => z.Dims.Last() == 4);

            if (f1 == null)
            {
                return(null);
            }
            var nms = Helpers.ReadResource("coco.2.names").Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).ToArray();


            var           rets1  = net.OutputDatas[f1.Name] as float[];
            var           labls  = net.OutputDatas[labels.Name] as Int64[];
            var           bxs    = net.OutputDatas[boxes.Name] as float[];
            var           scores = net.OutputDatas[snd.Name] as float[];
            InternalArray ar     = new InternalArray(f1.Dims);

            ar.Data = new double[rets1.Length];

            for (int i = 0; i < rets1.Length; i++)
            {
                ar.Data[i] = rets1[i];

                if (rets1[i] > MaskThreshold)
                {
                    ar.Data[i] = 1;
                }
                else
                {
                    ar.Data[i] = 0;
                }
            }

            int cnt = scores.Length;

            for (int i = 0; i < cnt; i++)
            {
                if (scores[i] < Threshold)
                {
                    continue;
                }

                var kp = new SegmentationDetectionInfo();

                kp.Class = (int)(labls[i]);
                kp.Conf  = scores[i];
                if (labls[i] < nms.Length)
                {
                    kp.Label = nms[labls[i]];
                }
                else
                {
                    kp.Label = "(unknown)";
                }
                if (AllowedClasses.Count != 0 && !AllowedClasses.Contains(kp.Label))
                {
                    continue;
                }
                ret.Add(kp);
                double fx   = 1f / 900 * w;
                double fy   = 1f / 600 * h;
                Rect   rect = new Rect((int)(bxs[i * 4] * fx), (int)(bxs[i * 4 + 1] * fy), (int)((bxs[i * 4 + 2] - bxs[i * 4]) * fx), (int)((bxs[i * 4 + 3] - bxs[i * 4 + 1]) * fy));
                kp.Rect = rect;
                var    sub = ar.Get3DImageFrom4DArray(i);
                byte[] arr = new byte[sub.Data.Length];
                for (int j = 0; j < sub.Data.Length; j++)
                {
                    arr[j] = (byte)sub.Data[j];
                }
                var cnt2 = arr.Count(z => z == 1);
                if (cnt2 > 0)
                {
                }
                Mat mat = new Mat(600, 900, MatType.CV_8UC1, arr);
                kp.Mask = mat;
                //mat.SaveImage("test1.jpg");
            }
            return(ret.ToArray());
        }
예제 #16
0
 /// <summary>
 ///     Performs a set of index without calling <see cref="Shape.TransformOffset(int)"/>.
 /// </summary>
 public void SetAtIndexUnsafe(ValueType value, int index)
 {
     InternalArray.SetIndex(index, value);
 }
예제 #17
0
 public abstract int GetCount(InternalArray arrayType);