blob: 938820a3a003c4fbe8470c89218317a802990eb4 [file] [log] [blame]
// Copyright 2016 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.vision.v1;
import "google/api/annotations.proto";
import "google/cloud/vision/v1/geometry.proto";
option cc_enable_arenas = true;
option go_package = "google.golang.org/genproto/googleapis/cloud/vision/v1;vision";
option java_multiple_files = true;
option java_outer_classname = "TextAnnotationProto";
option java_package = "com.google.cloud.vision.v1";
// TextAnnotation contains a structured representation of OCR extracted text.
// The hierarchy of an OCR extracted text structure is like this:
// TextAnnotation -> Page -> Block -> Paragraph -> Word -> Symbol
// Each structural component, starting from Page, may further have their own
// properties. Properties describe detected languages, breaks etc.. Please
// refer to the [google.cloud.vision.v1.TextAnnotation.TextProperty][google.cloud.vision.v1.TextAnnotation.TextProperty] message
// definition below for more detail.
message TextAnnotation {
// Detected language for a structural component.
message DetectedLanguage {
// The BCP-47 language code, such as "en-US" or "sr-Latn". For more
// information, see
// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
string language_code = 1;
// Confidence of detected language. Range [0, 1].
float confidence = 2;
}
// Detected start or end of a structural component.
message DetectedBreak {
// Enum to denote the type of break found. New line, space etc.
enum BreakType {
// Unknown break label type.
UNKNOWN = 0;
// Regular space.
SPACE = 1;
// Sure space (very wide).
SURE_SPACE = 2;
// Line-wrapping break.
EOL_SURE_SPACE = 3;
// End-line hyphen that is not present in text; does
HYPHEN = 4;
// not co-occur with SPACE, LEADER_SPACE, or
// LINE_BREAK.
// Line break that ends a paragraph.
LINE_BREAK = 5;
}
BreakType type = 1;
// True if break prepends the element.
bool is_prefix = 2;
}
// Additional information detected on the structural component.
message TextProperty {
// A list of detected languages together with confidence.
repeated DetectedLanguage detected_languages = 1;
// Detected start or end of a text segment.
DetectedBreak detected_break = 2;
}
// List of pages detected by OCR.
repeated Page pages = 1;
// UTF-8 text detected on the pages.
string text = 2;
}
// Detected page from OCR.
message Page {
// Additional information detected on the page.
TextAnnotation.TextProperty property = 1;
// Page width in pixels.
int32 width = 2;
// Page height in pixels.
int32 height = 3;
// List of blocks of text, images etc on this page.
repeated Block blocks = 4;
}
// Logical element on the page.
message Block {
// Type of a block (text, image etc) as identified by OCR.
enum BlockType {
// Unknown block type.
UNKNOWN = 0;
// Regular text block.
TEXT = 1;
// Table block.
TABLE = 2;
// Image block.
PICTURE = 3;
// Horizontal/vertical line box.
RULER = 4;
// Barcode block.
BARCODE = 5;
}
// Additional information detected for the block.
TextAnnotation.TextProperty property = 1;
// The bounding box for the block.
// The vertices are in the order of top-left, top-right, bottom-right,
// bottom-left. When a rotation of the bounding box is detected the rotation
// is represented as around the top-left corner as defined when the text is
// read in the 'natural' orientation.
// For example:
// * when the text is horizontal it might look like:
// 0----1
// | |
// 3----2
// * when it's rotated 180 degrees around the top-left corner it becomes:
// 2----3
// | |
// 1----0
// and the vertice order will still be (0, 1, 2, 3).
BoundingPoly bounding_box = 2;
// List of paragraphs in this block (if this blocks is of type text).
repeated Paragraph paragraphs = 3;
// Detected block type (text, image etc) for this block.
BlockType block_type = 4;
}
// Structural unit of text representing a number of words in certain order.
message Paragraph {
// Additional information detected for the paragraph.
TextAnnotation.TextProperty property = 1;
// The bounding box for the paragraph.
// The vertices are in the order of top-left, top-right, bottom-right,
// bottom-left. When a rotation of the bounding box is detected the rotation
// is represented as around the top-left corner as defined when the text is
// read in the 'natural' orientation.
// For example:
// * when the text is horizontal it might look like:
// 0----1
// | |
// 3----2
// * when it's rotated 180 degrees around the top-left corner it becomes:
// 2----3
// | |
// 1----0
// and the vertice order will still be (0, 1, 2, 3).
BoundingPoly bounding_box = 2;
// List of words in this paragraph.
repeated Word words = 3;
}
// A word representation.
message Word {
// Additional information detected for the word.
TextAnnotation.TextProperty property = 1;
// The bounding box for the word.
// The vertices are in the order of top-left, top-right, bottom-right,
// bottom-left. When a rotation of the bounding box is detected the rotation
// is represented as around the top-left corner as defined when the text is
// read in the 'natural' orientation.
// For example:
// * when the text is horizontal it might look like:
// 0----1
// | |
// 3----2
// * when it's rotated 180 degrees around the top-left corner it becomes:
// 2----3
// | |
// 1----0
// and the vertice order will still be (0, 1, 2, 3).
BoundingPoly bounding_box = 2;
// List of symbols in the word.
// The order of the symbols follows the natural reading order.
repeated Symbol symbols = 3;
}
// A single symbol representation.
message Symbol {
// Additional information detected for the symbol.
TextAnnotation.TextProperty property = 1;
// The bounding box for the symbol.
// The vertices are in the order of top-left, top-right, bottom-right,
// bottom-left. When a rotation of the bounding box is detected the rotation
// is represented as around the top-left corner as defined when the text is
// read in the 'natural' orientation.
// For example:
// * when the text is horizontal it might look like:
// 0----1
// | |
// 3----2
// * when it's rotated 180 degrees around the top-left corner it becomes:
// 2----3
// | |
// 1----0
// and the vertice order will still be (0, 1, 2, 3).
BoundingPoly bounding_box = 2;
// The actual UTF-8 representation of the symbol.
string text = 3;
}