internal void Init(string modelName, string labelsFileName, ModelType modelType)
        {
            _modelType = modelType;

            try
            {
                var assets = Android.App.Application.Context.Assets;
                using (var sr = new StreamReader(File.Exists(labelsFileName)? File.OpenRead(labelsFileName) : assets.Open(labelsFileName)))
                {
                    var content = sr.ReadToEnd();
                    _labels = content.Split('\n').Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)).ToList();
                }

                _inferenceInterface = new TensorFlowInferenceInterface(assets, modelName);
                InputSize           = Convert.ToInt32(_inferenceInterface.GraphOperation(InputName).Output(0).Shape().Size(1));
                var iter = _inferenceInterface.Graph().Operations();
                while (iter.HasNext && !_hasNormalizationLayer)
                {
                    var op = iter.Next() as Operation;
                    if (op.Name().Contains(DataNormLayerPrefix))
                    {
                        _hasNormalizationLayer = true;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ImageClassifierException("Failed to load the model - check the inner exception for more details", ex);
            }
        }
Beispiel #2
0
        public void LoadModel(string path)
        {
            var name = Path.GetFileNameWithoutExtension(path);

            path = name + ".pb";
            if (path.Equals(LastModelLoaded))
            {
                return;
            }

            var           info  = CorePackage.Entity.Type.Resource.Instance.Directory + name + ".txt";
            List <string> lines = new List <string>();

            using (StreamReader sr = new StreamReader(info))
            {
                while (sr.Peek() >= 0)
                {
                    lines.Add(sr.ReadLine());
                }
            }

            _inputName  = lines[0];
            _outputName = lines[1];
            var shape = lines[2].Replace(" ", "").Replace("(", "").Replace(")", "").Split(",");

            _inputSize = int.Parse(shape[1]);
            _lastDim   = int.Parse(shape[3]);
            CorePackage.Entity.Type.Resource.Instance.Directory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/";
            var modelFile = File.Open(CorePackage.Entity.Type.Resource.Instance.Directory + path, FileMode.Open);

            try
            {
                //var assets = Android.App.Application.Context.Assets;
                //using (var sr = new StreamReader(assets.Open(labelsFileName)))
                //{
                //    var content = sr.ReadToEnd();
                //    _labels = content.Split('\n').Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)).ToList();
                //}

                _inferenceInterface = new TensorFlowInferenceInterface(modelFile);
                LastModelLoaded     = path;
                var iter = _inferenceInterface.Graph().Operations();
                while (iter.HasNext && !_hasNormalizationLayer)
                {
                    var op = iter.Next() as Operation;
                    if (op.Name().Contains(DataNormLayerPrefix))
                    {
                        _hasNormalizationLayer = true;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new RuntimeException("Failed to load the model - check the inner exception for more details" + ex.Message);
            }
        }