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;

		}
Beispiel #2
0
		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;
		}