public static Mutable BuildFromExamples(BuildPrototypeArgs arg) { Mutable result; result = arg.Model.Builder.BuildPrototype(arg); if (result != null) { result.Id = arg.Id; result.Model = arg.Model.Name; } return(result); }
public bool UpdatePtypes(List <AnnotatedNode> annotations, List <Ptype> newLib) { bool anyRemoved = RemoveDeletedAnnotations(annotations, ptypeData); bool needsUpdate = LoadDataFromAnnotations(annotations, ptypeData) || anyRemoved; Dictionary <string, Bitmap> images = new Dictionary <string, Bitmap>(); foreach (AnnotatedNode n in annotations) { if (!images.ContainsKey(n.ImageId)) { images.Add(n.ImageId, (Bitmap)n.Root["capturedpixels"]); } } List <BuildPrototypeArgs> buildargs = new List <BuildPrototypeArgs>(); List <Ptype.Mutable> ptypes = new List <Ptype.Mutable>(); foreach (PtypeMetadata data in ptypeData.Values) { if (data.NeedsUpdate) { List <Bitmap> positives = new List <Bitmap>(); List <Bitmap> negatives = new List <Bitmap>(); foreach (Example e in data.Examples) { Bitmap example = Bitmap.Crop(images[e.ImageId], e.Region); if (e.IsPositive) { positives.Add(example); } else { negatives.Add(example); } } Examples examples = new Examples(positives, negatives); BuildPrototypeArgs args = new BuildPrototypeArgs(examples, ModelInstances.Get(data.Ptype.Model), data.Ptype.Id); buildargs.Add(args); } else { ptypes.Add(data.Ptype); } } ptypes.AddRange(Ptype.BuildFromExamples(buildargs)); foreach (Ptype.Mutable ptype in ptypes) { PtypeMetadata data = ptypeData[ptype.Id]; data.Ptype.Features = ptype.Features; data.Ptype.Regions = ptype.Regions; data.Ptype.Model = ptype.Model; } SavePtypesToIntent(intent, ptypeData.Values); newLib.AddRange(Ptype.CreatePrototypeLibrary(ptypes)); return(needsUpdate); }