コード例 #1
0
        protected override void Algorithm(ref Cl3DModel p_Model)
        {
            CORFile landmarkFile = ReadCORFile(p_Model.ModelFileFolder + p_Model.ModelFileName + ".cor");

            //search for the closest point from the model to the read landmark
            Cl3DModel.Cl3DModelPointIterator iter = p_Model.GetIterator();
            if (!iter.IsValid())
            {
                throw new Exception("Iterator in the model is not valid!");
            }

            Cl3DModel.Cl3DModelPointIterator SavedNoseTip = iter.CopyIterator();
            float NoseTipDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.NoseTip.X - SavedNoseTip.X, 2) + Math.Pow(landmarkFile.NoseTip.Y - SavedNoseTip.Y, 2) + Math.Pow(landmarkFile.NoseTip.Z - SavedNoseTip.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedLeftEyeRightCorner = iter.CopyIterator();
            float LeftEyeRightCornerDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftEyeRightCorner.X - SavedLeftEyeRightCorner.X, 2) + Math.Pow(landmarkFile.LeftEyeRightCorner.Y - SavedLeftEyeRightCorner.Y, 2) + Math.Pow(landmarkFile.LeftEyeRightCorner.Z - SavedLeftEyeRightCorner.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedRightEyeLeftCorner = iter.CopyIterator();
            float RightEyeLeftCornerDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.RightEyeLeftCorner.X - SavedRightEyeLeftCorner.X, 2) + Math.Pow(landmarkFile.RightEyeLeftCorner.Y - SavedRightEyeLeftCorner.Y, 2) + Math.Pow(landmarkFile.RightEyeLeftCorner.Z - SavedRightEyeLeftCorner.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedRightEyeRightCorner = iter.CopyIterator();
            float RightEyeRightCornerDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.RightEyeRightCorner.X - SavedRightEyeRightCorner.X, 2) + Math.Pow(landmarkFile.RightEyeRightCorner.Y - SavedRightEyeRightCorner.Y, 2) + Math.Pow(landmarkFile.RightEyeRightCorner.Z - SavedRightEyeRightCorner.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedLeftEyeLeftCorner = iter.CopyIterator();
            float LeftEyeLeftCornerDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftEyeLeftCorner.X - SavedLeftEyeLeftCorner.X, 2) + Math.Pow(landmarkFile.LeftEyeLeftCorner.Y - SavedLeftEyeLeftCorner.Y, 2) + Math.Pow(landmarkFile.LeftEyeLeftCorner.Z - SavedLeftEyeLeftCorner.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedLeftCornerOfNose = iter.CopyIterator();
            float LeftCornerOfNoseDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftCornerOfNose.X - SavedLeftCornerOfNose.X, 2) + Math.Pow(landmarkFile.LeftCornerOfNose.Y - SavedLeftCornerOfNose.Y, 2) + Math.Pow(landmarkFile.LeftCornerOfNose.Z - SavedLeftCornerOfNose.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedRightCornerOfNose = iter.CopyIterator();
            float RightCornerOfNoseDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.RightCornerOfNose.X - SavedRightCornerOfNose.X, 2) + Math.Pow(landmarkFile.RightCornerOfNose.Y - SavedRightCornerOfNose.Y, 2) + Math.Pow(landmarkFile.RightCornerOfNose.Z - SavedRightCornerOfNose.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedLeftCornerOfLips = iter.CopyIterator();
            float LeftCornerOfLipsDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftCornerOfLips.X - SavedLeftCornerOfLips.X, 2) + Math.Pow(landmarkFile.LeftCornerOfLips.Y - SavedLeftCornerOfLips.Y, 2) + Math.Pow(landmarkFile.LeftCornerOfLips.Z - SavedLeftCornerOfLips.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedRightCornerOfLips = iter.CopyIterator();
            float RightCornerOfLipsDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.RightCornerOfLips.X - SavedRightCornerOfLips.X, 2) + Math.Pow(landmarkFile.RightCornerOfLips.Y - SavedRightCornerOfLips.Y, 2) + Math.Pow(landmarkFile.RightCornerOfLips.Z - SavedRightCornerOfLips.Z, 2));



            Cl3DModel.Cl3DModelPointIterator SavedUpperLip = iter.CopyIterator();
            float UpperLipDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.UpperLip.X - SavedUpperLip.X, 2) + Math.Pow(landmarkFile.UpperLip.Y - SavedUpperLip.Y, 2) + Math.Pow(landmarkFile.UpperLip.Z - SavedUpperLip.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedBottomLip = iter.CopyIterator();
            float BottomLipDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.BottomLip.X - SavedBottomLip.X, 2) + Math.Pow(landmarkFile.BottomLip.Y - SavedBottomLip.Y, 2) + Math.Pow(landmarkFile.BottomLip.Z - SavedBottomLip.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedLeftEyeUpperEyelid = iter.CopyIterator();
            float LeftEyeUpperEyelidDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftEyeUpperEyelid.X - SavedLeftEyeUpperEyelid.X, 2) + Math.Pow(landmarkFile.LeftEyeUpperEyelid.Y - SavedLeftEyeUpperEyelid.Y, 2) + Math.Pow(landmarkFile.LeftEyeUpperEyelid.Z - SavedLeftEyeUpperEyelid.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedLeftEyeBottomEyelid = iter.CopyIterator();
            float LeftEyeBottomEyelidDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftEyeBottomEyelid.X - SavedLeftEyeBottomEyelid.X, 2) + Math.Pow(landmarkFile.LeftEyeBottomEyelid.Y - SavedLeftEyeBottomEyelid.Y, 2) + Math.Pow(landmarkFile.LeftEyeBottomEyelid.Z - SavedLeftEyeBottomEyelid.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedRightEyeUpperEyelid = iter.CopyIterator();
            float RightEyeUpperEyelidDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.RightEyeUpperEyelid.X - SavedRightEyeUpperEyelid.X, 2) + Math.Pow(landmarkFile.RightEyeUpperEyelid.Y - SavedRightEyeUpperEyelid.Y, 2) + Math.Pow(landmarkFile.RightEyeUpperEyelid.Z - SavedRightEyeUpperEyelid.Z, 2));

            Cl3DModel.Cl3DModelPointIterator SavedRightEyeBottomEyelid = iter.CopyIterator();
            float RightEyeBottomEyelidDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.RightEyeBottomEyelid.X - SavedRightEyeBottomEyelid.X, 2) + Math.Pow(landmarkFile.RightEyeBottomEyelid.Y - SavedRightEyeBottomEyelid.Y, 2) + Math.Pow(landmarkFile.RightEyeBottomEyelid.Z - SavedRightEyeBottomEyelid.Z, 2));


            do
            {
                float NewNoseTipDistance             = (float)Math.Sqrt(Math.Pow(landmarkFile.NoseTip.X - iter.X, 2) + Math.Pow(landmarkFile.NoseTip.Y - iter.Y, 2) + Math.Pow(landmarkFile.NoseTip.Z - iter.Z, 2));
                float NewLeftEyeRightCornerDistance  = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftEyeRightCorner.X - iter.X, 2) + Math.Pow(landmarkFile.LeftEyeRightCorner.Y - iter.Y, 2) + Math.Pow(landmarkFile.LeftEyeRightCorner.Z - iter.Z, 2));
                float NewRightEyeLeftCornerDistance  = (float)Math.Sqrt(Math.Pow(landmarkFile.RightEyeLeftCorner.X - iter.X, 2) + Math.Pow(landmarkFile.RightEyeLeftCorner.Y - iter.Y, 2) + Math.Pow(landmarkFile.RightEyeLeftCorner.Z - iter.Z, 2));
                float NewLeftEyeLeftCornerDistance   = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftEyeLeftCorner.X - iter.X, 2) + Math.Pow(landmarkFile.LeftEyeLeftCorner.Y - iter.Y, 2) + Math.Pow(landmarkFile.LeftEyeLeftCorner.Z - iter.Z, 2));
                float NewRightEyeRightCornerDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.RightEyeRightCorner.X - iter.X, 2) + Math.Pow(landmarkFile.RightEyeRightCorner.Y - iter.Y, 2) + Math.Pow(landmarkFile.RightEyeRightCorner.Z - iter.Z, 2));
                float NewLeftCornerOfNoseDistance    = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftCornerOfNose.X - iter.X, 2) + Math.Pow(landmarkFile.LeftCornerOfNose.Y - iter.Y, 2) + Math.Pow(landmarkFile.LeftCornerOfNose.Z - iter.Z, 2));
                float NewRightCornerOfNoseDistance   = (float)Math.Sqrt(Math.Pow(landmarkFile.RightCornerOfNose.X - iter.X, 2) + Math.Pow(landmarkFile.RightCornerOfNose.Y - iter.Y, 2) + Math.Pow(landmarkFile.RightCornerOfNose.Z - iter.Z, 2));
                float NewLeftCornerOfLipsDistance    = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftCornerOfLips.X - iter.X, 2) + Math.Pow(landmarkFile.LeftCornerOfLips.Y - iter.Y, 2) + Math.Pow(landmarkFile.LeftCornerOfLips.Z - iter.Z, 2));
                float NewRightCornerOfLipsDistance   = (float)Math.Sqrt(Math.Pow(landmarkFile.RightCornerOfLips.X - iter.X, 2) + Math.Pow(landmarkFile.RightCornerOfLips.Y - iter.Y, 2) + Math.Pow(landmarkFile.RightCornerOfLips.Z - iter.Z, 2));

                float NewUpperLipDistance             = (float)Math.Sqrt(Math.Pow(landmarkFile.UpperLip.X - iter.X, 2) + Math.Pow(landmarkFile.UpperLip.Y - iter.Y, 2) + Math.Pow(landmarkFile.UpperLip.Z - iter.Z, 2));
                float NewBottomLipDistance            = (float)Math.Sqrt(Math.Pow(landmarkFile.BottomLip.X - iter.X, 2) + Math.Pow(landmarkFile.BottomLip.Y - iter.Y, 2) + Math.Pow(landmarkFile.BottomLip.Z - iter.Z, 2));
                float NewLeftEyeUpperEyelidDistance   = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftEyeUpperEyelid.X - iter.X, 2) + Math.Pow(landmarkFile.LeftEyeUpperEyelid.Y - iter.Y, 2) + Math.Pow(landmarkFile.LeftEyeUpperEyelid.Z - iter.Z, 2));
                float NewLeftEyeBottomEyelidDistance  = (float)Math.Sqrt(Math.Pow(landmarkFile.LeftEyeBottomEyelid.X - iter.X, 2) + Math.Pow(landmarkFile.LeftEyeBottomEyelid.Y - iter.Y, 2) + Math.Pow(landmarkFile.LeftEyeBottomEyelid.Z - iter.Z, 2));
                float NewRightEyeUpperEyelidDistance  = (float)Math.Sqrt(Math.Pow(landmarkFile.RightEyeUpperEyelid.X - iter.X, 2) + Math.Pow(landmarkFile.RightEyeUpperEyelid.Y - iter.Y, 2) + Math.Pow(landmarkFile.RightEyeUpperEyelid.Z - iter.Z, 2));
                float NewRightEyeBottomEyelidDistance = (float)Math.Sqrt(Math.Pow(landmarkFile.RightEyeBottomEyelid.X - iter.X, 2) + Math.Pow(landmarkFile.RightEyeBottomEyelid.Y - iter.Y, 2) + Math.Pow(landmarkFile.RightEyeBottomEyelid.Z - iter.Z, 2));

                if (NewNoseTipDistance < NoseTipDistance)
                {
                    NoseTipDistance = NewNoseTipDistance;
                    SavedNoseTip    = iter.CopyIterator();
                }
                if (NewLeftEyeRightCornerDistance < LeftEyeRightCornerDistance)
                {
                    LeftEyeRightCornerDistance = NewLeftEyeRightCornerDistance;
                    SavedLeftEyeRightCorner    = iter.CopyIterator();
                }
                if (NewRightEyeLeftCornerDistance < RightEyeLeftCornerDistance)
                {
                    RightEyeLeftCornerDistance = NewRightEyeLeftCornerDistance;
                    SavedRightEyeLeftCorner    = iter.CopyIterator();
                }
                if (NewRightEyeRightCornerDistance < RightEyeRightCornerDistance)
                {
                    RightEyeRightCornerDistance = NewRightEyeRightCornerDistance;
                    SavedRightEyeRightCorner    = iter.CopyIterator();
                }
                if (NewLeftEyeLeftCornerDistance < LeftEyeLeftCornerDistance)
                {
                    LeftEyeLeftCornerDistance = NewLeftEyeLeftCornerDistance;
                    SavedLeftEyeLeftCorner    = iter.CopyIterator();
                }
                if (NewLeftCornerOfNoseDistance < LeftCornerOfNoseDistance)
                {
                    LeftCornerOfNoseDistance = NewLeftCornerOfNoseDistance;
                    SavedLeftCornerOfNose    = iter.CopyIterator();
                }
                if (NewRightCornerOfNoseDistance < RightCornerOfNoseDistance)
                {
                    RightCornerOfNoseDistance = NewRightCornerOfNoseDistance;
                    SavedRightCornerOfNose    = iter.CopyIterator();
                }
                if (NewLeftCornerOfLipsDistance < LeftCornerOfLipsDistance)
                {
                    LeftCornerOfLipsDistance = NewLeftCornerOfLipsDistance;
                    SavedLeftCornerOfLips    = iter.CopyIterator();
                }
                if (NewRightCornerOfLipsDistance < RightCornerOfLipsDistance)
                {
                    RightCornerOfLipsDistance = NewRightCornerOfLipsDistance;
                    SavedRightCornerOfLips    = iter.CopyIterator();
                }

                if (NewUpperLipDistance < UpperLipDistance)
                {
                    UpperLipDistance = NewUpperLipDistance;
                    SavedUpperLip    = iter.CopyIterator();
                }
                if (NewBottomLipDistance < BottomLipDistance)
                {
                    BottomLipDistance = NewBottomLipDistance;
                    SavedBottomLip    = iter.CopyIterator();
                }
                if (NewLeftEyeUpperEyelidDistance < LeftEyeUpperEyelidDistance)
                {
                    LeftEyeUpperEyelidDistance = NewLeftEyeUpperEyelidDistance;
                    SavedLeftEyeUpperEyelid    = iter.CopyIterator();
                }
                if (NewLeftEyeBottomEyelidDistance < LeftEyeBottomEyelidDistance)
                {
                    LeftEyeBottomEyelidDistance = NewLeftEyeBottomEyelidDistance;
                    SavedLeftEyeBottomEyelid    = iter.CopyIterator();
                }
                if (NewRightEyeUpperEyelidDistance < RightEyeUpperEyelidDistance)
                {
                    RightEyeUpperEyelidDistance = NewRightEyeUpperEyelidDistance;
                    SavedRightEyeUpperEyelid    = iter.CopyIterator();
                }
                if (NewRightEyeBottomEyelidDistance < RightEyeBottomEyelidDistance)
                {
                    RightEyeBottomEyelidDistance = NewRightEyeBottomEyelidDistance;
                    SavedRightEyeBottomEyelid    = iter.CopyIterator();
                }
            } while (iter.MoveToNext());

            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.NoseTip, SavedNoseTip);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.RightEyeLeftCorner, SavedRightEyeLeftCorner);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.LeftEyeRightCorner, SavedLeftEyeRightCorner);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.LeftEyeLeftCorner, SavedLeftEyeLeftCorner);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.RightEyeRightCorner, SavedRightEyeRightCorner);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.LeftCornerOfNose, SavedLeftCornerOfNose);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.RightCornerOfNose, SavedRightCornerOfNose);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.LeftCornerOfLips, SavedLeftCornerOfLips);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.RightCornerOfLips, SavedRightCornerOfLips);

            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.UpperLip, SavedUpperLip);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.BottomLip, SavedBottomLip);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.LeftEyeUpperEyelid, SavedLeftEyeUpperEyelid);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.LeftEyeBottomEyelid, SavedLeftEyeBottomEyelid);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.RightEyeUpperEyelid, SavedRightEyeUpperEyelid);
            p_Model.AddSpecificPoint(Cl3DModel.eSpecificPoints.RightEyeBottomEyelid, SavedRightEyeBottomEyelid);
        }
        private CORFile ReadCORFile(string p_sFileName)
        {
            CORFile fileStructure = new CORFile();
            fileStructure.FilePath = p_sFileName;
            using (StreamReader FileStream = File.OpenText(p_sFileName))
            {
                string line;
                bool bFileVersionOK = false;
                char cFileSubVersionCoordinateSeparator = ' ';
                while ((line = FileStream.ReadLine()) != null)
                {
                    if (line.Contains("@ File Version 1.1") || line.Contains("@ File Version 1.2"))
                    {
                        if (line.Contains("@ File Version 1.1"))
                            cFileSubVersionCoordinateSeparator = ' ';
                        else if (line.Contains("@ File Version 1.2"))
                            cFileSubVersionCoordinateSeparator = '\t';

                        bFileVersionOK = true;
                        continue;
                    }
                    string tocken = "@ Model landmarked by: ";
                    if (line.Contains(tocken))
                    {
                        fileStructure.User = line.Substring(tocken.Length);
                        continue;
                    }
                    if (line.StartsWith("@"))
                        continue;

                    if (!bFileVersionOK)
                        throw new Exception("COR file version is not 1.1 or 1.2, file: " + p_sFileName);

                    tocken = "Left Eye Left Corner";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftEyeLeftCorner = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Eye Right Corner";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftEyeRightCorner = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Eye Upper Eyelid";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftEyeUpperEyelid = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Eye Bottom Eyelid";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftEyeBottomEyelid = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Eye Left Corner";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightEyeLeftCorner = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Eye Right Corner";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightEyeRightCorner = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Eye Upper Eyelid";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightEyeUpperEyelid = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Eye Bottom Eyelid";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightEyeBottomEyelid = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Corner Of Nose";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftCornerOfNose = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Nose Tip";
                    if (line.Contains(tocken))
                    {
                        fileStructure.NoseTip = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Corner Of Nose";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightCornerOfNose = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Corner Of Lips";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftCornerOfLips = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Upper Lip";
                    if (line.Contains(tocken))
                    {
                        fileStructure.UpperLip = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Bottom Lip";
                    if (line.Contains(tocken))
                    {
                        fileStructure.BottomLip = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Corner Of Lips";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightCornerOfLips = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    throw new Exception("Unknown tocken in the line: " + line + " of file: " + p_sFileName);
                }

            }
            return fileStructure;
        }
コード例 #3
0
        private CORFile ReadCORFile(string p_sFileName)
        {
            CORFile fileStructure = new CORFile();

            fileStructure.FilePath = p_sFileName;
            using (StreamReader FileStream = File.OpenText(p_sFileName))
            {
                string line;
                bool   bFileVersionOK = false;
                char   cFileSubVersionCoordinateSeparator = ' ';
                while ((line = FileStream.ReadLine()) != null)
                {
                    if (line.Contains("@ File Version 1.1") || line.Contains("@ File Version 1.2"))
                    {
                        if (line.Contains("@ File Version 1.1"))
                        {
                            cFileSubVersionCoordinateSeparator = ' ';
                        }
                        else if (line.Contains("@ File Version 1.2"))
                        {
                            cFileSubVersionCoordinateSeparator = '\t';
                        }

                        bFileVersionOK = true;
                        continue;
                    }
                    string tocken = "@ Model landmarked by: ";
                    if (line.Contains(tocken))
                    {
                        fileStructure.User = line.Substring(tocken.Length);
                        continue;
                    }
                    if (line.StartsWith("@"))
                    {
                        continue;
                    }

                    if (!bFileVersionOK)
                    {
                        throw new Exception("COR file version is not 1.1 or 1.2, file: " + p_sFileName);
                    }

                    tocken = "Left Eye Left Corner";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftEyeLeftCorner = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Eye Right Corner";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftEyeRightCorner = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Eye Upper Eyelid";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftEyeUpperEyelid = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Eye Bottom Eyelid";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftEyeBottomEyelid = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Eye Left Corner";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightEyeLeftCorner = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Eye Right Corner";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightEyeRightCorner = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Eye Upper Eyelid";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightEyeUpperEyelid = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Eye Bottom Eyelid";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightEyeBottomEyelid = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Corner Of Nose";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftCornerOfNose = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Nose Tip";
                    if (line.Contains(tocken))
                    {
                        fileStructure.NoseTip = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Corner Of Nose";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightCornerOfNose = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Left Corner Of Lips";
                    if (line.Contains(tocken))
                    {
                        fileStructure.LeftCornerOfLips = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Upper Lip";
                    if (line.Contains(tocken))
                    {
                        fileStructure.UpperLip = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Bottom Lip";
                    if (line.Contains(tocken))
                    {
                        fileStructure.BottomLip = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    tocken = "Right Corner Of Lips";
                    if (line.Contains(tocken))
                    {
                        fileStructure.RightCornerOfLips = ReadLineFromCORorCRRFile(line, tocken, cFileSubVersionCoordinateSeparator);
                        continue;
                    }
                    throw new Exception("Unknown tocken in the line: " + line + " of file: " + p_sFileName);
                }
            }
            return(fileStructure);
        }