private IEnumerable <ILabelledFeature> extractRegionsFromYaml(YamlStream yamlStream) { List <ILabelledFeature> features = new List <ILabelledFeature>(); // Pull out the regions from the YAML files foreach (YamlDocument doc in yamlStream.Documents) { Assert.IsInstanceOf(typeof(Mapping), doc.Root); Mapping m = ( Mapping )doc.Root; foreach (MappingEntry me in m.Enties) { Assert.IsInstanceOf(typeof(Mapping), me.Value); Mapping mPoints = ( Mapping )me.Value; Dictionary <String, Int32> coords = MappingConverter.convertToDictionary(mPoints, MappingConverter.KeyCase.FORCE_LOWER); Point[] points = new Point[4]; bool found = true; int x = 0; int y = 0; int width = 0; int height = 0; found = found && coords.TryGetValue("x", out x); found = found && coords.TryGetValue("y", out y); found = found && coords.TryGetValue("width", out width); found = found && coords.TryGetValue("height", out height); if (found) { if ((x == 0) && (y == 0) && (width == 0) && (height == 0)) { regionAllZero++; } else { points[0] = new Point(x, y); points[1] = new Point(x + width, y); points[2] = new Point(x + width, y + height); points[3] = new Point(x, y + height); DataSetEnums.FeatureName featureName; //bool featureNameFound = tryGetFeatureNameFor( me.Key.ToString(), out featureName ); //if ( featureNameFound ) //{ // features.Add( new LabelledFeature( featureName, new MultiPointPath( points, true ) ) ); //} //else //{ // unrecognisedFeatureName++; //} } } else { notFoundRegionCorners++; } } } return(features); }
private IEnumerable <ILabelledFeature> extractContoursFromYaml(YamlStream yamlStream) { List <ILabelledFeature> features = new List <ILabelledFeature>(); //return features; // Pull out the contours from the YAML files foreach (YamlDocument doc in yamlStream.Documents) { Assert.IsInstanceOf(typeof(Mapping), doc.Root); Mapping m = ( Mapping )doc.Root; // Validate that this refers to the correct file 'Image file' should be '00011010.jpg' for example Assert.True(m.Enties[0].Key.ToString().CompareTo("Image file") == 0, "Unexpected order of Mapping elements"); Assert.True(m.Enties[1].Key.ToString().CompareTo("Contours count") == 0, "Unexpected order of Mapping elements"); Assert.True(m.Enties[2].Key.ToString().CompareTo("Contours") == 0, "Unexpected order of Mapping elements"); // m.Enties[ 2 ].Value; Assert.IsInstanceOf(typeof(Sequence), m.Enties[2].Value); Sequence seqContours = ( Sequence )m.Enties[2].Value; foreach (DataItem di in seqContours.Enties) { Assert.IsInstanceOf(typeof(Mapping), di); Mapping mdi = ( Mapping )di; Assert.True(mdi.Enties[0].Key.ToString().CompareTo("Name") == 0, "Unexpected order of Mapping elements"); Assert.True(mdi.Enties[1].Key.ToString().CompareTo("Count") == 0, "Unexpected order of Mapping elements"); Assert.True(mdi.Enties[2].Key.ToString().CompareTo("Closed") == 0, "Unexpected order of Mapping elements"); Assert.True(mdi.Enties[3].Key.ToString().CompareTo("Points") == 0, "Unexpected order of Mapping elements"); DataSetEnums.FeatureName featureName; //bool featureNameFound = tryGetFeatureNameFor( mdi.Enties[ 0 ].Value.ToString(), out featureName ); //// Skip this one if unrecognised feature name //if ( !featureNameFound ) //{ // unrecognisedFeatureName++; // continue; //} // Skip this one if there is a zero 'Contours count' if (Convert.ToInt32(mdi.Enties[1].Value.ToString()) == 0) { noContours++; continue; } // Figure out if closed or open bool closed = (mdi.Enties[2].Value.ToString().CompareTo("1") == 0); // Now extract the sequence of x,y values Sequence pointSeq = ( Sequence )mdi.Enties[3].Value; Point[] points = new Point[pointSeq.Enties.Count]; for (int i = 0; i < pointSeq.Enties.Count; i++) { Mapping pointMap = ( Mapping )pointSeq.Enties[i]; Dictionary <String, Int32> coords = MappingConverter.convertToDictionary(pointMap, MappingConverter.KeyCase.FORCE_LOWER); bool found = true; int x = 0; int y = 0; found = found && coords.TryGetValue("x", out x); found = found && coords.TryGetValue("y", out y); Assert.True(found, "Could not convert coordinates"); points[i] = new Point(x, y); } // This feature is a multiple point path // features.Add( new LabelledFeature( featureName, new MultiPointPath( points, closed ) ) ); } } return(features); }