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()); }
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; }
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); }
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); }
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)); }