private UnitTests.Viper.Sample.viper deserialiseObject(string filename) { log.Debug("deserializeObject: Reading with XmlReader"); // Create an instance of the XmlSerializer specifying type and namespace. XmlSerializer serializer = new XmlSerializer(typeof(UnitTests.Viper.Sample.viper)); // A FileStream is needed to read the XML document. FileStream fs = new FileStream(filename, FileMode.Open); XmlReader reader = new XmlTextReader(fs); // Declare an object variable of the type to be deserialized & use the Deserialize method to restore the object's state. UnitTests.Viper.Sample.viper vt = (UnitTests.Viper.Sample.viper)serializer.Deserialize(reader); reader.Close(); fs.Close(); return(vt); }
private IEnumerable <IMediaSequence> viperLabelledFeatures() { List <IMediaSequence> mediaSequence = new List <IMediaSequence>(); UnitTests.Viper.Sample.viper vt = deserialiseObject(_viperDataFilename); List <KeyValuePair <string, string> > possibleAttributes = new List <KeyValuePair <string, string> >(); foreach (object o in vt.Items) { if (o is viperConfig) { // Extract a list of all the possible attributes for all the possible objects. // This does make an assumption that they are all uniquely named, and all apply to all frames. // This assumption is not valid generally, but is OK for our situation viperConfig vc = ( viperConfig )o; foreach (viperConfigDescriptor d in vc.descriptor) { if (d.type.CompareTo("OBJECT") == 0) { possibleAttributes.AddRange(extractViperSampleTypes(d.attribute)); } } } } // Now we have compiled a list of all possible attributes for all possible objects // Go through the viperData itself now & extract the individual items foreach (object o in vt.Items) { if (o is viperData) { // log.Debug("Found the viperData"); viperData vd = (UnitTests.Viper.Sample.viperData)o; foreach (viperDataSourcefile vsf in vd.sourcefile) { String filenameFrameImages = null; filenameFrameImages = vsf.filename; viperDataSourcefileFile vsff = extractViperDataSourceFileFile(vsf.file, "Information"); long?numFrames = extractAttributeLong(vsff.attribute, "NUMFRAMES"); // Loop through all the objects foreach (viperDataSourcefileObject sfo in vsf.@object) { // Go through each of the named attributes foreach (KeyValuePair <string, string> kvp in possibleAttributes) { attribute a = extractAttribute(sfo.attribute, kvp.Key); if (a != null) { // Get all the points & add them to the relevant MediaSequence entries for that named attribute bool extracted = false; // have to do it based on the type obtained in kvp.Value if (kvp.Value.CompareTo("http://lamp.cfar.umd.edu/viperdata#point") == 0) { if (a.point == null) { log.Debug("Unable to properly extract the attribute"); } else { // The problem here is that we only seem to be seeing the first point // ... TODO ... // Pull out a point version // ... // Mark as dealt with extracted = true; } } if (kvp.Value.CompareTo("http://lamp.cfar.umd.edu/viperdata#bbox") == 0) { if (a.point == null) { log.Debug("Unable to properly extract the attribute"); } else { // ... TODO ... // Pull out a bounding box version // ... // Mark as dealt with extracted = true; } } if (kvp.Value.CompareTo("http://lamp.cfar.umd.edu/viperdata#circle") == 0) { if (a.point == null) { log.Debug("Unable to properly extract the attribute"); } else { // ... TODO ... // Pull out a circle version // ... // Mark as dealt with extracted = true; } } // ... TODO ... } } } // Now go to the next source file level (source file is actually a list of image files) } } } UnitTests.Viper.Schema.viper vtt = UnitTests.Viper.Schema.viper.LoadFromFile(_viperDataFilename); for (int subject = 1; subject <= 100; subject++) { string region1BaseDirectory = directory() + "/regions/R" + subject.ToString("000"); string region2BaseDirectory = directory() + "/regions2/R" + subject.ToString("000"); string landmarkBaseDirectory = directory() + "/landmarks/L" + subject.ToString("000"); string landmark2BaseDirectory = directory() + "/landmarks2/L" + subject.ToString("000"); string contourBaseDirectory = directory() + "/contours/C" + subject.ToString("000"); string imageBaseDirectory = directory() + "/images/0" + subject.ToString("000"); DirectoryInfo region1Dir = new DirectoryInfo(region1BaseDirectory); DirectoryInfo region2Dir = new DirectoryInfo(region2BaseDirectory); DirectoryInfo landmarkDir = new DirectoryInfo(landmarkBaseDirectory); DirectoryInfo landmark2Dir = new DirectoryInfo(landmark2BaseDirectory); DirectoryInfo contourDir = new DirectoryInfo(contourBaseDirectory); FileInfo[] region1Files = region1Dir.GetFiles("*.yml"); foreach (FileInfo region1FileInfo in region1Files) { string imageFilename = imageBaseDirectory + "/" + region1FileInfo.Name.Replace(".yml", ".JPG"); bool imageFileFound = File.Exists(imageFilename); string region2Filename = region2BaseDirectory + "/" + region1FileInfo.Name; bool region2FileFound = File.Exists(region2Filename); string landmarkFilename = landmarkBaseDirectory + "/" + region1FileInfo.Name; bool landmarkFileFound = File.Exists(landmarkFilename); string landmark2Filename = landmark2BaseDirectory + "/" + region1FileInfo.Name; bool landmark2FileFound = File.Exists(landmark2Filename); string contourFilename = contourBaseDirectory + "/" + region1FileInfo.Name; bool contourFileFound = File.Exists(contourFilename); if (contourFileFound) { contourFiles++; } if (!imageFileFound) { missingFiles++; break; } if (!region2FileFound) { // Have Region 1 file, have image file, but missing Region 2 file missingFiles++; break; } if (!landmarkFileFound) { // Have Region 1 file, Region 2 file, have image file, but missing Landmark file missingFiles++; break; } if (!landmark2FileFound) { // Have Region 1 file, Region 2 file, have image file, but missing Landmark file missingFiles++; break; } // We have the corresponding image file, now we actually need to load and process all 3 YAML files (which also exist) bool successRegion1 = false; bool successRegion2 = false; bool successLandmark = false; bool successLandmark2 = false; bool successContour = false; YamlParser parser = new YamlParser(); //TextInput inputRegion1 = new TextInput( yamlPreprocessor( File.ReadAllText( region1FileInfo.FullName ) ) ); //YamlStream yamlStreamRegion1 = parser.ParseYamlStream( inputRegion1, out successRegion1 ); //if ( !successRegion1 ) //{ // yamlErrors++; //} //TextInput inputRegion2 = new TextInput( yamlPreprocessor( File.ReadAllText( region2Filename ) ) ); //YamlStream yamlStreamRegion2 = parser.ParseYamlStream( inputRegion2, out successRegion2 ); //if ( !successRegion2 ) //{ // yamlErrors++; //} //TextInput inputLandmark = new TextInput( yamlPreprocessor( File.ReadAllText( landmarkFilename ) ) ); //YamlStream yamlStreamLandmark = parser.ParseYamlStream( inputLandmark, out successLandmark ); //if ( !successLandmark ) //{ // yamlErrors++; //} //TextInput inputLandmark2 = new TextInput( yamlPreprocessor( File.ReadAllText( landmark2Filename ) ) ); //YamlStream yamlStreamLandmark2 = parser.ParseYamlStream( inputLandmark2, out successLandmark2 ); //if ( !successLandmark2 ) //{ // yamlErrors++; //} //TextInput inputContour; //YamlStream yamlStreamContour = null; //if ( contourFileFound ) //{ // inputContour = new TextInput( yamlPreprocessor( File.ReadAllText( contourFilename ) ) ); // yamlStreamContour = parser.ParseYamlStream( inputContour, out successContour ); //} if (successRegion1 || successRegion2 || successLandmark || successLandmark2 || successContour) { // Create a container for the particular features which are labelled in the YAML List <ILabelledFeature> features = new List <ILabelledFeature>(); //if ( successRegion1 ) //{ // // features.AddRange( extractRegionsFromYaml( yamlStreamRegion1 ) ); //} //if ( successRegion2 ) //{ // features.AddRange( extractRegionsFromYaml( yamlStreamRegion2 ) ); //} //if ( successLandmark ) //{ // // features.AddRange( extractPointsFromYaml( yamlStreamLandmark ) ); //} //if ( successLandmark2 ) //{ // features.AddRange( extractPointsFromYaml( yamlStreamLandmark2 ) ); //} //if ( successContour ) //{ // features.AddRange( extractContoursFromYaml( yamlStreamContour ) ); //} // This frame has the two eye features from above, plus the regions as well IMediaFrame mediaFrame = new LazyLoadImageMediaFrame(imageFilename, features); // This mediaFrame sequence only has the one frame in it mediaSequence.Add(new SingleFrameMediaSequence(getName() + "_subject" + subject.ToString("000"), mediaFrame)); } } } Assert.LessOrEqual(missingFiles, 1, "More than expected number of image files were not found (expected 1)"); Assert.LessOrEqual(yamlErrors, 0, "More than expected number of YAML errors occurred (expected 0)"); Assert.AreEqual(2182, contourFiles, "Wrong number of contour files found (expected 2182, although doco says 2193)"); Assert.LessOrEqual(regionAllZero, 24457, "More than expected number of regionAllZero occurred (expected 24468)"); Assert.LessOrEqual(notFoundRegionCorners, 0, "More than expected number of notFoundRegionCorners occurred (expected 0)"); Assert.LessOrEqual(unrecognisedFeatureName, 0, "More than expected number of unrecognisedFeatureName occurred (expected 0)"); return(mediaSequence); }