public int Insert(string textFromImage) { #region TextProcessing var recognizedLines = _textProcessing.SplitToLines(textFromImage); var goodRecognizedLines = _textProcessing.CleanIrrelevantLines(recognizedLines); var storeName = _textProcessing.RecognizeStore(recognizedLines); var timestamp = _textProcessing.RecognizeDate(recognizedLines); var namesAndPrices = _textProcessing.GetNamesAndPricesFromLines(goodRecognizedLines); var namesInDb = namesAndPrices.Select(x => x.Key).ToList(); var prices = namesAndPrices.Select(x => x.Value).ToList(); var recognizedProductNames = _textProcessing.GetClosestProductsNames(namesInDb); #endregion var namesInDbAndPrices = new List <KeyValuePair <string, decimal> >(); var status = true; for (int i = 0; i < namesAndPrices.Count; i++) { namesInDbAndPrices.Add(new KeyValuePair <string, decimal>(recognizedProductNames[i], prices[i])); } var distinctProducts = _textProcessing.GetDistinctProducts(namesInDbAndPrices); using (_dataContext) { foreach (var item in distinctProducts) { var storeId = _dataContext.Stores.FirstOrDefault(y => y.Name == storeName).Id; var productId = _dataContext.Products.FirstOrDefault(y => y.Name == item.Key).Id; if (storeId == default(short) || productId == default(int)) { status = false; continue; } var x = new Record { Price = item.Value.Item1, Quantity = item.Value.Item2, TimeStamp = timestamp, StoreId = storeId, ProductId = productId }; _dataContext.Records.Add(x); } _dataContext.SaveChanges(); return(status ? 0 : 1); } }
/// <summary> /// Main method of converting image to /// Receipt instance that holds: /// list of products; /// timestamp; /// store name. /// </summary> /// <param name="textProcessing"></param> /// <param name="image"></param> /// <returns>Receipt instance.</returns> public Receipt ConvertImageToReceipt(byte[] imageArgs) { var ti = new TaskInit(_updater); var imageProcessing = new ImageProcessing(); // var image = (Bitmap)Image.FromStream(new MemoryStream(Convert.FromBase64String(imageArgs))); var image = new Bitmap("filename"); //TBD; depends on deserialization. var textFromImage = imageProcessing.GetTextFromImage(image); var recognizedLines = _textProcessing.SplitString(textFromImage.Result); var storeName = _textProcessing.RecognizeStore(recognizedLines); var timestamp = _textProcessing.RecognizeDate(recognizedLines); var goodRecognizedLines = _textProcessing.CleanIrrelevantLines(recognizedLines); var listOfProductDetails = _textProcessing.GetListOfNamesAndPrices(goodRecognizedLines); var listOfProducts = GetProducts(listOfProductDetails); ListInitialized += ti.OnListInitialized; ti.Receipt = new Receipt(listOfProducts, storeName, timestamp); OnListInitialized(); return(ti.Receipt); }