@java.lang.Override
  public int getSerializedSize() {
    int size = memoizedSize;
    if (size != -1) return size;

    size = 0;
    {
      int dataSize = 0;
      for (int i = 0; i < ids_.size(); i++) {
        dataSize += com.google.protobuf.CodedOutputStream.computeInt64SizeNoTag(ids_.getLong(i));
      }
      size += dataSize;
      if (!getIdsList().isEmpty()) {
        size += 1;
        size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
      }
      idsMemoizedSerializedSize = dataSize;
    }
    {
      int dataSize = 0;
      for (int i = 0; i < displayNames_.size(); i++) {
        dataSize += computeStringSizeNoTag(displayNames_.getRaw(i));
      }
      size += dataSize;
      size += 1 * getDisplayNamesList().size();
    }
    {
      int dataSize = 0;
      dataSize = 4 * getConfidencesList().size();
      size += dataSize;
      if (!getConfidencesList().isEmpty()) {
        size += 1;
        size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
      }
      confidencesMemoizedSerializedSize = dataSize;
    }
    for (int i = 0; i < bboxes_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, bboxes_.get(i));
    }
    size += getUnknownFields().getSerializedSize();
    memoizedSize = size;
    return size;
  }
<pre>
Bounding boxes, i.e. the rectangles over the image, that pinpoint
the found AnnotationSpecs. Given in order that matches the IDs. Each
bounding box is an array of 4 numbers `xMin`, `xMax`, `yMin`, and
`yMax`, which represent the extremal coordinates of the box. They are
relative to the image size, and the point 0,0 is in the top left
of the image.
</pre>

<code>repeated .google.protobuf.ListValue bboxes = 4;</code>
java-visionai/proto-google-cloud-visionai-v1/src/main/java/com/google/cloud/visionai/v1/ImageObjectDetectionPredictionResult.java