# frozen_string_literal: true

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Cloud
    module DataLabeling
      module V1beta1
        # Configuration for how human labeling task should be done.
        # @!attribute [rw] instruction
        #   @return [::String]
        #     Required. Instruction resource name.
        # @!attribute [rw] annotated_dataset_display_name
        #   @return [::String]
        #     Required. A human-readable name for AnnotatedDataset defined by
        #     users. Maximum of 64 characters
        #     .
        # @!attribute [rw] annotated_dataset_description
        #   @return [::String]
        #     Optional. A human-readable description for AnnotatedDataset.
        #     The description can be up to 10000 characters long.
        # @!attribute [rw] label_group
        #   @return [::String]
        #     Optional. A human-readable label used to logically group labeling tasks.
        #     This string must match the regular expression `[a-zA-Z\\d_-]{0,128}`.
        # @!attribute [rw] language_code
        #   @return [::String]
        #     Optional. The Language of this question, as a
        #     [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt).
        #     Default value is en-US.
        #     Only need to set this when task is language related. For example, French
        #     text classification.
        # @!attribute [rw] replica_count
        #   @return [::Integer]
        #     Optional. Replication of questions. Each question will be sent to up to
        #     this number of contributors to label. Aggregated answers will be returned.
        #     Default is set to 1.
        #     For image related labeling, valid values are 1, 3, 5.
        # @!attribute [rw] question_duration
        #   @return [::Google::Protobuf::Duration]
        #     Optional. Maximum duration for contributors to answer a question. Maximum
        #     is 3600 seconds. Default is 3600 seconds.
        # @!attribute [rw] contributor_emails
        #   @return [::Array<::String>]
        #     Optional. If you want your own labeling contributors to manage and work on
        #     this labeling request, you can set these contributors here. We will give
        #     them access to the question types in crowdcompute. Note that these
        #     emails must be registered in crowdcompute worker UI:
        #     https://crowd-compute.appspot.com/
        # @!attribute [rw] user_email_address
        #   @return [::String]
        #     Email of the user who started the labeling task and should be notified by
        #     email. If empty no notification will be sent.
        class HumanAnnotationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for image classification human labeling task.
        # @!attribute [rw] annotation_spec_set
        #   @return [::String]
        #     Required. Annotation spec set resource name.
        # @!attribute [rw] allow_multi_label
        #   @return [::Boolean]
        #     Optional. If allow_multi_label is true, contributors are able to choose
        #     multiple labels for one image.
        # @!attribute [rw] answer_aggregation_type
        #   @return [::Google::Cloud::DataLabeling::V1beta1::StringAggregationType]
        #     Optional. The type of how to aggregate answers.
        class ImageClassificationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for image bounding poly (and bounding box) human labeling task.
        # @!attribute [rw] annotation_spec_set
        #   @return [::String]
        #     Required. Annotation spec set resource name.
        # @!attribute [rw] instruction_message
        #   @return [::String]
        #     Optional. Instruction message showed on contributors UI.
        class BoundingPolyConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for image polyline human labeling task.
        # @!attribute [rw] annotation_spec_set
        #   @return [::String]
        #     Required. Annotation spec set resource name.
        # @!attribute [rw] instruction_message
        #   @return [::String]
        #     Optional. Instruction message showed on contributors UI.
        class PolylineConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for image segmentation
        # @!attribute [rw] annotation_spec_set
        #   @return [::String]
        #     Required. Annotation spec set resource name. format:
        #     projects/\\{project_id}/annotationSpecSets/\\{annotation_spec_set_id}
        # @!attribute [rw] instruction_message
        #   @return [::String]
        #     Instruction message showed on labelers UI.
        class SegmentationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for video classification human labeling task.
        # Currently two types of video classification are supported:
        # 1. Assign labels on the entire video.
        # 2. Split the video into multiple video clips based on camera shot, and
        # assign labels on each video clip.
        # @!attribute [rw] annotation_spec_set_configs
        #   @return [::Array<::Google::Cloud::DataLabeling::V1beta1::VideoClassificationConfig::AnnotationSpecSetConfig>]
        #     Required. The list of annotation spec set configs.
        #     Since watching a video clip takes much longer time than an image, we
        #     support label with multiple AnnotationSpecSet at the same time. Labels
        #     in each AnnotationSpecSet will be shown in a group to contributors.
        #     Contributors can select one or more (depending on whether to allow multi
        #     label) from each group.
        # @!attribute [rw] apply_shot_detection
        #   @return [::Boolean]
        #     Optional. Option to apply shot detection on the video.
        class VideoClassificationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Annotation spec set with the setting of allowing multi labels or not.
          # @!attribute [rw] annotation_spec_set
          #   @return [::String]
          #     Required. Annotation spec set resource name.
          # @!attribute [rw] allow_multi_label
          #   @return [::Boolean]
          #     Optional. If allow_multi_label is true, contributors are able to
          #     choose multiple labels from one annotation spec set.
          class AnnotationSpecSetConfig
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # Config for video object detection human labeling task.
        # Object detection will be conducted on the images extracted from the video,
        # and those objects will be labeled with bounding boxes.
        # User need to specify the number of images to be extracted per second as the
        # extraction frame rate.
        # @!attribute [rw] annotation_spec_set
        #   @return [::String]
        #     Required. Annotation spec set resource name.
        # @!attribute [rw] extraction_frame_rate
        #   @return [::Float]
        #     Required. Number of frames per second to be extracted from the video.
        class ObjectDetectionConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for video object tracking human labeling task.
        # @!attribute [rw] annotation_spec_set
        #   @return [::String]
        #     Required. Annotation spec set resource name.
        class ObjectTrackingConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for video event human labeling task.
        # @!attribute [rw] annotation_spec_sets
        #   @return [::Array<::String>]
        #     Required. The list of annotation spec set resource name. Similar to video
        #     classification, we support selecting event from multiple AnnotationSpecSet
        #     at the same time.
        class EventConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for text classification human labeling task.
        # @!attribute [rw] allow_multi_label
        #   @return [::Boolean]
        #     Optional. If allow_multi_label is true, contributors are able to choose
        #     multiple labels for one text segment.
        # @!attribute [rw] annotation_spec_set
        #   @return [::String]
        #     Required. Annotation spec set resource name.
        # @!attribute [rw] sentiment_config
        #   @return [::Google::Cloud::DataLabeling::V1beta1::SentimentConfig]
        #     Optional. Configs for sentiment selection.
        class TextClassificationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for setting up sentiments.
        # @!attribute [rw] enable_label_sentiment_selection
        #   @return [::Boolean]
        #     If set to true, contributors will have the option to select sentiment of
        #     the label they selected, to mark it as negative or positive label. Default
        #     is false.
        class SentimentConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Config for text entity extraction human labeling task.
        # @!attribute [rw] annotation_spec_set
        #   @return [::String]
        #     Required. Annotation spec set resource name.
        class TextEntityExtractionConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        module StringAggregationType
          STRING_AGGREGATION_TYPE_UNSPECIFIED = 0

          # Majority vote to aggregate answers.
          MAJORITY_VOTE = 1

          # Unanimous answers will be adopted.
          UNANIMOUS_VOTE = 2

          # Preserve all answers by crowd compute.
          NO_AGGREGATION = 3
        end
      end
    end
  end
end
