Giter Site home page Giter Site logo

jhump / goprotoc Goto Github PK

View Code? Open in Web Editor NEW
85.0 9.0 6.0 153 KB

Library for writing protoc plugins in Go; also includes a pure-Go protoc replacement

License: Apache License 2.0

Go 98.28% Makefile 1.72%
go golang protobuf protocol-buffers protoc-plugin codegeneration

goprotoc's Introduction

Go-protoc

Build Status Go Report Card GoDoc

This repo makes it easy to work in the protobuf tool chain using Go.

Writing Plugins for protoc

First and foremost, the included plugins package makes it easy to implement protoc plugins in Go. It defines an interface that plugins implement as well as facilities to actually integrate with protoc (e.g. implementing the proper plugin protocol). It also provides "name resolution" logic: computing qualified names in Go source code for elements in proto descriptors. This makes it a snap to write plugins in Go that generate additional Go code from your proto sources.

Pure Go version of protoc

This repo also contains a pure-Go re-implementation of protoc. This new version of protoc, named goprotoc (of course!), will delegate to a protoc executable on the path, driving it as if it were a plugin, for generating C++, C#, Objective-C, Java, JavaScript, Python, PHP, and Ruby code (since they are implemented in protoc itself). But it provides descriptors to protoc, parsed by goprotoc, instead of having protoc re-parse all of the source code. And it can invoke any other plugins (such as protoc-gen-go) the same way that protoc would.

In addition to the goprotoc command, this repo provides a package that other Go programs can use as the entry-point to running Protocol Buffer code gen, without having to shell out to an external program.

Extras

You'll also find a protoc plugin named protoc-gen-gox that can be the entry point for generating Go code. It will delegate to protoc-gen-go for standard code gen and gRPC code gen, but it can also be configured to execute other plugins that emit additional Go code. It's sort of like a plugin multiplexer that supports a configuration file for enabling and configuring the various plugins that it invokes.

goprotoc's People

Contributors

bufdev avatar jhump avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

goprotoc's Issues

opts.pluginDefs is always nil, panics when using --plugin

I'm trying to use --plugin, but doing so breaks, as opts.pluginDefs is always nil, and never an allocated map.

panic: assignment to entry in nil map

goroutine 1 [running]:
github.com/jhump/goprotoc/app/goprotoc.parseFlags(0x0, 0x0, 0x7ffcc6e22009, 0x8, 0xc0000101f0, 0x5, 0x5, 0x7f7380, 0xc00000e018, 0xc000041e08, ...)
	/home/jake/go/pkg/mod/github.com/jhump/[email protected]/app/goprotoc/options.go:174 +0x13b5
github.com/jhump/goprotoc/app/goprotoc.run(0xc0000101e0, 0x6, 0x6, 0x7f7360, 0xc00000e010, 0x7f7380, 0xc00000e018, 0x7f7380, 0xc00000e020, 0xc000073a01, ...)
	/home/jake/go/pkg/mod/github.com/jhump/[email protected]/app/goprotoc/goprotoc.go:48 +0x157
github.com/jhump/goprotoc/app/goprotoc.Run(0xc0000101e0, 0x6, 0x6, 0x7f7360, 0xc00000e010, 0x7f7380, 0xc00000e018, 0x7f7380, 0xc00000e020, 0x6d1df7)
	/home/jake/go/pkg/mod/github.com/jhump/[email protected]/app/goprotoc/goprotoc.go:35 +0x97
github.com/jhump/goprotoc/app/goprotoc.Main()
	/home/jake/go/pkg/mod/github.com/jhump/[email protected]/app/goprotoc/goprotoc.go:30 +0x8a
main.main()
	/home/jake/go/pkg/mod/github.com/jhump/[email protected]/cmd/goprotoc/goprotoc.go:22 +0x20

Recommendation: add disclaimer regarding using this to implement protoc plugins

Howdy, what's the status of this project?

I ask as, in the process of attempting to implement a protoc plugin (a while ago - I've kinda forgotten the details), I ran into significant issues with the name (and maybe type, I don't remember unfortunately) resolution, provided by this module.

I believe that the core problem was in the general vicinity of

type GoNames struct {
, and related to the generated field name resolution not being 1-1 with the protoc-gen-go implementation. I'd imagine it'd be possible to trigger at least similar issues if there are fields which collide with generated getters.

Anyway, you're probably aware that google.golang.org/protobuf/compiler/protogen is a thing, nowadays. IMO it would be best to advertise the official protogen package in the readme of this package, particularly due to #37 .

This project seems kinda like a connector for https://github.com/jhump/gopoet , which I did end up using, and quite liked. It did what I needed and was easy to understand and use. It's just something I slapped together, but I've implemented a vaguely similar type cache myself, connecting gopoet and the official protogen packages (I don't mean that as a self plug, just a FYI).

mentioned above: https://github.com/joeycumines/gopoet-protogen
example usage of the above module: https://github.com/joeycumines/protoc-gen-go-copy

Dependency management needed for testing when Golang Modules not used

Right now, when Golang Modules are not used in testing, the latest version of each dependency is pulled, not a specific version. This is going to cause breakages with tests at some point, and also makes it difficult for users who do not use Golang Modules to know what versions of dependencies to use.

This probably just means setting up https://github.com/golang/dep so this repository has a Gopkg.toml and Gopkg.lock.

Plugins Usage Example

The plugins package has some decent documentation, but I can't tell how it's actually intended to be used. Could you create an example, perhaps in plugins/README.md?

As an idea, what if I wanted to codegen a copy of the structs created by protoc-gen-go, but with different struct tags? How would that look? I get a little taste of it from the docs but I feel like I'm missing a lot of context.

Finish the goprotoc command

The plugins package is fairly complete (though could likely use more tests). But the goprotoc command is unfinished and hasn't been touched in a while. This issue is just a reminder to myself to finish it.

This command was referenced recently in a protoc proposal to supply an alternative CLI written in Go.

While looking around, I found a similar project that appears to have been started 5 years ago and then never finished either: https://github.com/dropbox/goprotoc

Since the dropbox one appears to be abandon-ware, this repo could be a reasonable home for an open-source fork of protoc that is an all-Go alternative.

How to get extend options of a message?

Hi, sometimes we need to defined some extend options, but it seems that goprotoc does not expose any interface for us to get our options. For example, here is my .proto file:

syntax = "proto3";

import "google/protobuf/descriptor.proto";

extend google.protobuf.MessageOptions {
    string my_option = 51234;
}

message A {
    option (my_option) = "Hello world!";
}

If I print out the message options in the example callback, like this:

func doCodeGen(req *plugins.CodeGenRequest, rsp *plugins.CodeGenResponse) error {
    fmt.Println(req.Files[0].GetMessageTypes()[0].GetMessageOptions())
}

I will get these output in console:

51234:"Hello world!" 

It seems that user defined options is recorded in some map, but there is no way for me to get the option my_option by myself. By the way, I tried to find the option by GetUninterpretedOption method, but the following code returns 0.

len(req.Files[0].GetMessageTypes()[0].GetMessageOptions().GetUninterpretedOption())

Different FileDescriptorProto ordering when --include_imports not set

This used goprotoc and protoc to compare.

Package: https://github.com/googleapis/googleapis/tree/master/google/cloud/vision/v1p4beta1
Effective command (run from root of googleapis): [protoc,goprotoc] -I . google/cloud/vision/v1p4beta1/*;proto

The issue is the ordering of the FileDescriptorProtos when --include_imports is not set.

protoc order:

"google/cloud/vision/v1p4beta1/geometry.proto"
"google/cloud/vision/v1p4beta1/product_search_service.proto"
"google/cloud/vision/v1p4beta1/product_search.proto"
"google/cloud/vision/v1p4beta1/text_annotation.proto"
"google/cloud/vision/v1p4beta1/web_detection.proto"
"google/cloud/vision/v1p4beta1/image_annotator.proto"

goprotoc order:

"google/cloud/vision/v1p4beta1/geometry.proto"
"google/cloud/vision/v1p4beta1/image_annotator.proto"
"google/cloud/vision/v1p4beta1/product_search.proto"
"google/cloud/vision/v1p4beta1/product_search_service.proto"
"google/cloud/vision/v1p4beta1/text_annotation.proto"
"google/cloud/vision/v1p4beta1/web_detection.proto"

protoc FileDescriptorSet JSON dump:

{
  "file": [
    {
      "name": "google/cloud/vision/v1p4beta1/geometry.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto"
      ],
      "messageType": [
        {
          "name": "Vertex",
          "field": [
            {
              "name": "x",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "x"
            },
            {
              "name": "y",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "y"
            }
          ]
        },
        {
          "name": "NormalizedVertex",
          "field": [
            {
              "name": "x",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "x"
            },
            {
              "name": "y",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "y"
            }
          ]
        },
        {
          "name": "BoundingPoly",
          "field": [
            {
              "name": "vertices",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Vertex",
              "jsonName": "vertices"
            },
            {
              "name": "normalized_vertices",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.NormalizedVertex",
              "jsonName": "normalizedVertices"
            }
          ]
        },
        {
          "name": "Position",
          "field": [
            {
              "name": "x",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "x"
            },
            {
              "name": "y",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "y"
            },
            {
              "name": "z",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "z"
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "GeometryProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/product_search_service.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto",
        "google/cloud/vision/v1p4beta1/geometry.proto",
        "google/longrunning/operations.proto",
        "google/protobuf/empty.proto",
        "google/protobuf/field_mask.proto",
        "google/protobuf/timestamp.proto",
        "google/rpc/status.proto"
      ],
      "messageType": [
        {
          "name": "Product",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "display_name",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "displayName"
            },
            {
              "name": "description",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "description"
            },
            {
              "name": "product_category",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "productCategory"
            },
            {
              "name": "product_labels",
              "number": 5,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product.KeyValue",
              "jsonName": "productLabels"
            }
          ],
          "nestedType": [
            {
              "name": "KeyValue",
              "field": [
                {
                  "name": "key",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "key"
                },
                {
                  "name": "value",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "value"
                }
              ]
            }
          ]
        },
        {
          "name": "ProductSet",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "display_name",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "displayName"
            },
            {
              "name": "index_time",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "indexTime"
            },
            {
              "name": "index_error",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.rpc.Status",
              "jsonName": "indexError"
            }
          ]
        },
        {
          "name": "ReferenceImage",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "uri",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "uri"
            },
            {
              "name": "bounding_polys",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPolys"
            }
          ]
        },
        {
          "name": "CreateProductRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "product",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product",
              "jsonName": "product"
            },
            {
              "name": "product_id",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "productId"
            }
          ]
        },
        {
          "name": "ListProductsRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "pageToken"
            }
          ]
        },
        {
          "name": "ListProductsResponse",
          "field": [
            {
              "name": "products",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product",
              "jsonName": "products"
            },
            {
              "name": "next_page_token",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "nextPageToken"
            }
          ]
        },
        {
          "name": "GetProductRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "UpdateProductRequest",
          "field": [
            {
              "name": "product",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product",
              "jsonName": "product"
            },
            {
              "name": "update_mask",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.FieldMask",
              "jsonName": "updateMask"
            }
          ]
        },
        {
          "name": "DeleteProductRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "CreateProductSetRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "product_set",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSet",
              "jsonName": "productSet"
            },
            {
              "name": "product_set_id",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "productSetId"
            }
          ]
        },
        {
          "name": "ListProductSetsRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "pageToken"
            }
          ]
        },
        {
          "name": "ListProductSetsResponse",
          "field": [
            {
              "name": "product_sets",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSet",
              "jsonName": "productSets"
            },
            {
              "name": "next_page_token",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "nextPageToken"
            }
          ]
        },
        {
          "name": "GetProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "UpdateProductSetRequest",
          "field": [
            {
              "name": "product_set",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSet",
              "jsonName": "productSet"
            },
            {
              "name": "update_mask",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.FieldMask",
              "jsonName": "updateMask"
            }
          ]
        },
        {
          "name": "DeleteProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "CreateReferenceImageRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "reference_image",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "jsonName": "referenceImage"
            },
            {
              "name": "reference_image_id",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "referenceImageId"
            }
          ]
        },
        {
          "name": "ListReferenceImagesRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "pageToken"
            }
          ]
        },
        {
          "name": "ListReferenceImagesResponse",
          "field": [
            {
              "name": "reference_images",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "jsonName": "referenceImages"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "next_page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "nextPageToken"
            }
          ]
        },
        {
          "name": "GetReferenceImageRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "DeleteReferenceImageRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "AddProductToProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "product",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "product"
            }
          ]
        },
        {
          "name": "RemoveProductFromProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "product",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "product"
            }
          ]
        },
        {
          "name": "ListProductsInProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "pageToken"
            }
          ]
        },
        {
          "name": "ListProductsInProductSetResponse",
          "field": [
            {
              "name": "products",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product",
              "jsonName": "products"
            },
            {
              "name": "next_page_token",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "nextPageToken"
            }
          ]
        },
        {
          "name": "ImportProductSetsGcsSource",
          "field": [
            {
              "name": "csv_file_uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "csvFileUri"
            }
          ]
        },
        {
          "name": "ImportProductSetsInputConfig",
          "field": [
            {
              "name": "gcs_source",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImportProductSetsGcsSource",
              "oneofIndex": 0,
              "jsonName": "gcsSource"
            }
          ],
          "oneofDecl": [
            {
              "name": "source"
            }
          ]
        },
        {
          "name": "ImportProductSetsRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "input_config",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImportProductSetsInputConfig",
              "jsonName": "inputConfig"
            }
          ]
        },
        {
          "name": "ImportProductSetsResponse",
          "field": [
            {
              "name": "reference_images",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "jsonName": "referenceImages"
            },
            {
              "name": "statuses",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.rpc.Status",
              "jsonName": "statuses"
            }
          ]
        },
        {
          "name": "BatchOperationMetadata",
          "field": [
            {
              "name": "state",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.BatchOperationMetadata.State",
              "jsonName": "state"
            },
            {
              "name": "submit_time",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "submitTime"
            },
            {
              "name": "end_time",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "endTime"
            }
          ],
          "enumType": [
            {
              "name": "State",
              "value": [
                {
                  "name": "STATE_UNSPECIFIED",
                  "number": 0
                },
                {
                  "name": "PROCESSING",
                  "number": 1
                },
                {
                  "name": "SUCCESSFUL",
                  "number": 2
                },
                {
                  "name": "FAILED",
                  "number": 3
                },
                {
                  "name": "CANCELLED",
                  "number": 4
                }
              ]
            }
          ]
        }
      ],
      "service": [
        {
          "name": "ProductSearch",
          "method": [
            {
              "name": "CreateProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.CreateProductSetRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ProductSet",
              "options": {

              }
            },
            {
              "name": "ListProductSets",
              "inputType": ".google.cloud.vision.v1p4beta1.ListProductSetsRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ListProductSetsResponse",
              "options": {

              }
            },
            {
              "name": "GetProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.GetProductSetRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ProductSet",
              "options": {

              }
            },
            {
              "name": "UpdateProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.UpdateProductSetRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ProductSet",
              "options": {

              }
            },
            {
              "name": "DeleteProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.DeleteProductSetRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "CreateProduct",
              "inputType": ".google.cloud.vision.v1p4beta1.CreateProductRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.Product",
              "options": {

              }
            },
            {
              "name": "ListProducts",
              "inputType": ".google.cloud.vision.v1p4beta1.ListProductsRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ListProductsResponse",
              "options": {

              }
            },
            {
              "name": "GetProduct",
              "inputType": ".google.cloud.vision.v1p4beta1.GetProductRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.Product",
              "options": {

              }
            },
            {
              "name": "UpdateProduct",
              "inputType": ".google.cloud.vision.v1p4beta1.UpdateProductRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.Product",
              "options": {

              }
            },
            {
              "name": "DeleteProduct",
              "inputType": ".google.cloud.vision.v1p4beta1.DeleteProductRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "CreateReferenceImage",
              "inputType": ".google.cloud.vision.v1p4beta1.CreateReferenceImageRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "options": {

              }
            },
            {
              "name": "DeleteReferenceImage",
              "inputType": ".google.cloud.vision.v1p4beta1.DeleteReferenceImageRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "ListReferenceImages",
              "inputType": ".google.cloud.vision.v1p4beta1.ListReferenceImagesRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ListReferenceImagesResponse",
              "options": {

              }
            },
            {
              "name": "GetReferenceImage",
              "inputType": ".google.cloud.vision.v1p4beta1.GetReferenceImageRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "options": {

              }
            },
            {
              "name": "AddProductToProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.AddProductToProductSetRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "RemoveProductFromProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.RemoveProductFromProductSetRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "ListProductsInProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.ListProductsInProductSetRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ListProductsInProductSetResponse",
              "options": {

              }
            },
            {
              "name": "ImportProductSets",
              "inputType": ".google.cloud.vision.v1p4beta1.ImportProductSetsRequest",
              "outputType": ".google.longrunning.Operation",
              "options": {

              }
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "ProductSearchServiceProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/product_search.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto",
        "google/cloud/vision/v1p4beta1/geometry.proto",
        "google/cloud/vision/v1p4beta1/product_search_service.proto",
        "google/protobuf/timestamp.proto"
      ],
      "messageType": [
        {
          "name": "ProductSearchParams",
          "field": [
            {
              "name": "bounding_poly",
              "number": 9,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            },
            {
              "name": "product_set",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "productSet"
            },
            {
              "name": "product_categories",
              "number": 7,
              "label": "LABEL_REPEATED",
              "type": "TYPE_STRING",
              "jsonName": "productCategories"
            },
            {
              "name": "filter",
              "number": 8,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "filter"
            }
          ]
        },
        {
          "name": "ProductSearchResults",
          "field": [
            {
              "name": "index_time",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "indexTime"
            },
            {
              "name": "results",
              "number": 5,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchResults.Result",
              "jsonName": "results"
            },
            {
              "name": "product_grouped_results",
              "number": 6,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchResults.GroupedResult",
              "jsonName": "productGroupedResults"
            }
          ],
          "nestedType": [
            {
              "name": "Result",
              "field": [
                {
                  "name": "product",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.Product",
                  "jsonName": "product"
                },
                {
                  "name": "score",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "score"
                },
                {
                  "name": "image",
                  "number": 3,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "image"
                }
              ]
            },
            {
              "name": "GroupedResult",
              "field": [
                {
                  "name": "bounding_poly",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
                  "jsonName": "boundingPoly"
                },
                {
                  "name": "results",
                  "number": 2,
                  "label": "LABEL_REPEATED",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchResults.Result",
                  "jsonName": "results"
                }
              ]
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "ProductSearchProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/text_annotation.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto",
        "google/cloud/vision/v1p4beta1/geometry.proto"
      ],
      "messageType": [
        {
          "name": "TextAnnotation",
          "field": [
            {
              "name": "pages",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Page",
              "jsonName": "pages"
            },
            {
              "name": "text",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "text"
            }
          ],
          "nestedType": [
            {
              "name": "DetectedLanguage",
              "field": [
                {
                  "name": "language_code",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "languageCode"
                },
                {
                  "name": "confidence",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "confidence"
                }
              ]
            },
            {
              "name": "DetectedBreak",
              "field": [
                {
                  "name": "type",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_ENUM",
                  "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.DetectedBreak.BreakType",
                  "jsonName": "type"
                },
                {
                  "name": "is_prefix",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_BOOL",
                  "jsonName": "isPrefix"
                }
              ],
              "enumType": [
                {
                  "name": "BreakType",
                  "value": [
                    {
                      "name": "UNKNOWN",
                      "number": 0
                    },
                    {
                      "name": "SPACE",
                      "number": 1
                    },
                    {
                      "name": "SURE_SPACE",
                      "number": 2
                    },
                    {
                      "name": "EOL_SURE_SPACE",
                      "number": 3
                    },
                    {
                      "name": "HYPHEN",
                      "number": 4
                    },
                    {
                      "name": "LINE_BREAK",
                      "number": 5
                    }
                  ]
                }
              ]
            },
            {
              "name": "TextProperty",
              "field": [
                {
                  "name": "detected_languages",
                  "number": 1,
                  "label": "LABEL_REPEATED",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.DetectedLanguage",
                  "jsonName": "detectedLanguages"
                },
                {
                  "name": "detected_break",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.DetectedBreak",
                  "jsonName": "detectedBreak"
                }
              ]
            }
          ]
        },
        {
          "name": "Page",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "width",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "width"
            },
            {
              "name": "height",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "height"
            },
            {
              "name": "blocks",
              "number": 4,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Block",
              "jsonName": "blocks"
            },
            {
              "name": "confidence",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ]
        },
        {
          "name": "Block",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "bounding_box",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingBox"
            },
            {
              "name": "paragraphs",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Paragraph",
              "jsonName": "paragraphs"
            },
            {
              "name": "block_type",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Block.BlockType",
              "jsonName": "blockType"
            },
            {
              "name": "confidence",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ],
          "enumType": [
            {
              "name": "BlockType",
              "value": [
                {
                  "name": "UNKNOWN",
                  "number": 0
                },
                {
                  "name": "TEXT",
                  "number": 1
                },
                {
                  "name": "TABLE",
                  "number": 2
                },
                {
                  "name": "PICTURE",
                  "number": 3
                },
                {
                  "name": "RULER",
                  "number": 4
                },
                {
                  "name": "BARCODE",
                  "number": 5
                }
              ]
            }
          ]
        },
        {
          "name": "Paragraph",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "bounding_box",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingBox"
            },
            {
              "name": "words",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Word",
              "jsonName": "words"
            },
            {
              "name": "confidence",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ]
        },
        {
          "name": "Word",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "bounding_box",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingBox"
            },
            {
              "name": "symbols",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Symbol",
              "jsonName": "symbols"
            },
            {
              "name": "confidence",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ]
        },
        {
          "name": "Symbol",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "bounding_box",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingBox"
            },
            {
              "name": "text",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "text"
            },
            {
              "name": "confidence",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "TextAnnotationProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/web_detection.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto"
      ],
      "messageType": [
        {
          "name": "WebDetection",
          "field": [
            {
              "name": "web_entities",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebEntity",
              "jsonName": "webEntities"
            },
            {
              "name": "full_matching_images",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
              "jsonName": "fullMatchingImages"
            },
            {
              "name": "partial_matching_images",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
              "jsonName": "partialMatchingImages"
            },
            {
              "name": "pages_with_matching_images",
              "number": 4,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebPage",
              "jsonName": "pagesWithMatchingImages"
            },
            {
              "name": "visually_similar_images",
              "number": 6,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
              "jsonName": "visuallySimilarImages"
            },
            {
              "name": "best_guess_labels",
              "number": 8,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebLabel",
              "jsonName": "bestGuessLabels"
            }
          ],
          "nestedType": [
            {
              "name": "WebEntity",
              "field": [
                {
                  "name": "entity_id",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "entityId"
                },
                {
                  "name": "score",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "score"
                },
                {
                  "name": "description",
                  "number": 3,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "description"
                }
              ]
            },
            {
              "name": "WebImage",
              "field": [
                {
                  "name": "url",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "url"
                },
                {
                  "name": "score",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "score"
                }
              ]
            },
            {
              "name": "WebLabel",
              "field": [
                {
                  "name": "label",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "label"
                },
                {
                  "name": "language_code",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "languageCode"
                }
              ]
            },
            {
              "name": "WebPage",
              "field": [
                {
                  "name": "url",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "url"
                },
                {
                  "name": "score",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "score"
                },
                {
                  "name": "page_title",
                  "number": 3,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "pageTitle"
                },
                {
                  "name": "full_matching_images",
                  "number": 4,
                  "label": "LABEL_REPEATED",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
                  "jsonName": "fullMatchingImages"
                },
                {
                  "name": "partial_matching_images",
                  "number": 5,
                  "label": "LABEL_REPEATED",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
                  "jsonName": "partialMatchingImages"
                }
              ]
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "WebDetectionProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/image_annotator.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto",
        "google/cloud/vision/v1p4beta1/geometry.proto",
        "google/cloud/vision/v1p4beta1/product_search.proto",
        "google/cloud/vision/v1p4beta1/text_annotation.proto",
        "google/cloud/vision/v1p4beta1/web_detection.proto",
        "google/longrunning/operations.proto",
        "google/protobuf/field_mask.proto",
        "google/protobuf/timestamp.proto",
        "google/rpc/status.proto",
        "google/type/color.proto",
        "google/type/latlng.proto"
      ],
      "messageType": [
        {
          "name": "Feature",
          "field": [
            {
              "name": "type",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Feature.Type",
              "jsonName": "type"
            },
            {
              "name": "max_results",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "maxResults"
            },
            {
              "name": "model",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "model"
            }
          ],
          "enumType": [
            {
              "name": "Type",
              "value": [
                {
                  "name": "TYPE_UNSPECIFIED",
                  "number": 0
                },
                {
                  "name": "FACE_DETECTION",
                  "number": 1
                },
                {
                  "name": "LANDMARK_DETECTION",
                  "number": 2
                },
                {
                  "name": "LOGO_DETECTION",
                  "number": 3
                },
                {
                  "name": "LABEL_DETECTION",
                  "number": 4
                },
                {
                  "name": "TEXT_DETECTION",
                  "number": 5
                },
                {
                  "name": "DOCUMENT_TEXT_DETECTION",
                  "number": 11
                },
                {
                  "name": "SAFE_SEARCH_DETECTION",
                  "number": 6
                },
                {
                  "name": "IMAGE_PROPERTIES",
                  "number": 7
                },
                {
                  "name": "CROP_HINTS",
                  "number": 9
                },
                {
                  "name": "WEB_DETECTION",
                  "number": 10
                },
                {
                  "name": "PRODUCT_SEARCH",
                  "number": 12
                },
                {
                  "name": "OBJECT_LOCALIZATION",
                  "number": 19
                }
              ]
            }
          ]
        },
        {
          "name": "ImageSource",
          "field": [
            {
              "name": "gcs_image_uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "gcsImageUri"
            },
            {
              "name": "image_uri",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "imageUri"
            }
          ]
        },
        {
          "name": "Image",
          "field": [
            {
              "name": "content",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_BYTES",
              "jsonName": "content"
            },
            {
              "name": "source",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageSource",
              "jsonName": "source"
            }
          ]
        },
        {
          "name": "FaceAnnotation",
          "field": [
            {
              "name": "bounding_poly",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            },
            {
              "name": "fd_bounding_poly",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "fdBoundingPoly"
            },
            {
              "name": "landmarks",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.FaceAnnotation.Landmark",
              "jsonName": "landmarks"
            },
            {
              "name": "roll_angle",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "rollAngle"
            },
            {
              "name": "pan_angle",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "panAngle"
            },
            {
              "name": "tilt_angle",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "tiltAngle"
            },
            {
              "name": "detection_confidence",
              "number": 7,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "detectionConfidence"
            },
            {
              "name": "landmarking_confidence",
              "number": 8,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "landmarkingConfidence"
            },
            {
              "name": "joy_likelihood",
              "number": 9,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "joyLikelihood"
            },
            {
              "name": "sorrow_likelihood",
              "number": 10,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "sorrowLikelihood"
            },
            {
              "name": "anger_likelihood",
              "number": 11,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "angerLikelihood"
            },
            {
              "name": "surprise_likelihood",
              "number": 12,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "surpriseLikelihood"
            },
            {
              "name": "under_exposed_likelihood",
              "number": 13,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "underExposedLikelihood"
            },
            {
              "name": "blurred_likelihood",
              "number": 14,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "blurredLikelihood"
            },
            {
              "name": "headwear_likelihood",
              "number": 15,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "headwearLikelihood"
            }
          ],
          "nestedType": [
            {
              "name": "Landmark",
              "field": [
                {
                  "name": "type",
                  "number": 3,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_ENUM",
                  "typeName": ".google.cloud.vision.v1p4beta1.FaceAnnotation.Landmark.Type",
                  "jsonName": "type"
                },
                {
                  "name": "position",
                  "number": 4,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.Position",
                  "jsonName": "position"
                }
              ],
              "enumType": [
                {
                  "name": "Type",
                  "value": [
                    {
                      "name": "UNKNOWN_LANDMARK",
                      "number": 0
                    },
                    {
                      "name": "LEFT_EYE",
                      "number": 1
                    },
                    {
                      "name": "RIGHT_EYE",
                      "number": 2
                    },
                    {
                      "name": "LEFT_OF_LEFT_EYEBROW",
                      "number": 3
                    },
                    {
                      "name": "RIGHT_OF_LEFT_EYEBROW",
                      "number": 4
                    },
                    {
                      "name": "LEFT_OF_RIGHT_EYEBROW",
                      "number": 5
                    },
                    {
                      "name": "RIGHT_OF_RIGHT_EYEBROW",
                      "number": 6
                    },
                    {
                      "name": "MIDPOINT_BETWEEN_EYES",
                      "number": 7
                    },
                    {
                      "name": "NOSE_TIP",
                      "number": 8
                    },
                    {
                      "name": "UPPER_LIP",
                      "number": 9
                    },
                    {
                      "name": "LOWER_LIP",
                      "number": 10
                    },
                    {
                      "name": "MOUTH_LEFT",
                      "number": 11
                    },
                    {
                      "name": "MOUTH_RIGHT",
                      "number": 12
                    },
                    {
                      "name": "MOUTH_CENTER",
                      "number": 13
                    },
                    {
                      "name": "NOSE_BOTTOM_RIGHT",
                      "number": 14
                    },
                    {
                      "name": "NOSE_BOTTOM_LEFT",
                      "number": 15
                    },
                    {
                      "name": "NOSE_BOTTOM_CENTER",
                      "number": 16
                    },
                    {
                      "name": "LEFT_EYE_TOP_BOUNDARY",
                      "number": 17
                    },
                    {
                      "name": "LEFT_EYE_RIGHT_CORNER",
                      "number": 18
                    },
                    {
                      "name": "LEFT_EYE_BOTTOM_BOUNDARY",
                      "number": 19
                    },
                    {
                      "name": "LEFT_EYE_LEFT_CORNER",
                      "number": 20
                    },
                    {
                      "name": "RIGHT_EYE_TOP_BOUNDARY",
                      "number": 21
                    },
                    {
                      "name": "RIGHT_EYE_RIGHT_CORNER",
                      "number": 22
                    },
                    {
                      "name": "RIGHT_EYE_BOTTOM_BOUNDARY",
                      "number": 23
                    },
                    {
                      "name": "RIGHT_EYE_LEFT_CORNER",
                      "number": 24
                    },
                    {
                      "name": "LEFT_EYEBROW_UPPER_MIDPOINT",
                      "number": 25
                    },
                    {
                      "name": "RIGHT_EYEBROW_UPPER_MIDPOINT",
                      "number": 26
                    },
                    {
                      "name": "LEFT_EAR_TRAGION",
                      "number": 27
                    },
                    {
                      "name": "RIGHT_EAR_TRAGION",
                      "number": 28
                    },
                    {
                      "name": "LEFT_EYE_PUPIL",
                      "number": 29
                    },
                    {
                      "name": "RIGHT_EYE_PUPIL",
                      "number": 30
                    },
                    {
                      "name": "FOREHEAD_GLABELLA",
                      "number": 31
                    },
                    {
                      "name": "CHIN_GNATHION",
                      "number": 32
                    },
                    {
                      "name": "CHIN_LEFT_GONION",
                      "number": 33
                    },
                    {
                      "name": "CHIN_RIGHT_GONION",
                      "number": 34
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name": "LocationInfo",
          "field": [
            {
              "name": "lat_lng",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.type.LatLng",
              "jsonName": "latLng"
            }
          ]
        },
        {
          "name": "Property",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "value",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "value"
            },
            {
              "name": "uint64_value",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_UINT64",
              "jsonName": "uint64Value"
            }
          ]
        },
        {
          "name": "EntityAnnotation",
          "field": [
            {
              "name": "mid",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "mid"
            },
            {
              "name": "locale",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "locale"
            },
            {
              "name": "description",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "description"
            },
            {
              "name": "score",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "score"
            },
            {
              "name": "confidence",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence",
              "options": {
                "deprecated": true
              }
            },
            {
              "name": "topicality",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "topicality"
            },
            {
              "name": "bounding_poly",
              "number": 7,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            },
            {
              "name": "locations",
              "number": 8,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.LocationInfo",
              "jsonName": "locations"
            },
            {
              "name": "properties",
              "number": 9,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Property",
              "jsonName": "properties"
            }
          ]
        },
        {
          "name": "LocalizedObjectAnnotation",
          "field": [
            {
              "name": "mid",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "mid"
            },
            {
              "name": "language_code",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "languageCode"
            },
            {
              "name": "name",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "score",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "score"
            },
            {
              "name": "bounding_poly",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            }
          ]
        },
        {
          "name": "SafeSearchAnnotation",
          "field": [
            {
              "name": "adult",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "adult"
            },
            {
              "name": "spoof",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "spoof"
            },
            {
              "name": "medical",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "medical"
            },
            {
              "name": "violence",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "violence"
            },
            {
              "name": "racy",
              "number": 9,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "racy"
            }
          ]
        },
        {
          "name": "LatLongRect",
          "field": [
            {
              "name": "min_lat_lng",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.type.LatLng",
              "jsonName": "minLatLng"
            },
            {
              "name": "max_lat_lng",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.type.LatLng",
              "jsonName": "maxLatLng"
            }
          ]
        },
        {
          "name": "ColorInfo",
          "field": [
            {
              "name": "color",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.type.Color",
              "jsonName": "color"
            },
            {
              "name": "score",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "score"
            },
            {
              "name": "pixel_fraction",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "pixelFraction"
            }
          ]
        },
        {
          "name": "DominantColorsAnnotation",
          "field": [
            {
              "name": "colors",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ColorInfo",
              "jsonName": "colors"
            }
          ]
        },
        {
          "name": "ImageProperties",
          "field": [
            {
              "name": "dominant_colors",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.DominantColorsAnnotation",
              "jsonName": "dominantColors"
            }
          ]
        },
        {
          "name": "CropHint",
          "field": [
            {
              "name": "bounding_poly",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            },
            {
              "name": "confidence",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            },
            {
              "name": "importance_fraction",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "importanceFraction"
            }
          ]
        },
        {
          "name": "CropHintsAnnotation",
          "field": [
            {
              "name": "crop_hints",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.CropHint",
              "jsonName": "cropHints"
            }
          ]
        },
        {
          "name": "CropHintsParams",
          "field": [
            {
              "name": "aspect_ratios",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_FLOAT",
              "jsonName": "aspectRatios"
            }
          ]
        },
        {
          "name": "WebDetectionParams",
          "field": [
            {
              "name": "include_geo_results",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_BOOL",
              "jsonName": "includeGeoResults"
            }
          ]
        },
        {
          "name": "ImageContext",
          "field": [
            {
              "name": "lat_long_rect",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.LatLongRect",
              "jsonName": "latLongRect"
            },
            {
              "name": "language_hints",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_STRING",
              "jsonName": "languageHints"
            },
            {
              "name": "crop_hints_params",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.CropHintsParams",
              "jsonName": "cropHintsParams"
            },
            {
              "name": "product_search_params",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchParams",
              "jsonName": "productSearchParams"
            },
            {
              "name": "web_detection_params",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetectionParams",
              "jsonName": "webDetectionParams"
            }
          ]
        },
        {
          "name": "AnnotateImageRequest",
          "field": [
            {
              "name": "image",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Image",
              "jsonName": "image"
            },
            {
              "name": "features",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Feature",
              "jsonName": "features"
            },
            {
              "name": "image_context",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageContext",
              "jsonName": "imageContext"
            }
          ]
        },
        {
          "name": "ImageAnnotationContext",
          "field": [
            {
              "name": "uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "uri"
            },
            {
              "name": "page_number",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageNumber"
            }
          ]
        },
        {
          "name": "AnnotateImageResponse",
          "field": [
            {
              "name": "face_annotations",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.FaceAnnotation",
              "jsonName": "faceAnnotations"
            },
            {
              "name": "landmark_annotations",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.EntityAnnotation",
              "jsonName": "landmarkAnnotations"
            },
            {
              "name": "logo_annotations",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.EntityAnnotation",
              "jsonName": "logoAnnotations"
            },
            {
              "name": "label_annotations",
              "number": 4,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.EntityAnnotation",
              "jsonName": "labelAnnotations"
            },
            {
              "name": "localized_object_annotations",
              "number": 22,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.LocalizedObjectAnnotation",
              "jsonName": "localizedObjectAnnotations"
            },
            {
              "name": "text_annotations",
              "number": 5,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.EntityAnnotation",
              "jsonName": "textAnnotations"
            },
            {
              "name": "full_text_annotation",
              "number": 12,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation",
              "jsonName": "fullTextAnnotation"
            },
            {
              "name": "safe_search_annotation",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.SafeSearchAnnotation",
              "jsonName": "safeSearchAnnotation"
            },
            {
              "name": "image_properties_annotation",
              "number": 8,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageProperties",
              "jsonName": "imagePropertiesAnnotation"
            },
            {
              "name": "crop_hints_annotation",
              "number": 11,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.CropHintsAnnotation",
              "jsonName": "cropHintsAnnotation"
            },
            {
              "name": "web_detection",
              "number": 13,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection",
              "jsonName": "webDetection"
            },
            {
              "name": "product_search_results",
              "number": 14,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchResults",
              "jsonName": "productSearchResults"
            },
            {
              "name": "error",
              "number": 9,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.rpc.Status",
              "jsonName": "error"
            },
            {
              "name": "context",
              "number": 21,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageAnnotationContext",
              "jsonName": "context"
            }
          ]
        },
        {
          "name": "AnnotateFileResponse",
          "field": [
            {
              "name": "input_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.InputConfig",
              "jsonName": "inputConfig"
            },
            {
              "name": "responses",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateImageResponse",
              "jsonName": "responses"
            },
            {
              "name": "total_pages",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "totalPages"
            }
          ]
        },
        {
          "name": "BatchAnnotateImagesRequest",
          "field": [
            {
              "name": "requests",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateImageRequest",
              "jsonName": "requests"
            }
          ]
        },
        {
          "name": "BatchAnnotateImagesResponse",
          "field": [
            {
              "name": "responses",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateImageResponse",
              "jsonName": "responses"
            }
          ]
        },
        {
          "name": "AnnotateFileRequest",
          "field": [
            {
              "name": "input_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.InputConfig",
              "jsonName": "inputConfig"
            },
            {
              "name": "features",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Feature",
              "jsonName": "features"
            },
            {
              "name": "image_context",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageContext",
              "jsonName": "imageContext"
            },
            {
              "name": "pages",
              "number": 4,
              "label": "LABEL_REPEATED",
              "type": "TYPE_INT32",
              "jsonName": "pages"
            }
          ]
        },
        {
          "name": "BatchAnnotateFilesRequest",
          "field": [
            {
              "name": "requests",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateFileRequest",
              "jsonName": "requests"
            }
          ]
        },
        {
          "name": "BatchAnnotateFilesResponse",
          "field": [
            {
              "name": "responses",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateFileResponse",
              "jsonName": "responses"
            }
          ]
        },
        {
          "name": "AsyncAnnotateFileRequest",
          "field": [
            {
              "name": "input_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.InputConfig",
              "jsonName": "inputConfig"
            },
            {
              "name": "features",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Feature",
              "jsonName": "features"
            },
            {
              "name": "image_context",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageContext",
              "jsonName": "imageContext"
            },
            {
              "name": "output_config",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.OutputConfig",
              "jsonName": "outputConfig"
            }
          ]
        },
        {
          "name": "AsyncAnnotateFileResponse",
          "field": [
            {
              "name": "output_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.OutputConfig",
              "jsonName": "outputConfig"
            }
          ]
        },
        {
          "name": "AsyncBatchAnnotateImagesRequest",
          "field": [
            {
              "name": "requests",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateImageRequest",
              "jsonName": "requests"
            },
            {
              "name": "output_config",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.OutputConfig",
              "jsonName": "outputConfig"
            }
          ]
        },
        {
          "name": "AsyncBatchAnnotateImagesResponse",
          "field": [
            {
              "name": "output_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.OutputConfig",
              "jsonName": "outputConfig"
            }
          ]
        },
        {
          "name": "AsyncBatchAnnotateFilesRequest",
          "field": [
            {
              "name": "requests",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AsyncAnnotateFileRequest",
              "jsonName": "requests"
            }
          ]
        },
        {
          "name": "AsyncBatchAnnotateFilesResponse",
          "field": [
            {
              "name": "responses",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AsyncAnnotateFileResponse",
              "jsonName": "responses"
            }
          ]
        },
        {
          "name": "InputConfig",
          "field": [
            {
              "name": "gcs_source",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.GcsSource",
              "jsonName": "gcsSource"
            },
            {
              "name": "content",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_BYTES",
              "jsonName": "content"
            },
            {
              "name": "mime_type",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "mimeType"
            }
          ]
        },
        {
          "name": "OutputConfig",
          "field": [
            {
              "name": "gcs_destination",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.GcsDestination",
              "jsonName": "gcsDestination"
            },
            {
              "name": "batch_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "batchSize"
            }
          ]
        },
        {
          "name": "GcsSource",
          "field": [
            {
              "name": "uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "uri"
            }
          ]
        },
        {
          "name": "GcsDestination",
          "field": [
            {
              "name": "uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "uri"
            }
          ]
        },
        {
          "name": "OperationMetadata",
          "field": [
            {
              "name": "state",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.OperationMetadata.State",
              "jsonName": "state"
            },
            {
              "name": "create_time",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "createTime"
            },
            {
              "name": "update_time",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "updateTime"
            }
          ],
          "enumType": [
            {
              "name": "State",
              "value": [
                {
                  "name": "STATE_UNSPECIFIED",
                  "number": 0
                },
                {
                  "name": "CREATED",
                  "number": 1
                },
                {
                  "name": "RUNNING",
                  "number": 2
                },
                {
                  "name": "DONE",
                  "number": 3
                },
                {
                  "name": "CANCELLED",
                  "number": 4
                }
              ]
            }
          ]
        }
      ],
      "enumType": [
        {
          "name": "Likelihood",
          "value": [
            {
              "name": "UNKNOWN",
              "number": 0
            },
            {
              "name": "VERY_UNLIKELY",
              "number": 1
            },
            {
              "name": "UNLIKELY",
              "number": 2
            },
            {
              "name": "POSSIBLE",
              "number": 3
            },
            {
              "name": "LIKELY",
              "number": 4
            },
            {
              "name": "VERY_LIKELY",
              "number": 5
            }
          ]
        }
      ],
      "service": [
        {
          "name": "ImageAnnotator",
          "method": [
            {
              "name": "BatchAnnotateImages",
              "inputType": ".google.cloud.vision.v1p4beta1.BatchAnnotateImagesRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.BatchAnnotateImagesResponse",
              "options": {

              }
            },
            {
              "name": "BatchAnnotateFiles",
              "inputType": ".google.cloud.vision.v1p4beta1.BatchAnnotateFilesRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.BatchAnnotateFilesResponse",
              "options": {

              }
            },
            {
              "name": "AsyncBatchAnnotateImages",
              "inputType": ".google.cloud.vision.v1p4beta1.AsyncBatchAnnotateImagesRequest",
              "outputType": ".google.longrunning.Operation",
              "options": {

              }
            },
            {
              "name": "AsyncBatchAnnotateFiles",
              "inputType": ".google.cloud.vision.v1p4beta1.AsyncBatchAnnotateFilesRequest",
              "outputType": ".google.longrunning.Operation",
              "options": {

              }
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "ImageAnnotatorProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    }
  ]
}

goprotoc FileDescriptorSet JSON dump:

{
  "file": [
    {
      "name": "google/cloud/vision/v1p4beta1/geometry.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto"
      ],
      "messageType": [
        {
          "name": "Vertex",
          "field": [
            {
              "name": "x",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "x"
            },
            {
              "name": "y",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "y"
            }
          ]
        },
        {
          "name": "NormalizedVertex",
          "field": [
            {
              "name": "x",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "x"
            },
            {
              "name": "y",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "y"
            }
          ]
        },
        {
          "name": "BoundingPoly",
          "field": [
            {
              "name": "vertices",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Vertex",
              "jsonName": "vertices"
            },
            {
              "name": "normalized_vertices",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.NormalizedVertex",
              "jsonName": "normalizedVertices"
            }
          ]
        },
        {
          "name": "Position",
          "field": [
            {
              "name": "x",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "x"
            },
            {
              "name": "y",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "y"
            },
            {
              "name": "z",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "z"
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "GeometryProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/image_annotator.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto",
        "google/cloud/vision/v1p4beta1/geometry.proto",
        "google/cloud/vision/v1p4beta1/product_search.proto",
        "google/cloud/vision/v1p4beta1/text_annotation.proto",
        "google/cloud/vision/v1p4beta1/web_detection.proto",
        "google/longrunning/operations.proto",
        "google/protobuf/field_mask.proto",
        "google/protobuf/timestamp.proto",
        "google/rpc/status.proto",
        "google/type/color.proto",
        "google/type/latlng.proto"
      ],
      "messageType": [
        {
          "name": "Feature",
          "field": [
            {
              "name": "type",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Feature.Type",
              "jsonName": "type"
            },
            {
              "name": "max_results",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "maxResults"
            },
            {
              "name": "model",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "model"
            }
          ],
          "enumType": [
            {
              "name": "Type",
              "value": [
                {
                  "name": "TYPE_UNSPECIFIED",
                  "number": 0
                },
                {
                  "name": "FACE_DETECTION",
                  "number": 1
                },
                {
                  "name": "LANDMARK_DETECTION",
                  "number": 2
                },
                {
                  "name": "LOGO_DETECTION",
                  "number": 3
                },
                {
                  "name": "LABEL_DETECTION",
                  "number": 4
                },
                {
                  "name": "TEXT_DETECTION",
                  "number": 5
                },
                {
                  "name": "DOCUMENT_TEXT_DETECTION",
                  "number": 11
                },
                {
                  "name": "SAFE_SEARCH_DETECTION",
                  "number": 6
                },
                {
                  "name": "IMAGE_PROPERTIES",
                  "number": 7
                },
                {
                  "name": "CROP_HINTS",
                  "number": 9
                },
                {
                  "name": "WEB_DETECTION",
                  "number": 10
                },
                {
                  "name": "PRODUCT_SEARCH",
                  "number": 12
                },
                {
                  "name": "OBJECT_LOCALIZATION",
                  "number": 19
                }
              ]
            }
          ]
        },
        {
          "name": "ImageSource",
          "field": [
            {
              "name": "gcs_image_uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "gcsImageUri"
            },
            {
              "name": "image_uri",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "imageUri"
            }
          ]
        },
        {
          "name": "Image",
          "field": [
            {
              "name": "content",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_BYTES",
              "jsonName": "content"
            },
            {
              "name": "source",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageSource",
              "jsonName": "source"
            }
          ]
        },
        {
          "name": "FaceAnnotation",
          "field": [
            {
              "name": "bounding_poly",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            },
            {
              "name": "fd_bounding_poly",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "fdBoundingPoly"
            },
            {
              "name": "landmarks",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.FaceAnnotation.Landmark",
              "jsonName": "landmarks"
            },
            {
              "name": "roll_angle",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "rollAngle"
            },
            {
              "name": "pan_angle",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "panAngle"
            },
            {
              "name": "tilt_angle",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "tiltAngle"
            },
            {
              "name": "detection_confidence",
              "number": 7,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "detectionConfidence"
            },
            {
              "name": "landmarking_confidence",
              "number": 8,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "landmarkingConfidence"
            },
            {
              "name": "joy_likelihood",
              "number": 9,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "joyLikelihood"
            },
            {
              "name": "sorrow_likelihood",
              "number": 10,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "sorrowLikelihood"
            },
            {
              "name": "anger_likelihood",
              "number": 11,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "angerLikelihood"
            },
            {
              "name": "surprise_likelihood",
              "number": 12,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "surpriseLikelihood"
            },
            {
              "name": "under_exposed_likelihood",
              "number": 13,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "underExposedLikelihood"
            },
            {
              "name": "blurred_likelihood",
              "number": 14,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "blurredLikelihood"
            },
            {
              "name": "headwear_likelihood",
              "number": 15,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "headwearLikelihood"
            }
          ],
          "nestedType": [
            {
              "name": "Landmark",
              "field": [
                {
                  "name": "type",
                  "number": 3,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_ENUM",
                  "typeName": ".google.cloud.vision.v1p4beta1.FaceAnnotation.Landmark.Type",
                  "jsonName": "type"
                },
                {
                  "name": "position",
                  "number": 4,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.Position",
                  "jsonName": "position"
                }
              ],
              "enumType": [
                {
                  "name": "Type",
                  "value": [
                    {
                      "name": "UNKNOWN_LANDMARK",
                      "number": 0
                    },
                    {
                      "name": "LEFT_EYE",
                      "number": 1
                    },
                    {
                      "name": "RIGHT_EYE",
                      "number": 2
                    },
                    {
                      "name": "LEFT_OF_LEFT_EYEBROW",
                      "number": 3
                    },
                    {
                      "name": "RIGHT_OF_LEFT_EYEBROW",
                      "number": 4
                    },
                    {
                      "name": "LEFT_OF_RIGHT_EYEBROW",
                      "number": 5
                    },
                    {
                      "name": "RIGHT_OF_RIGHT_EYEBROW",
                      "number": 6
                    },
                    {
                      "name": "MIDPOINT_BETWEEN_EYES",
                      "number": 7
                    },
                    {
                      "name": "NOSE_TIP",
                      "number": 8
                    },
                    {
                      "name": "UPPER_LIP",
                      "number": 9
                    },
                    {
                      "name": "LOWER_LIP",
                      "number": 10
                    },
                    {
                      "name": "MOUTH_LEFT",
                      "number": 11
                    },
                    {
                      "name": "MOUTH_RIGHT",
                      "number": 12
                    },
                    {
                      "name": "MOUTH_CENTER",
                      "number": 13
                    },
                    {
                      "name": "NOSE_BOTTOM_RIGHT",
                      "number": 14
                    },
                    {
                      "name": "NOSE_BOTTOM_LEFT",
                      "number": 15
                    },
                    {
                      "name": "NOSE_BOTTOM_CENTER",
                      "number": 16
                    },
                    {
                      "name": "LEFT_EYE_TOP_BOUNDARY",
                      "number": 17
                    },
                    {
                      "name": "LEFT_EYE_RIGHT_CORNER",
                      "number": 18
                    },
                    {
                      "name": "LEFT_EYE_BOTTOM_BOUNDARY",
                      "number": 19
                    },
                    {
                      "name": "LEFT_EYE_LEFT_CORNER",
                      "number": 20
                    },
                    {
                      "name": "RIGHT_EYE_TOP_BOUNDARY",
                      "number": 21
                    },
                    {
                      "name": "RIGHT_EYE_RIGHT_CORNER",
                      "number": 22
                    },
                    {
                      "name": "RIGHT_EYE_BOTTOM_BOUNDARY",
                      "number": 23
                    },
                    {
                      "name": "RIGHT_EYE_LEFT_CORNER",
                      "number": 24
                    },
                    {
                      "name": "LEFT_EYEBROW_UPPER_MIDPOINT",
                      "number": 25
                    },
                    {
                      "name": "RIGHT_EYEBROW_UPPER_MIDPOINT",
                      "number": 26
                    },
                    {
                      "name": "LEFT_EAR_TRAGION",
                      "number": 27
                    },
                    {
                      "name": "RIGHT_EAR_TRAGION",
                      "number": 28
                    },
                    {
                      "name": "LEFT_EYE_PUPIL",
                      "number": 29
                    },
                    {
                      "name": "RIGHT_EYE_PUPIL",
                      "number": 30
                    },
                    {
                      "name": "FOREHEAD_GLABELLA",
                      "number": 31
                    },
                    {
                      "name": "CHIN_GNATHION",
                      "number": 32
                    },
                    {
                      "name": "CHIN_LEFT_GONION",
                      "number": 33
                    },
                    {
                      "name": "CHIN_RIGHT_GONION",
                      "number": 34
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name": "LocationInfo",
          "field": [
            {
              "name": "lat_lng",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.type.LatLng",
              "jsonName": "latLng"
            }
          ]
        },
        {
          "name": "Property",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "value",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "value"
            },
            {
              "name": "uint64_value",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_UINT64",
              "jsonName": "uint64Value"
            }
          ]
        },
        {
          "name": "EntityAnnotation",
          "field": [
            {
              "name": "mid",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "mid"
            },
            {
              "name": "locale",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "locale"
            },
            {
              "name": "description",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "description"
            },
            {
              "name": "score",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "score"
            },
            {
              "name": "confidence",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence",
              "options": {
                "deprecated": true
              }
            },
            {
              "name": "topicality",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "topicality"
            },
            {
              "name": "bounding_poly",
              "number": 7,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            },
            {
              "name": "locations",
              "number": 8,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.LocationInfo",
              "jsonName": "locations"
            },
            {
              "name": "properties",
              "number": 9,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Property",
              "jsonName": "properties"
            }
          ]
        },
        {
          "name": "LocalizedObjectAnnotation",
          "field": [
            {
              "name": "mid",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "mid"
            },
            {
              "name": "language_code",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "languageCode"
            },
            {
              "name": "name",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "score",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "score"
            },
            {
              "name": "bounding_poly",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            }
          ]
        },
        {
          "name": "SafeSearchAnnotation",
          "field": [
            {
              "name": "adult",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "adult"
            },
            {
              "name": "spoof",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "spoof"
            },
            {
              "name": "medical",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "medical"
            },
            {
              "name": "violence",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "violence"
            },
            {
              "name": "racy",
              "number": 9,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Likelihood",
              "jsonName": "racy"
            }
          ]
        },
        {
          "name": "LatLongRect",
          "field": [
            {
              "name": "min_lat_lng",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.type.LatLng",
              "jsonName": "minLatLng"
            },
            {
              "name": "max_lat_lng",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.type.LatLng",
              "jsonName": "maxLatLng"
            }
          ]
        },
        {
          "name": "ColorInfo",
          "field": [
            {
              "name": "color",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.type.Color",
              "jsonName": "color"
            },
            {
              "name": "score",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "score"
            },
            {
              "name": "pixel_fraction",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "pixelFraction"
            }
          ]
        },
        {
          "name": "DominantColorsAnnotation",
          "field": [
            {
              "name": "colors",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ColorInfo",
              "jsonName": "colors"
            }
          ]
        },
        {
          "name": "ImageProperties",
          "field": [
            {
              "name": "dominant_colors",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.DominantColorsAnnotation",
              "jsonName": "dominantColors"
            }
          ]
        },
        {
          "name": "CropHint",
          "field": [
            {
              "name": "bounding_poly",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            },
            {
              "name": "confidence",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            },
            {
              "name": "importance_fraction",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "importanceFraction"
            }
          ]
        },
        {
          "name": "CropHintsAnnotation",
          "field": [
            {
              "name": "crop_hints",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.CropHint",
              "jsonName": "cropHints"
            }
          ]
        },
        {
          "name": "CropHintsParams",
          "field": [
            {
              "name": "aspect_ratios",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_FLOAT",
              "jsonName": "aspectRatios"
            }
          ]
        },
        {
          "name": "WebDetectionParams",
          "field": [
            {
              "name": "include_geo_results",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_BOOL",
              "jsonName": "includeGeoResults"
            }
          ]
        },
        {
          "name": "ImageContext",
          "field": [
            {
              "name": "lat_long_rect",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.LatLongRect",
              "jsonName": "latLongRect"
            },
            {
              "name": "language_hints",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_STRING",
              "jsonName": "languageHints"
            },
            {
              "name": "crop_hints_params",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.CropHintsParams",
              "jsonName": "cropHintsParams"
            },
            {
              "name": "product_search_params",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchParams",
              "jsonName": "productSearchParams"
            },
            {
              "name": "web_detection_params",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetectionParams",
              "jsonName": "webDetectionParams"
            }
          ]
        },
        {
          "name": "AnnotateImageRequest",
          "field": [
            {
              "name": "image",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Image",
              "jsonName": "image"
            },
            {
              "name": "features",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Feature",
              "jsonName": "features"
            },
            {
              "name": "image_context",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageContext",
              "jsonName": "imageContext"
            }
          ]
        },
        {
          "name": "ImageAnnotationContext",
          "field": [
            {
              "name": "uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "uri"
            },
            {
              "name": "page_number",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageNumber"
            }
          ]
        },
        {
          "name": "AnnotateImageResponse",
          "field": [
            {
              "name": "face_annotations",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.FaceAnnotation",
              "jsonName": "faceAnnotations"
            },
            {
              "name": "landmark_annotations",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.EntityAnnotation",
              "jsonName": "landmarkAnnotations"
            },
            {
              "name": "logo_annotations",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.EntityAnnotation",
              "jsonName": "logoAnnotations"
            },
            {
              "name": "label_annotations",
              "number": 4,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.EntityAnnotation",
              "jsonName": "labelAnnotations"
            },
            {
              "name": "localized_object_annotations",
              "number": 22,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.LocalizedObjectAnnotation",
              "jsonName": "localizedObjectAnnotations"
            },
            {
              "name": "text_annotations",
              "number": 5,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.EntityAnnotation",
              "jsonName": "textAnnotations"
            },
            {
              "name": "full_text_annotation",
              "number": 12,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation",
              "jsonName": "fullTextAnnotation"
            },
            {
              "name": "safe_search_annotation",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.SafeSearchAnnotation",
              "jsonName": "safeSearchAnnotation"
            },
            {
              "name": "image_properties_annotation",
              "number": 8,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageProperties",
              "jsonName": "imagePropertiesAnnotation"
            },
            {
              "name": "crop_hints_annotation",
              "number": 11,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.CropHintsAnnotation",
              "jsonName": "cropHintsAnnotation"
            },
            {
              "name": "web_detection",
              "number": 13,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection",
              "jsonName": "webDetection"
            },
            {
              "name": "product_search_results",
              "number": 14,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchResults",
              "jsonName": "productSearchResults"
            },
            {
              "name": "error",
              "number": 9,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.rpc.Status",
              "jsonName": "error"
            },
            {
              "name": "context",
              "number": 21,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageAnnotationContext",
              "jsonName": "context"
            }
          ]
        },
        {
          "name": "AnnotateFileResponse",
          "field": [
            {
              "name": "input_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.InputConfig",
              "jsonName": "inputConfig"
            },
            {
              "name": "responses",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateImageResponse",
              "jsonName": "responses"
            },
            {
              "name": "total_pages",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "totalPages"
            }
          ]
        },
        {
          "name": "BatchAnnotateImagesRequest",
          "field": [
            {
              "name": "requests",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateImageRequest",
              "jsonName": "requests"
            }
          ]
        },
        {
          "name": "BatchAnnotateImagesResponse",
          "field": [
            {
              "name": "responses",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateImageResponse",
              "jsonName": "responses"
            }
          ]
        },
        {
          "name": "AnnotateFileRequest",
          "field": [
            {
              "name": "input_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.InputConfig",
              "jsonName": "inputConfig"
            },
            {
              "name": "features",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Feature",
              "jsonName": "features"
            },
            {
              "name": "image_context",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageContext",
              "jsonName": "imageContext"
            },
            {
              "name": "pages",
              "number": 4,
              "label": "LABEL_REPEATED",
              "type": "TYPE_INT32",
              "jsonName": "pages"
            }
          ]
        },
        {
          "name": "BatchAnnotateFilesRequest",
          "field": [
            {
              "name": "requests",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateFileRequest",
              "jsonName": "requests"
            }
          ]
        },
        {
          "name": "BatchAnnotateFilesResponse",
          "field": [
            {
              "name": "responses",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateFileResponse",
              "jsonName": "responses"
            }
          ]
        },
        {
          "name": "AsyncAnnotateFileRequest",
          "field": [
            {
              "name": "input_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.InputConfig",
              "jsonName": "inputConfig"
            },
            {
              "name": "features",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Feature",
              "jsonName": "features"
            },
            {
              "name": "image_context",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImageContext",
              "jsonName": "imageContext"
            },
            {
              "name": "output_config",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.OutputConfig",
              "jsonName": "outputConfig"
            }
          ]
        },
        {
          "name": "AsyncAnnotateFileResponse",
          "field": [
            {
              "name": "output_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.OutputConfig",
              "jsonName": "outputConfig"
            }
          ]
        },
        {
          "name": "AsyncBatchAnnotateImagesRequest",
          "field": [
            {
              "name": "requests",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AnnotateImageRequest",
              "jsonName": "requests"
            },
            {
              "name": "output_config",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.OutputConfig",
              "jsonName": "outputConfig"
            }
          ]
        },
        {
          "name": "AsyncBatchAnnotateImagesResponse",
          "field": [
            {
              "name": "output_config",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.OutputConfig",
              "jsonName": "outputConfig"
            }
          ]
        },
        {
          "name": "AsyncBatchAnnotateFilesRequest",
          "field": [
            {
              "name": "requests",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AsyncAnnotateFileRequest",
              "jsonName": "requests"
            }
          ]
        },
        {
          "name": "AsyncBatchAnnotateFilesResponse",
          "field": [
            {
              "name": "responses",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.AsyncAnnotateFileResponse",
              "jsonName": "responses"
            }
          ]
        },
        {
          "name": "InputConfig",
          "field": [
            {
              "name": "gcs_source",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.GcsSource",
              "jsonName": "gcsSource"
            },
            {
              "name": "content",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_BYTES",
              "jsonName": "content"
            },
            {
              "name": "mime_type",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "mimeType"
            }
          ]
        },
        {
          "name": "OutputConfig",
          "field": [
            {
              "name": "gcs_destination",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.GcsDestination",
              "jsonName": "gcsDestination"
            },
            {
              "name": "batch_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "batchSize"
            }
          ]
        },
        {
          "name": "GcsSource",
          "field": [
            {
              "name": "uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "uri"
            }
          ]
        },
        {
          "name": "GcsDestination",
          "field": [
            {
              "name": "uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "uri"
            }
          ]
        },
        {
          "name": "OperationMetadata",
          "field": [
            {
              "name": "state",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.OperationMetadata.State",
              "jsonName": "state"
            },
            {
              "name": "create_time",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "createTime"
            },
            {
              "name": "update_time",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "updateTime"
            }
          ],
          "enumType": [
            {
              "name": "State",
              "value": [
                {
                  "name": "STATE_UNSPECIFIED",
                  "number": 0
                },
                {
                  "name": "CREATED",
                  "number": 1
                },
                {
                  "name": "RUNNING",
                  "number": 2
                },
                {
                  "name": "DONE",
                  "number": 3
                },
                {
                  "name": "CANCELLED",
                  "number": 4
                }
              ]
            }
          ]
        }
      ],
      "enumType": [
        {
          "name": "Likelihood",
          "value": [
            {
              "name": "UNKNOWN",
              "number": 0
            },
            {
              "name": "VERY_UNLIKELY",
              "number": 1
            },
            {
              "name": "UNLIKELY",
              "number": 2
            },
            {
              "name": "POSSIBLE",
              "number": 3
            },
            {
              "name": "LIKELY",
              "number": 4
            },
            {
              "name": "VERY_LIKELY",
              "number": 5
            }
          ]
        }
      ],
      "service": [
        {
          "name": "ImageAnnotator",
          "method": [
            {
              "name": "BatchAnnotateImages",
              "inputType": ".google.cloud.vision.v1p4beta1.BatchAnnotateImagesRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.BatchAnnotateImagesResponse",
              "options": {

              }
            },
            {
              "name": "BatchAnnotateFiles",
              "inputType": ".google.cloud.vision.v1p4beta1.BatchAnnotateFilesRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.BatchAnnotateFilesResponse",
              "options": {

              }
            },
            {
              "name": "AsyncBatchAnnotateImages",
              "inputType": ".google.cloud.vision.v1p4beta1.AsyncBatchAnnotateImagesRequest",
              "outputType": ".google.longrunning.Operation",
              "options": {

              }
            },
            {
              "name": "AsyncBatchAnnotateFiles",
              "inputType": ".google.cloud.vision.v1p4beta1.AsyncBatchAnnotateFilesRequest",
              "outputType": ".google.longrunning.Operation",
              "options": {

              }
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "ImageAnnotatorProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/product_search.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto",
        "google/cloud/vision/v1p4beta1/geometry.proto",
        "google/cloud/vision/v1p4beta1/product_search_service.proto",
        "google/protobuf/timestamp.proto"
      ],
      "messageType": [
        {
          "name": "ProductSearchParams",
          "field": [
            {
              "name": "bounding_poly",
              "number": 9,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPoly"
            },
            {
              "name": "product_set",
              "number": 6,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "productSet"
            },
            {
              "name": "product_categories",
              "number": 7,
              "label": "LABEL_REPEATED",
              "type": "TYPE_STRING",
              "jsonName": "productCategories"
            },
            {
              "name": "filter",
              "number": 8,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "filter"
            }
          ]
        },
        {
          "name": "ProductSearchResults",
          "field": [
            {
              "name": "index_time",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "indexTime"
            },
            {
              "name": "results",
              "number": 5,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchResults.Result",
              "jsonName": "results"
            },
            {
              "name": "product_grouped_results",
              "number": 6,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchResults.GroupedResult",
              "jsonName": "productGroupedResults"
            }
          ],
          "nestedType": [
            {
              "name": "Result",
              "field": [
                {
                  "name": "product",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.Product",
                  "jsonName": "product"
                },
                {
                  "name": "score",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "score"
                },
                {
                  "name": "image",
                  "number": 3,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "image"
                }
              ]
            },
            {
              "name": "GroupedResult",
              "field": [
                {
                  "name": "bounding_poly",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
                  "jsonName": "boundingPoly"
                },
                {
                  "name": "results",
                  "number": 2,
                  "label": "LABEL_REPEATED",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.ProductSearchResults.Result",
                  "jsonName": "results"
                }
              ]
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "ProductSearchProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/product_search_service.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto",
        "google/cloud/vision/v1p4beta1/geometry.proto",
        "google/longrunning/operations.proto",
        "google/protobuf/empty.proto",
        "google/protobuf/field_mask.proto",
        "google/protobuf/timestamp.proto",
        "google/rpc/status.proto"
      ],
      "messageType": [
        {
          "name": "Product",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "display_name",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "displayName"
            },
            {
              "name": "description",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "description"
            },
            {
              "name": "product_category",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "productCategory"
            },
            {
              "name": "product_labels",
              "number": 5,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product.KeyValue",
              "jsonName": "productLabels"
            }
          ],
          "nestedType": [
            {
              "name": "KeyValue",
              "field": [
                {
                  "name": "key",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "key"
                },
                {
                  "name": "value",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "value"
                }
              ]
            }
          ]
        },
        {
          "name": "ProductSet",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "display_name",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "displayName"
            },
            {
              "name": "index_time",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "indexTime"
            },
            {
              "name": "index_error",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.rpc.Status",
              "jsonName": "indexError"
            }
          ]
        },
        {
          "name": "ReferenceImage",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "uri",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "uri"
            },
            {
              "name": "bounding_polys",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingPolys"
            }
          ]
        },
        {
          "name": "CreateProductRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "product",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product",
              "jsonName": "product"
            },
            {
              "name": "product_id",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "productId"
            }
          ]
        },
        {
          "name": "ListProductsRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "pageToken"
            }
          ]
        },
        {
          "name": "ListProductsResponse",
          "field": [
            {
              "name": "products",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product",
              "jsonName": "products"
            },
            {
              "name": "next_page_token",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "nextPageToken"
            }
          ]
        },
        {
          "name": "GetProductRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "UpdateProductRequest",
          "field": [
            {
              "name": "product",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product",
              "jsonName": "product"
            },
            {
              "name": "update_mask",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.FieldMask",
              "jsonName": "updateMask"
            }
          ]
        },
        {
          "name": "DeleteProductRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "CreateProductSetRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "product_set",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSet",
              "jsonName": "productSet"
            },
            {
              "name": "product_set_id",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "productSetId"
            }
          ]
        },
        {
          "name": "ListProductSetsRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "pageToken"
            }
          ]
        },
        {
          "name": "ListProductSetsResponse",
          "field": [
            {
              "name": "product_sets",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSet",
              "jsonName": "productSets"
            },
            {
              "name": "next_page_token",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "nextPageToken"
            }
          ]
        },
        {
          "name": "GetProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "UpdateProductSetRequest",
          "field": [
            {
              "name": "product_set",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ProductSet",
              "jsonName": "productSet"
            },
            {
              "name": "update_mask",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.FieldMask",
              "jsonName": "updateMask"
            }
          ]
        },
        {
          "name": "DeleteProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "CreateReferenceImageRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "reference_image",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "jsonName": "referenceImage"
            },
            {
              "name": "reference_image_id",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "referenceImageId"
            }
          ]
        },
        {
          "name": "ListReferenceImagesRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "pageToken"
            }
          ]
        },
        {
          "name": "ListReferenceImagesResponse",
          "field": [
            {
              "name": "reference_images",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "jsonName": "referenceImages"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "next_page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "nextPageToken"
            }
          ]
        },
        {
          "name": "GetReferenceImageRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "DeleteReferenceImageRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            }
          ]
        },
        {
          "name": "AddProductToProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "product",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "product"
            }
          ]
        },
        {
          "name": "RemoveProductFromProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "product",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "product"
            }
          ]
        },
        {
          "name": "ListProductsInProductSetRequest",
          "field": [
            {
              "name": "name",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "name"
            },
            {
              "name": "page_size",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "pageSize"
            },
            {
              "name": "page_token",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "pageToken"
            }
          ]
        },
        {
          "name": "ListProductsInProductSetResponse",
          "field": [
            {
              "name": "products",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Product",
              "jsonName": "products"
            },
            {
              "name": "next_page_token",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "nextPageToken"
            }
          ]
        },
        {
          "name": "ImportProductSetsGcsSource",
          "field": [
            {
              "name": "csv_file_uri",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "csvFileUri"
            }
          ]
        },
        {
          "name": "ImportProductSetsInputConfig",
          "field": [
            {
              "name": "gcs_source",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImportProductSetsGcsSource",
              "oneofIndex": 0,
              "jsonName": "gcsSource"
            }
          ],
          "oneofDecl": [
            {
              "name": "source"
            }
          ]
        },
        {
          "name": "ImportProductSetsRequest",
          "field": [
            {
              "name": "parent",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "parent"
            },
            {
              "name": "input_config",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ImportProductSetsInputConfig",
              "jsonName": "inputConfig"
            }
          ]
        },
        {
          "name": "ImportProductSetsResponse",
          "field": [
            {
              "name": "reference_images",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "jsonName": "referenceImages"
            },
            {
              "name": "statuses",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.rpc.Status",
              "jsonName": "statuses"
            }
          ]
        },
        {
          "name": "BatchOperationMetadata",
          "field": [
            {
              "name": "state",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.BatchOperationMetadata.State",
              "jsonName": "state"
            },
            {
              "name": "submit_time",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "submitTime"
            },
            {
              "name": "end_time",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.protobuf.Timestamp",
              "jsonName": "endTime"
            }
          ],
          "enumType": [
            {
              "name": "State",
              "value": [
                {
                  "name": "STATE_UNSPECIFIED",
                  "number": 0
                },
                {
                  "name": "PROCESSING",
                  "number": 1
                },
                {
                  "name": "SUCCESSFUL",
                  "number": 2
                },
                {
                  "name": "FAILED",
                  "number": 3
                },
                {
                  "name": "CANCELLED",
                  "number": 4
                }
              ]
            }
          ]
        }
      ],
      "service": [
        {
          "name": "ProductSearch",
          "method": [
            {
              "name": "CreateProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.CreateProductSetRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ProductSet",
              "options": {

              }
            },
            {
              "name": "ListProductSets",
              "inputType": ".google.cloud.vision.v1p4beta1.ListProductSetsRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ListProductSetsResponse",
              "options": {

              }
            },
            {
              "name": "GetProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.GetProductSetRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ProductSet",
              "options": {

              }
            },
            {
              "name": "UpdateProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.UpdateProductSetRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ProductSet",
              "options": {

              }
            },
            {
              "name": "DeleteProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.DeleteProductSetRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "CreateProduct",
              "inputType": ".google.cloud.vision.v1p4beta1.CreateProductRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.Product",
              "options": {

              }
            },
            {
              "name": "ListProducts",
              "inputType": ".google.cloud.vision.v1p4beta1.ListProductsRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ListProductsResponse",
              "options": {

              }
            },
            {
              "name": "GetProduct",
              "inputType": ".google.cloud.vision.v1p4beta1.GetProductRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.Product",
              "options": {

              }
            },
            {
              "name": "UpdateProduct",
              "inputType": ".google.cloud.vision.v1p4beta1.UpdateProductRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.Product",
              "options": {

              }
            },
            {
              "name": "DeleteProduct",
              "inputType": ".google.cloud.vision.v1p4beta1.DeleteProductRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "CreateReferenceImage",
              "inputType": ".google.cloud.vision.v1p4beta1.CreateReferenceImageRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "options": {

              }
            },
            {
              "name": "DeleteReferenceImage",
              "inputType": ".google.cloud.vision.v1p4beta1.DeleteReferenceImageRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "ListReferenceImages",
              "inputType": ".google.cloud.vision.v1p4beta1.ListReferenceImagesRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ListReferenceImagesResponse",
              "options": {

              }
            },
            {
              "name": "GetReferenceImage",
              "inputType": ".google.cloud.vision.v1p4beta1.GetReferenceImageRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ReferenceImage",
              "options": {

              }
            },
            {
              "name": "AddProductToProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.AddProductToProductSetRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "RemoveProductFromProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.RemoveProductFromProductSetRequest",
              "outputType": ".google.protobuf.Empty",
              "options": {

              }
            },
            {
              "name": "ListProductsInProductSet",
              "inputType": ".google.cloud.vision.v1p4beta1.ListProductsInProductSetRequest",
              "outputType": ".google.cloud.vision.v1p4beta1.ListProductsInProductSetResponse",
              "options": {

              }
            },
            {
              "name": "ImportProductSets",
              "inputType": ".google.cloud.vision.v1p4beta1.ImportProductSetsRequest",
              "outputType": ".google.longrunning.Operation",
              "options": {

              }
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "ProductSearchServiceProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/text_annotation.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto",
        "google/cloud/vision/v1p4beta1/geometry.proto"
      ],
      "messageType": [
        {
          "name": "TextAnnotation",
          "field": [
            {
              "name": "pages",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Page",
              "jsonName": "pages"
            },
            {
              "name": "text",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "text"
            }
          ],
          "nestedType": [
            {
              "name": "DetectedLanguage",
              "field": [
                {
                  "name": "language_code",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "languageCode"
                },
                {
                  "name": "confidence",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "confidence"
                }
              ]
            },
            {
              "name": "DetectedBreak",
              "field": [
                {
                  "name": "type",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_ENUM",
                  "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.DetectedBreak.BreakType",
                  "jsonName": "type"
                },
                {
                  "name": "is_prefix",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_BOOL",
                  "jsonName": "isPrefix"
                }
              ],
              "enumType": [
                {
                  "name": "BreakType",
                  "value": [
                    {
                      "name": "UNKNOWN",
                      "number": 0
                    },
                    {
                      "name": "SPACE",
                      "number": 1
                    },
                    {
                      "name": "SURE_SPACE",
                      "number": 2
                    },
                    {
                      "name": "EOL_SURE_SPACE",
                      "number": 3
                    },
                    {
                      "name": "HYPHEN",
                      "number": 4
                    },
                    {
                      "name": "LINE_BREAK",
                      "number": 5
                    }
                  ]
                }
              ]
            },
            {
              "name": "TextProperty",
              "field": [
                {
                  "name": "detected_languages",
                  "number": 1,
                  "label": "LABEL_REPEATED",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.DetectedLanguage",
                  "jsonName": "detectedLanguages"
                },
                {
                  "name": "detected_break",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.DetectedBreak",
                  "jsonName": "detectedBreak"
                }
              ]
            }
          ]
        },
        {
          "name": "Page",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "width",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "width"
            },
            {
              "name": "height",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_INT32",
              "jsonName": "height"
            },
            {
              "name": "blocks",
              "number": 4,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Block",
              "jsonName": "blocks"
            },
            {
              "name": "confidence",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ]
        },
        {
          "name": "Block",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "bounding_box",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingBox"
            },
            {
              "name": "paragraphs",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Paragraph",
              "jsonName": "paragraphs"
            },
            {
              "name": "block_type",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_ENUM",
              "typeName": ".google.cloud.vision.v1p4beta1.Block.BlockType",
              "jsonName": "blockType"
            },
            {
              "name": "confidence",
              "number": 5,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ],
          "enumType": [
            {
              "name": "BlockType",
              "value": [
                {
                  "name": "UNKNOWN",
                  "number": 0
                },
                {
                  "name": "TEXT",
                  "number": 1
                },
                {
                  "name": "TABLE",
                  "number": 2
                },
                {
                  "name": "PICTURE",
                  "number": 3
                },
                {
                  "name": "RULER",
                  "number": 4
                },
                {
                  "name": "BARCODE",
                  "number": 5
                }
              ]
            }
          ]
        },
        {
          "name": "Paragraph",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "bounding_box",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingBox"
            },
            {
              "name": "words",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Word",
              "jsonName": "words"
            },
            {
              "name": "confidence",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ]
        },
        {
          "name": "Word",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "bounding_box",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingBox"
            },
            {
              "name": "symbols",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.Symbol",
              "jsonName": "symbols"
            },
            {
              "name": "confidence",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ]
        },
        {
          "name": "Symbol",
          "field": [
            {
              "name": "property",
              "number": 1,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.TextAnnotation.TextProperty",
              "jsonName": "property"
            },
            {
              "name": "bounding_box",
              "number": 2,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.BoundingPoly",
              "jsonName": "boundingBox"
            },
            {
              "name": "text",
              "number": 3,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_STRING",
              "jsonName": "text"
            },
            {
              "name": "confidence",
              "number": 4,
              "label": "LABEL_OPTIONAL",
              "type": "TYPE_FLOAT",
              "jsonName": "confidence"
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "TextAnnotationProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    },
    {
      "name": "google/cloud/vision/v1p4beta1/web_detection.proto",
      "package": "google.cloud.vision.v1p4beta1",
      "dependency": [
        "google/api/annotations.proto"
      ],
      "messageType": [
        {
          "name": "WebDetection",
          "field": [
            {
              "name": "web_entities",
              "number": 1,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebEntity",
              "jsonName": "webEntities"
            },
            {
              "name": "full_matching_images",
              "number": 2,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
              "jsonName": "fullMatchingImages"
            },
            {
              "name": "partial_matching_images",
              "number": 3,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
              "jsonName": "partialMatchingImages"
            },
            {
              "name": "pages_with_matching_images",
              "number": 4,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebPage",
              "jsonName": "pagesWithMatchingImages"
            },
            {
              "name": "visually_similar_images",
              "number": 6,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
              "jsonName": "visuallySimilarImages"
            },
            {
              "name": "best_guess_labels",
              "number": 8,
              "label": "LABEL_REPEATED",
              "type": "TYPE_MESSAGE",
              "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebLabel",
              "jsonName": "bestGuessLabels"
            }
          ],
          "nestedType": [
            {
              "name": "WebEntity",
              "field": [
                {
                  "name": "entity_id",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "entityId"
                },
                {
                  "name": "score",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "score"
                },
                {
                  "name": "description",
                  "number": 3,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "description"
                }
              ]
            },
            {
              "name": "WebImage",
              "field": [
                {
                  "name": "url",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "url"
                },
                {
                  "name": "score",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "score"
                }
              ]
            },
            {
              "name": "WebLabel",
              "field": [
                {
                  "name": "label",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "label"
                },
                {
                  "name": "language_code",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "languageCode"
                }
              ]
            },
            {
              "name": "WebPage",
              "field": [
                {
                  "name": "url",
                  "number": 1,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "url"
                },
                {
                  "name": "score",
                  "number": 2,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_FLOAT",
                  "jsonName": "score"
                },
                {
                  "name": "page_title",
                  "number": 3,
                  "label": "LABEL_OPTIONAL",
                  "type": "TYPE_STRING",
                  "jsonName": "pageTitle"
                },
                {
                  "name": "full_matching_images",
                  "number": 4,
                  "label": "LABEL_REPEATED",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
                  "jsonName": "fullMatchingImages"
                },
                {
                  "name": "partial_matching_images",
                  "number": 5,
                  "label": "LABEL_REPEATED",
                  "type": "TYPE_MESSAGE",
                  "typeName": ".google.cloud.vision.v1p4beta1.WebDetection.WebImage",
                  "jsonName": "partialMatchingImages"
                }
              ]
            }
          ]
        }
      ],
      "options": {
        "javaPackage": "com.google.cloud.vision.v1p4beta1",
        "javaOuterClassname": "WebDetectionProto",
        "javaMultipleFiles": true,
        "goPackage": "google.golang.org/genproto/googleapis/cloud/vision/v1p4beta1;vision",
        "ccEnableArenas": true,
        "objcClassPrefix": "GCVN"
      },
      "syntax": "proto3"
    }
  ]
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.