private static void AddFeaturesToJArray(JArray array, PtypeMetadata data) { foreach (string key in data.Ptype.Features.Keys) { Bitmap feature = data.Ptype.Features[key]; JObject featureJson = new JObject(); BitmapToJson(featureJson, feature); featureJson.Add("name", key); array.Add(featureJson); } }
private static void AddRegionsToJArray(JArray array, PtypeMetadata data) { foreach (string key in data.Ptype.Regions.Keys) { Region region = data.Ptype.Regions[key]; JObject regionJson = new JObject(); BitmapToJson(regionJson, region.Bitmap); regionJson.Add("name", key); regionJson.Add("matchstrategy", region.MatchStrategy); array.Add(regionJson); } }
private static bool LoadDataFromAnnotations(List <AnnotatedNode> annotations, Dictionary <string, PtypeMetadata> ptypeData) { bool needsUpdate = false; foreach (AnnotatedNode a in annotations) { string id; JObject alldata = a.Data; JArray ptypes = alldata["ptypes"].Value <JArray>(); foreach (JObject dataJson in ptypes) { id = dataJson["ptypeId"].Value <string>(); PtypeMetadata data; if (ptypeData.ContainsKey(id)) { data = ptypeData[id]; } else { data = new PtypeMetadata(id); ptypeData.Add(id, data); data.NeedsUpdate = true; } bool isPos = dataJson["positive"].Value <bool>(); Example ex = new Example(a.Region, isPos, a.ImageId); if (!data.Examples.Contains(ex)) { data.Examples.Add(ex); data.NeedsUpdate = true; } string model = dataJson["model"].Value <string>(); if (data.Ptype.Model == null || !data.Ptype.Model.Equals(model)) { data.Ptype.Model = model; data.NeedsUpdate = true; needsUpdate = true; } } } return(needsUpdate); }
private Dictionary <string, PtypeMetadata> LoadPtypesFromIntent() { JToken ptypeStr = intent.GetData(INTENT_PTYPES); Dictionary <string, PtypeMetadata> ptypeData = new Dictionary <string, PtypeMetadata>(); if (ptypeStr != null) { JArray arr = ptypeStr.Value <JArray>(); foreach (JObject obj in arr) { string id = obj.GetValue("id").Value <string> (); PtypeMetadata data = new PtypeMetadata(id); ptypeData.Add(id, data); JArray examplesJson = obj["examples"].Value <JArray>(); foreach (JObject exJson in examplesJson) { Example e = GetExample(exJson); data.Examples.Add(e); } JArray featuresJson = obj["features"].Value <JArray>(); Dictionary <string, Bitmap> features = GetFeatures(featuresJson); JArray regionsJson = obj["regions"].Value <JArray>(); Dictionary <string, Region> regions = GetRegions(regionsJson); string model = obj.Value <string> ("model"); data.Ptype.Model = model; data.Ptype.Features = features; data.Ptype.Regions = regions; } } return(ptypeData); }
private Dictionary<string, PtypeMetadata> LoadPtypesFromIntent(){ JToken ptypeStr = intent.GetData(INTENT_PTYPES); Dictionary<string, PtypeMetadata> ptypeData = new Dictionary<string, PtypeMetadata>(); if(ptypeStr != null){ JArray arr = ptypeStr.Value<JArray>(); foreach(JObject obj in arr){ string id = obj.GetValue ("id").Value<string> (); PtypeMetadata data = new PtypeMetadata(id); ptypeData.Add(id, data); JArray examplesJson = obj["examples"].Value<JArray>(); foreach(JObject exJson in examplesJson){ Example e = GetExample(exJson); data.Examples.Add(e); } JArray featuresJson = obj["features"].Value<JArray>(); Dictionary<string, Bitmap> features = GetFeatures(featuresJson); JArray regionsJson = obj["regions"].Value<JArray>(); Dictionary<string, Region> regions = GetRegions(regionsJson); string model = obj.Value<string> ("model"); data.Ptype.Model = model; data.Ptype.Features = features; data.Ptype.Regions = regions; } } return ptypeData; }
private static void AddFeaturesToJArray(JArray array, PtypeMetadata data){ foreach(string key in data.Ptype.Features.Keys){ Bitmap feature = data.Ptype.Features[key]; JObject featureJson = new JObject (); BitmapToJson(featureJson, feature); featureJson.Add("name", key); array.Add(featureJson); } }
private static void AddRegionsToJArray(JArray array, PtypeMetadata data){ foreach(string key in data.Ptype.Regions.Keys){ Region region = data.Ptype.Regions[key]; JObject regionJson = new JObject(); BitmapToJson(regionJson, region.Bitmap); regionJson.Add("name", key); regionJson.Add("matchstrategy", region.MatchStrategy); array.Add(regionJson); } }
private static bool LoadDataFromAnnotations(List<AnnotatedNode> annotations, Dictionary<string, PtypeMetadata> ptypeData) { bool needsUpdate = false; foreach(AnnotatedNode a in annotations){ string id; JObject alldata = a.Data; JArray ptypes = alldata["ptypes"].Value<JArray>(); foreach (JObject dataJson in ptypes) { id = dataJson["ptypeId"].Value<string>(); PtypeMetadata data; if (ptypeData.ContainsKey(id)) data = ptypeData[id]; else { data = new PtypeMetadata(id); ptypeData.Add(id, data); data.NeedsUpdate = true; } bool isPos = dataJson["positive"].Value<bool>(); Example ex = new Example(a.Region, isPos, a.ImageId); if (!data.Examples.Contains(ex)) { data.Examples.Add(ex); data.NeedsUpdate = true; } string model = dataJson["model"].Value<string>(); if (data.Ptype.Model == null || !data.Ptype.Model.Equals(model)) { data.Ptype.Model = model; data.NeedsUpdate = true; needsUpdate = true; } } } return needsUpdate; }
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); }