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; }
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; }