packages feed

amazonka-lookoutvision-2.0: gen/Amazonka/LookoutVision/DetectAnomalies.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.LookoutVision.DetectAnomalies
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Detects anomalies in an image that you supply.
--
-- The response from @DetectAnomalies@ includes a boolean prediction that
-- the image contains one or more anomalies and a confidence value for the
-- prediction. If the model is an image segmentation model, the response
-- also includes segmentation information for each type of anomaly found in
-- the image.
--
-- Before calling @DetectAnomalies@, you must first start your model with
-- the StartModel operation. You are charged for the amount of time, in
-- minutes, that a model runs and for the number of anomaly detection units
-- that your model uses. If you are not using a model, use the StopModel
-- operation to stop your model.
--
-- For more information, see /Detecting anomalies in an image/ in the
-- Amazon Lookout for Vision developer guide.
--
-- This operation requires permissions to perform the
-- @lookoutvision:DetectAnomalies@ operation.
module Amazonka.LookoutVision.DetectAnomalies
  ( -- * Creating a Request
    DetectAnomalies (..),
    newDetectAnomalies,

    -- * Request Lenses
    detectAnomalies_projectName,
    detectAnomalies_modelVersion,
    detectAnomalies_contentType,
    detectAnomalies_body,

    -- * Destructuring the Response
    DetectAnomaliesResponse (..),
    newDetectAnomaliesResponse,

    -- * Response Lenses
    detectAnomaliesResponse_detectAnomalyResult,
    detectAnomaliesResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.LookoutVision.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDetectAnomalies' smart constructor.
data DetectAnomalies = DetectAnomalies'
  { -- | The name of the project that contains the model version that you want to
    -- use.
    projectName :: Prelude.Text,
    -- | The version of the model that you want to use.
    modelVersion :: Prelude.Text,
    -- | The type of the image passed in @Body@. Valid values are @image\/png@
    -- (PNG format images) and @image\/jpeg@ (JPG format images).
    contentType :: Prelude.Text,
    -- | The unencrypted image bytes that you want to analyze.
    body :: Data.HashedBody
  }
  deriving (Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'DetectAnomalies' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'projectName', 'detectAnomalies_projectName' - The name of the project that contains the model version that you want to
-- use.
--
-- 'modelVersion', 'detectAnomalies_modelVersion' - The version of the model that you want to use.
--
-- 'contentType', 'detectAnomalies_contentType' - The type of the image passed in @Body@. Valid values are @image\/png@
-- (PNG format images) and @image\/jpeg@ (JPG format images).
--
-- 'body', 'detectAnomalies_body' - The unencrypted image bytes that you want to analyze.
newDetectAnomalies ::
  -- | 'projectName'
  Prelude.Text ->
  -- | 'modelVersion'
  Prelude.Text ->
  -- | 'contentType'
  Prelude.Text ->
  -- | 'body'
  Data.HashedBody ->
  DetectAnomalies
newDetectAnomalies
  pProjectName_
  pModelVersion_
  pContentType_
  pBody_ =
    DetectAnomalies'
      { projectName = pProjectName_,
        modelVersion = pModelVersion_,
        contentType = pContentType_,
        body = pBody_
      }

-- | The name of the project that contains the model version that you want to
-- use.
detectAnomalies_projectName :: Lens.Lens' DetectAnomalies Prelude.Text
detectAnomalies_projectName = Lens.lens (\DetectAnomalies' {projectName} -> projectName) (\s@DetectAnomalies' {} a -> s {projectName = a} :: DetectAnomalies)

-- | The version of the model that you want to use.
detectAnomalies_modelVersion :: Lens.Lens' DetectAnomalies Prelude.Text
detectAnomalies_modelVersion = Lens.lens (\DetectAnomalies' {modelVersion} -> modelVersion) (\s@DetectAnomalies' {} a -> s {modelVersion = a} :: DetectAnomalies)

-- | The type of the image passed in @Body@. Valid values are @image\/png@
-- (PNG format images) and @image\/jpeg@ (JPG format images).
detectAnomalies_contentType :: Lens.Lens' DetectAnomalies Prelude.Text
detectAnomalies_contentType = Lens.lens (\DetectAnomalies' {contentType} -> contentType) (\s@DetectAnomalies' {} a -> s {contentType = a} :: DetectAnomalies)

-- | The unencrypted image bytes that you want to analyze.
detectAnomalies_body :: Lens.Lens' DetectAnomalies Data.HashedBody
detectAnomalies_body = Lens.lens (\DetectAnomalies' {body} -> body) (\s@DetectAnomalies' {} a -> s {body = a} :: DetectAnomalies)

instance Core.AWSRequest DetectAnomalies where
  type
    AWSResponse DetectAnomalies =
      DetectAnomaliesResponse
  request overrides =
    Request.postBody (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          DetectAnomaliesResponse'
            Prelude.<$> (x Data..?> "DetectAnomalyResult")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Data.ToBody DetectAnomalies where
  toBody DetectAnomalies' {..} = Data.toBody body

instance Data.ToHeaders DetectAnomalies where
  toHeaders DetectAnomalies' {..} =
    Prelude.mconcat
      ["Content-Type" Data.=# contentType]

instance Data.ToPath DetectAnomalies where
  toPath DetectAnomalies' {..} =
    Prelude.mconcat
      [ "/2020-11-20/projects/",
        Data.toBS projectName,
        "/models/",
        Data.toBS modelVersion,
        "/detect"
      ]

instance Data.ToQuery DetectAnomalies where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newDetectAnomaliesResponse' smart constructor.
data DetectAnomaliesResponse = DetectAnomaliesResponse'
  { -- | The results of the @DetectAnomalies@ operation.
    detectAnomalyResult :: Prelude.Maybe DetectAnomalyResult,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'DetectAnomaliesResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'detectAnomalyResult', 'detectAnomaliesResponse_detectAnomalyResult' - The results of the @DetectAnomalies@ operation.
--
-- 'httpStatus', 'detectAnomaliesResponse_httpStatus' - The response's http status code.
newDetectAnomaliesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DetectAnomaliesResponse
newDetectAnomaliesResponse pHttpStatus_ =
  DetectAnomaliesResponse'
    { detectAnomalyResult =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The results of the @DetectAnomalies@ operation.
detectAnomaliesResponse_detectAnomalyResult :: Lens.Lens' DetectAnomaliesResponse (Prelude.Maybe DetectAnomalyResult)
detectAnomaliesResponse_detectAnomalyResult = Lens.lens (\DetectAnomaliesResponse' {detectAnomalyResult} -> detectAnomalyResult) (\s@DetectAnomaliesResponse' {} a -> s {detectAnomalyResult = a} :: DetectAnomaliesResponse)

-- | The response's http status code.
detectAnomaliesResponse_httpStatus :: Lens.Lens' DetectAnomaliesResponse Prelude.Int
detectAnomaliesResponse_httpStatus = Lens.lens (\DetectAnomaliesResponse' {httpStatus} -> httpStatus) (\s@DetectAnomaliesResponse' {} a -> s {httpStatus = a} :: DetectAnomaliesResponse)

instance Prelude.NFData DetectAnomaliesResponse where
  rnf DetectAnomaliesResponse' {..} =
    Prelude.rnf detectAnomalyResult
      `Prelude.seq` Prelude.rnf httpStatus