internal static RecognitionRoot Parse(string response)
        {
            try
            {
                List <InkRecognitionUnit> recoUnits = new List <InkRecognitionUnit>();
                RecognitionRoot           root      = null;

                var document = JsonDocument.Parse(response);
                foreach (var property in document.RootElement.EnumerateObject())
                {
                    if (property.Name == "recognitionUnits")
                    {
                        (root, recoUnits) = _parseRecognitionUnits(property.Value);
                        if (root == null)
                        {
                            //this is the preview version
                            root = new RecognitionRoot(new JsonElement());
                        }
                        root.SetInkRecognitionUnits(recoUnits);

                        // Post process Ink Recognition units
                        _setParentAndChildrenNodes(root);
                    }
                }
                return(root);
            }
            catch (Exception)
            {
                throw;
            }
        }
        private static Tuple <RecognitionRoot, List <InkRecognitionUnit> > _parseRecognitionUnits(JsonElement recoUnitsJson)
        {
            try
            {
                List <InkRecognitionUnit> recoUnits = new List <InkRecognitionUnit>();
                RecognitionRoot           root      = null;

                foreach (var recoUnitJson in recoUnitsJson.EnumerateArray())
                {
                    var category = recoUnitJson.GetProperty("category").GetString();
                    switch (category)
                    {
                    case "unknown":
                        var unclassifiedInk = new Unclassified(recoUnitJson);
                        recoUnits.Add(unclassifiedInk);
                        break;

                    case "writingRegion":
                        var recognizedWritingRegion = new RecognizedWritingRegion(recoUnitJson);
                        recoUnits.Add(recognizedWritingRegion);
                        break;

                    case "paragraph":
                        var recognizedParagraph = new RecognizedParagraph(recoUnitJson);
                        recoUnits.Add(recognizedParagraph);
                        break;

                    case "line":
                        var recognizedLine = new RecognizedLine(recoUnitJson);
                        recoUnits.Add(recognizedLine);
                        break;

                    case "inkWord":
                        var inkWord = new InkWord(recoUnitJson);
                        recoUnits.Add(inkWord);
                        break;

                    case "inkBullet":
                        var inkBullet = new InkBullet(recoUnitJson);
                        recoUnits.Add(inkBullet);
                        break;

                    case "inkDrawing":
                        var inkDrawing = new InkDrawing(recoUnitJson);
                        recoUnits.Add(inkDrawing);
                        break;

                    case "listItem":
                        var inkList = new RecognizedListItem(recoUnitJson);
                        recoUnits.Add(inkList);
                        break;
                    }
                }
                return(Tuple.Create(root, recoUnits));
            }
            catch (Exception)
            {
                throw;
            }
        }
        // </PrintError>

        // <PrintRecoUnits>
        private static string PrintRecoUnits(RecognitionRoot root, IEnumerable <InkRecognitionUnit> recoUnits)
        {
            var recognizedText = new StringBuilder();

            foreach (var recoUnit in recoUnits)
            {
                switch (recoUnit.Kind)
                {
                case InkRecognitionUnitKind.InkWord:
                    var word = recoUnit as InkWord;
                    recognizedText.Append(word.RecognizedText).Append(" ");
                    break;

                case InkRecognitionUnitKind.InkDrawing:
                    var shape     = recoUnit as InkDrawing;
                    var shapeKind = String.Format("[{0}] ", shape.RecognizedShape);
                    recognizedText.Append(shapeKind);
                    break;

                case InkRecognitionUnitKind.InkBullet:
                    var bullet = recoUnit as InkBullet;
                    recognizedText.Append(bullet.RecognizedText);
                    break;
                }
            }
            return(recognizedText.ToString());
        }
Exemple #4
0
        private void TestWritingRegion(RecognizedWritingRegion writingRegion, RecognitionRoot root)
        {
            Assert.IsNotNull(writingRegion);
            Assert.IsTrue(writingRegion.Id == 1);
            Assert.IsTrue(writingRegion.Kind == InkRecognitionUnitKind.RecognizedWritingRegion);
            // Assert.IsTrue(writingRegion.Parent == root);
            Assert.IsTrue(writingRegion.Children.Count() == 1);
            Assert.IsTrue(writingRegion.Paragraphs.Count() == 1);
            Assert.IsTrue(writingRegion.RecognizedText == "hey");

            var strokeIds = new List <long>()
            {
                95, 96, 97
            };

            Assert.IsTrue(writingRegion.StrokeIds.SequenceEqual(strokeIds));

            var boundingRect = new RectangleF();

            boundingRect.Height = 33.8f;
            boundingRect.X      = 37.9f;
            boundingRect.Y      = 16.7f;
            boundingRect.Width  = 34.8f;
            Assert.IsTrue(writingRegion.BoundingBox.Equals(boundingRect));

            var point1 = new PointF(40.1f, 12.8f);
            var point2 = new PointF(77.5f, 33.4f);
            var point3 = new PointF(66.8f, 53.6f);
            var point4 = new PointF(29.2f, 32.4f);
            var rotatedBoundingRect = new List <PointF> {
                point1, point2, point3, point4
            };

            Assert.IsTrue(writingRegion.RotatedBoundingBox.SequenceEqual(rotatedBoundingRect));
        }
        // </PrintShapes>

        // <Print>
        public static string Print(RecognitionRoot root)
        {
            var output = new StringBuilder();

            output.Append(PrintWords(root));
            output.Append(PrintShapes(root));
            return(output.ToString());
        }
        private static void _setParentAndChildrenNodes(RecognitionRoot root)
        {
            var recoUnits = root.GetInkRecognitionUnits();

            foreach (var recoUnit in recoUnits)
            {
                // Set parent node and children nodes for Ink Recognition units
                _setParentNode(root, recoUnit);
                _setChildrenNodes(root, recoUnit);
            }
        }
        private static void _setChildrenNodes(RecognitionRoot root, InkRecognitionUnit recoUnit)
        {
            var children = new List <InkRecognitionUnit>();

            if (recoUnit.ChildIds != null)
            {
                foreach (var childId in recoUnit.ChildIds)
                {
                    children.Add(root.FindInkRecognitionUnit(childId));
                }
            }
            recoUnit.Children = children;
        }
Exemple #8
0
        private void TestRootForDrawing(RecognitionRoot root)
        {
            Assert.IsNotNull(root);
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).Id == 0);
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).Kind == InkRecognitionUnitKind.RecognizedRoot);
            Assert.IsNull(root.GetInkRecognitionUnits().ElementAt(0).Parent);
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).Children.Count() == 1);
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).Children.ElementAt(0).Kind == InkRecognitionUnitKind.InkDrawing);

            var strokeIds = new List <long>()
            {
                95
            };

            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).StrokeIds.SequenceEqual(strokeIds));

            var boundingRect = new RectangleF();

            boundingRect.Height = 120.4f;
            boundingRect.X      = 47.8f;
            boundingRect.Y      = 18.2f;
            boundingRect.Width  = 207.5f;
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).BoundingBox.Equals(boundingRect));

            var point1 = new PointF(47.8f, 18.2f);
            var point2 = new PointF(254.5f, 18.25f);
            var point3 = new PointF(254.5f, 138.6f);
            var point4 = new PointF(47.8f, 138.6f);
            var rotatedBoundingRect = new List <PointF> {
                point1, point2, point3, point4
            };

            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).RotatedBoundingBox.SequenceEqual(rotatedBoundingRect));

            // Returns two InkRecognition units: Root and Drawing
            Assert.IsTrue(root.GetInkRecognitionUnits().Count() == 2);
            Assert.IsTrue(root.GetWords().Count() == 0);
            Assert.IsTrue(root.GetDrawings().Count() == 1);

            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.RecognizedRoot).Count() == 1);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.RecognizedWritingRegion).Count() == 0);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.RecognizedParagraph).Count() == 0);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.RecognizedLine).Count() == 0);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.InkWord).Count() == 0);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.InkDrawing).Count() == 1);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.InkBullet).Count() == 0);
        }
Exemple #9
0
        private void TestRootForWriting(RecognitionRoot root)
        {
            Assert.IsNotNull(root);
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).Id == 0);
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).Kind == InkRecognitionUnitKind.RecognizedRoot);
            Assert.IsNull(root.GetInkRecognitionUnits().ElementAt(0).Parent);
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).Children.Count() == 1);
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).Children.ElementAt(0).Kind == InkRecognitionUnitKind.RecognizedWritingRegion);

            var strokeIds = new List <long>()
            {
                95, 96, 97
            };

            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).StrokeIds.SequenceEqual(strokeIds));

            var boundingRect = new RectangleF();

            boundingRect.Height = 33.8f;
            boundingRect.X      = 37.9f;
            boundingRect.Y      = 16.7f;
            boundingRect.Width  = 34.8f;
            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).BoundingBox.Equals(boundingRect));

            var point1 = new PointF(40.1f, 12.8f);
            var point2 = new PointF(77.5f, 33.4f);
            var point3 = new PointF(66.8f, 53.6f);
            var point4 = new PointF(29.2f, 32.4f);
            var rotatedBoundingRect = new List <PointF> {
                point1, point2, point3, point4
            };

            Assert.IsTrue(root.GetInkRecognitionUnits().ElementAt(0).RotatedBoundingBox.SequenceEqual(rotatedBoundingRect));

            // Returns 5 InkRecognition units: Root, WritingRegion, Paragraph, Line, InkWord
            Assert.IsTrue(root.GetInkRecognitionUnits().Count() == 5);
            Assert.IsTrue(root.GetWords().Count() == 1);
            Assert.IsTrue(root.GetDrawings().Count() == 0);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.InkDrawing).Count() == 0);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.RecognizedWritingRegion).Count() == 1);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.RecognizedParagraph).Count() == 1);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.RecognizedLine).Count() == 1);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.InkWord).Count() == 1);
            Assert.IsTrue(root.GetInkRecognitionUnits(InkRecognitionUnitKind.InkBullet).Count() == 0);
        }
Exemple #10
0
        private void TestInkDrawing(InkDrawing drawing, RecognitionRoot root)
        {
            Assert.IsNotNull(drawing);
            Assert.IsTrue(drawing.Id == 1);
            Assert.IsTrue(drawing.Kind == InkRecognitionUnitKind.InkDrawing);
            //Assert.IsTrue(drawing.Parent == root);
            Assert.IsTrue(drawing.Children.Count() == 0);

            var point1 = new PointF(78.1f, 19.9f);
            var point2 = new PointF(103.8f, 66.5f);
            var point3 = new PointF(52.8f, 59.7f);
            var points = new List <PointF>()
            {
                point1, point2, point3
            };

            Assert.IsTrue(drawing.Points.SequenceEqual(points));

            Assert.IsTrue(drawing.RecognizedShape == RecognizedShape.Triangle);
            var center = new PointF(78.2f, 48.7f);

            Assert.IsTrue(drawing.Center.Equals(center));
            Assert.IsTrue(drawing.RotationAngle == 0.0f);

            var boundingRect = new RectangleF();

            boundingRect.Height = 47.6f;
            boundingRect.X      = 52.9f;
            boundingRect.Y      = 19.4f;
            boundingRect.Width  = 51.2f;
            Assert.IsTrue(drawing.BoundingBox.Equals(boundingRect));

            point1 = new PointF(79.5f, 18.7f);
            point2 = new PointF(103.5f, 67.0f);
            point3 = new PointF(64.3f, 86.4f);
            var point4 = new PointF(40.4f, 38.1f);
            var rotatedBoundingRect = new List <PointF> {
                point1, point2, point3, point4
            };

            Assert.IsTrue(drawing.RotatedBoundingBox.SequenceEqual(rotatedBoundingRect));
        }
        private static void _setParentNode(RecognitionRoot root, InkRecognitionUnit recoUnit)
        {
            var parentId = recoUnit.ParentId;

            recoUnit.Parent = root.FindInkRecognitionUnit(parentId);
        }
        // </PrintWords>

        // <PrintShapes>
        public static string PrintShapes(RecognitionRoot root)
        {
            var shapes = root.GetDrawings();

            return(PrintRecoUnits(root, shapes));
        }
        // <PrintWords>
        public static string PrintWords(RecognitionRoot root)
        {
            var words = root.GetWords();

            return(PrintRecoUnits(root, words));
        }