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); }
/// <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))); }
/// <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))); }
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]; } } }
/// <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))); }
/// <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))); }
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()); }
/// <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); }
public abstract int GetStride(InternalArray arrayType);
public abstract IntPtr GetBase(InternalArray arrayType);
public abstract InternalFormat GetFormat(InternalArray arrayType);
public bool Contains(T item) { return(InternalArray.Contains(item)); }
public T[] ToArray() { return(InternalArray.AsSpan().ToArray()); }
IEnumerator IEnumerable.GetEnumerator() { return(InternalArray.GetEnumerator()); }
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()); }
/// <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); }
public abstract int GetCount(InternalArray arrayType);