| // Copyright 2020 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Datatypes and interfaces of handwriting recognition API. |
| |
| // NOTE: This mojom exists in two places and must be kept in sync: |
| // Chromium: //chromeos/services/machine_learning/public/mojom/ |
| // Chrome OS: src/platform2/ml/mojom/ |
| // Note: Other repos downstream of Chromium might also use this mojom. |
| // Example: A backwards-compatible mojom change (and corresponding |
| // implementation change) can be made in Chrome OS first, then replicated to the |
| // clients (Chromium, other downstream repos) later. |
| // Use //chromeos/services/machine_learning/public/mojom/roll_mojom.sh to help |
| // replicate Chrome OS-side changes over to Chromium. |
| |
| module chromeos.machine_learning.mojom; |
| |
| import "ml/mojom/time.mojom"; |
| |
| // A single point in an ink stroke. |
| struct InkPoint { |
| // (x, y) coordinates of the point. The upper-left corner of the writing area |
| // is (0, 0). The positive x-axis points to the right. The positive y-axis |
| // points down. |
| float x; |
| float y; |
| // Optional TimeDelta from the point was captured relative to the beginning of |
| // the ink. So first point of a request should have t=0. |
| mojo_base.mojom.TimeDelta? t; |
| }; |
| |
| // A single ink stroke. |
| struct InkStroke { |
| // The set of points representing the stroke. |
| array<InkPoint> points; |
| }; |
| |
| // The writing guide shown to the user during input. |
| struct WritingGuide { |
| // Size of the writing area. The writing area must have (0, 0) at the top |
| // left. |
| // width is the max value of x-axis (to the right) and height is the max |
| // value of y-axis (to the bottom). |
| float width; |
| float height; |
| }; |
| |
| // Options that will influence the recognition output. |
| struct RecognitionContext { |
| // The writing guide shown to the user when the ink was captured. |
| WritingGuide? writing_guide; |
| // The context before the written text. |
| string? pre_context; |
| }; |
| |
| // Defines a handwriting recognition query. |
| struct HandwritingRecognitionQuery { |
| // The set of ink strokes to be recognized. |
| array<InkStroke> ink; |
| // The optional context in which the ink was generated. |
| RecognitionContext? context; |
| // Maximum number of results to be returned. |
| uint32 max_num_results; |
| // If true, returns the segmentation results. This will make the response |
| // struct much larger. |
| bool return_segmentation; |
| }; |
| |
| // Represents a contiguous range of ink. Start and end strokes / points are |
| // inclusive. |
| struct HandwritingRecognizerInkRange { |
| // Zero-based start- and end-stroke indices in the ink strokes. |
| uint32 start_stroke; |
| uint32 end_stroke; |
| // Zero-based start- and end-point indices with the start / end strokes. |
| uint32 start_point; |
| uint32 end_point; |
| }; |
| |
| // A segment defines the substrokes that are associated with a substring of the |
| // recognized text. |
| struct HandwritingRecognizerSegment { |
| // The substring of the recognized text represented by this segment. |
| string sublabel; |
| // The ink ranges represented by this segment. |
| array<HandwritingRecognizerInkRange> ink_ranges; |
| }; |
| |
| // The ink segmentation information. |
| struct HandwritingRecognizerSegmentation { |
| // The grouping of the cut strokes into characters. |
| array<HandwritingRecognizerSegment> segments; |
| }; |
| |
| // One possible candidate from the handwriting recognition. |
| struct HandwritingRecognizerCandidate { |
| // The recognized text. |
| string text; |
| // Scores will most often correspond to -log(p(c)) or a scaling thereof, so |
| // lower scores represent higher confidence. |
| float score; |
| // The stroke segmentation that was used to generate the result. |
| HandwritingRecognizerSegmentation? segmentation; |
| }; |
| |
| // The handwriting recognition response. |
| struct HandwritingRecognizerResult { |
| // Status of the recognition response. |
| enum Status { |
| OK = 0, |
| ERROR = 1, |
| }; |
| Status status; |
| |
| // The recognition candidates with additional alternatives, sorted by lower |
| // score first (lower score present higher confidence). |
| array<HandwritingRecognizerCandidate> candidates; |
| }; |
| |
| // The specification of a handwriting recognizer. |
| struct HandwritingRecognizerSpec { |
| // The language the recognizer will handle. Only "en" (for english) and |
| // "gesture_in_context" (for gesture) are supported. |
| string language; |
| }; |
| |
| // The mojom interface for performing the recognition of handwritten text. |
| interface HandwritingRecognizer { |
| // Performs handwriting recognition on a set of ink strokes, and returns a set |
| // of alternative recognition results. |
| Recognize(HandwritingRecognitionQuery query) => |
| (HandwritingRecognizerResult result); |
| }; |
| |
| // Enum indicates the result of LoadHandwritingModel in mlservice. |
| enum LoadHandwritingModelResult { |
| OK = 0, |
| |
| // Deprecated enum values. |
| DEPRECATED_MODEL_SPEC_ERROR = 1, |
| LOAD_MODEL_ERROR = 2, |
| |
| // If both USE.ondevice_handwriting and USE.ondevice_handwriting_dlc |
| // are not defined. (checked in chrome) |
| FEATURE_NOT_SUPPORTED_ERROR = 3, |
| |
| // If the required language is not in an allowlist, "en" and |
| // "gesture_in_context" for now. (checked in chrome) |
| LANGUAGE_NOT_SUPPORTED_ERROR = 4, |
| |
| // If the user goes to chrome://flag page and manually disable |
| // handwriting or handwriting_dlc. (checked in chrome) |
| FEATURE_DISABLED_BY_USER = 5, |
| |
| // if the USE.ondevice_handwriting_dlc is enabled, but dlc is not |
| // on the device. (checked in chrome) |
| DLC_DOES_NOT_EXIST = 6, |
| |
| // If the dlc is on the device, but InstallDlc returns an error. |
| // (checked in chrome). |
| DLC_INSTALL_ERROR = 7, |
| |
| // If dlc is installed successfully, but GetDlcState returns an error. |
| // (checked inside MachineLearningServiceImpl) |
| DLC_GET_PATH_ERROR = 8, |
| |
| // if loading libhandwriting.so fails. (checked inside HandWritingLibrary) |
| LOAD_NATIVE_LIB_ERROR = 9, |
| |
| // if getting the function pointers fails. (checked inside HandWritingLibrary) |
| LOAD_FUNC_PTR_ERROR = 10, |
| |
| // If loading model files fails. (checked inside HandWritingLibrary) |
| LOAD_MODEL_FILES_ERROR = 11, |
| }; |