Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Amazon Rekognition - Detect Faces in an Image

See more Amazon Rekognition Examples

Detects faces within an image that is provided as input. This example passes theimage as base64-encoded image bytes.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.AuthAws,
  Chilkat.Rest,
  Chilkat.BinData,
  Chilkat.StringBuilder,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  rest: TRest;
  authAws: TAuthAws;
  bTls: Boolean;
  port: Integer;
  bAutoReconnect: Boolean;
  bdJpg: TBinData;
  sbJpg: TStringBuilder;
  json: TJsonObject;
  sbRequestBody: TStringBuilder;
  sbResponseBody: TStringBuilder;
  respStatusCode: Integer;
  jResp: TJsonObject;
  AgeRangeHigh: Integer;
  AgeRangeLow: Integer;
  BeardConfidence: string;
  BeardValue: Boolean;
  BoundingBoxHeight: string;
  BoundingBoxLeft: string;
  BoundingBoxTop: string;
  BoundingBoxWidth: string;
  Confidence: string;
  EyeglassesConfidence: string;
  EyeglassesValue: Boolean;
  EyesOpenConfidence: string;
  EyesOpenValue: Boolean;
  GenderConfidence: string;
  GenderValue: string;
  MouthOpenConfidence: string;
  MouthOpenValue: Boolean;
  MustacheConfidence: string;
  MustacheValue: Boolean;
  PosePitch: string;
  PoseRoll: string;
  PoseYaw: string;
  QualityBrightness: string;
  QualitySharpness: string;
  SmileConfidence: string;
  SmileValue: Boolean;
  SunglassesConfidence: string;
  SunglassesValue: Boolean;
  j: Integer;
  count_j: Integer;
  v_Type: string;
  X: string;
  Y: string;
  i: Integer;
  count_i: Integer;

begin
  success := False;

  rest := TRest.Create;

  authAws := TAuthAws.Create;
  authAws.AccessKey := 'AWS_ACCESS_KEY';
  authAws.SecretKey := 'AWS_SECRET_KEY';
  //  Don't forget to change the region to your particular region. (Also make the same change in the call to Connect below.)
  authAws.Region := 'us-west-2';
  authAws.ServiceName := 'rekognition';
  //  SetAuthAws causes Chilkat to automatically add the following headers: Authorization, X-Amz-Date
  rest.SetAuthAws(authAws);

  //  URL: https://rekognition.us-west-2.amazonaws.com/
  bTls := True;
  port := 443;
  bAutoReconnect := True;
  //  Don't forget to change the region domain (us-west-2.amazonaws.com) to your particular region.
  success := rest.Connect('rekognition.us-west-2.amazonaws.com',port,bTls,bAutoReconnect);
  if (success <> True) then
    begin
      WriteLn('ConnectFailReason: ' + rest.ConnectFailReason);
      WriteLn(rest.LastErrorText);
      Exit;
    end;

  //  Note: The above code does not need to be repeatedly called for each REST request.
  //  The rest object can be setup once, and then many requests can be sent.  Chilkat will automatically
  //  reconnect within a FullRequest* method as needed.  It is only the very first connection that is explicitly
  //  made via the Connect method.

  //  Load the JPG to be passed as base64 in the JSON.
  bdJpg := TBinData.Create;
  success := bdJpg.LoadFile('qa_data/jpg/kid_blue_coat.jpg');
  if (success <> True) then
    begin
      WriteLn('Failed to load the input JPG file.');
      Exit;
    end;

  //  We wish to send the following JSON in the body of our HTTP request:

  //  {
  //      "Image": {
  //          "Bytes": "base64_image_bytes"
  //      }
  //      "Attributes": [
  //          "ALL"
  //      ]
  //  }

  //  Here is the image we used for testing:
  //  (image:https://example-code.com/images/kid_blue_coat.jpg/endImage)

  //  Convert binary image bytes to base64.
  //  Note: We are explicitly keeping the data inside Chilkat to avoid having to pass large strings
  //  as arguments to function calls.  This is important for some programming languages.
  sbJpg := TStringBuilder.Create;
  bdJpg.GetEncodedSb('base64',sbJpg);

  json := TJsonObject.Create;
  json.UpdateSb('Image.Bytes',sbJpg);
  json.UpdateString('Attributes[0]','ALL');

  rest.AddHeader('Content-Type','application/x-amz-json-1.1');
  rest.AddHeader('X-Amz-Target','RekognitionService.DetectFaces');

  sbRequestBody := TStringBuilder.Create;
  json.EmitSb(sbRequestBody);
  sbResponseBody := TStringBuilder.Create;
  success := rest.FullRequestSb('POST','/',sbRequestBody,sbResponseBody);
  if (success <> True) then
    begin
      WriteLn(rest.LastErrorText);
      Exit;
    end;
  respStatusCode := rest.ResponseStatusCode;
  WriteLn('response status code = ' + respStatusCode);

  if (respStatusCode >= 400) then
    begin
      WriteLn('Response Status Code = ' + respStatusCode);
      WriteLn('Response Header:');
      WriteLn(rest.ResponseHeader);
      WriteLn('Response Body:');
      WriteLn(sbResponseBody.GetAsString());
      Exit;
    end;

  jResp := TJsonObject.Create;
  jResp.LoadSb(sbResponseBody);

  jResp.EmitCompact := False;
  WriteLn(jResp.Emit());

  //  Sample JSON response:
  //  (Sample code for parsing the JSON response is shown below)

  //  {
  //    "FaceDetails": [
  //      {
  //        "AgeRange": {
  //          "High": 18,
  //          "Low": 8
  //        },
  //        "Beard": {
  //          "Confidence": 98.06282806396484,
  //          "Value": false
  //        },
  //        "BoundingBox": {
  //          "Height": 0.327279269695282,
  //          "Left": 0.5339247584342957,
  //          "Top": 0.23660442233085632,
  //          "Width": 0.35611653327941895
  //        },
  //        "Confidence": 99.99732971191406,
  //        "Emotions": [
  //          {
  //            "Confidence": 99.5849380493164,
  //            "Type": "HAPPY"
  //          },
  //          {
  //            "Confidence": 0.15533843636512756,
  //            "Type": "CALM"
  //          },
  //          {
  //            "Confidence": 0.08864031732082367,
  //            "Type": "SURPRISED"
  //          },
  //          {
  //            "Confidence": 0.05476664379239082,
  //            "Type": "SAD"
  //          },
  //          {
  //            "Confidence": 0.042048510164022446,
  //            "Type": "CONFUSED"
  //          },
  //          {
  //            "Confidence": 0.038942769169807434,
  //            "Type": "DISGUSTED"
  //          },
  //          {
  //            "Confidence": 0.021463459357619286,
  //            "Type": "FEAR"
  //          },
  //          {
  //            "Confidence": 0.013858155347406864,
  //            "Type": "ANGRY"
  //          }
  //        ],
  //        "Eyeglasses": {
  //          "Confidence": 98.5116195678711,
  //          "Value": false
  //        },
  //        "EyesOpen": {
  //          "Confidence": 99.65477752685547,
  //          "Value": true
  //        },
  //        "Gender": {
  //          "Confidence": 97.1164321899414,
  //          "Value": "Female"
  //        },
  //        "Landmarks": [
  //          {
  //            "Type": "eyeLeft",
  //            "X": 0.6554790735244751,
  //            "Y": 0.35153862833976746
  //          },
  //          {
  //            "Type": "eyeRight",
  //            "X": 0.7940073609352112,
  //            "Y": 0.38292214274406433
  //          },
  //          {
  //            "Type": "mouthLeft",
  //            "X": 0.6188991069793701,
  //            "Y": 0.46431097388267517
  //          },
  //          {
  //            "Type": "mouthRight",
  //            "X": 0.7352844476699829,
  //            "Y": 0.490242063999176
  //          },
  //          {
  //            "Type": "nose",
  //            "X": 0.7125006914138794,
  //            "Y": 0.44607019424438477
  //          },
  //          {
  //            "Type": "leftEyeBrowLeft",
  //            "X": 0.6096581220626831,
  //            "Y": 0.3071737587451935
  //          },
  //          {
  //            "Type": "leftEyeBrowRight",
  //            "X": 0.6628581285476685,
  //            "Y": 0.3133310079574585
  //          },
  //          {
  //            "Type": "leftEyeBrowUp",
  //            "X": 0.7027584314346313,
  //            "Y": 0.33200803399086
  //          },
  //          {
  //            "Type": "rightEyeBrowLeft",
  //            "X": 0.7813941240310669,
  //            "Y": 0.35023579001426697
  //          },
  //          {
  //            "Type": "rightEyeBrowRight",
  //            "X": 0.8213478922843933,
  //            "Y": 0.34993964433670044
  //          },
  //          {
  //            "Type": "rightEyeBrowUp",
  //            "X": 0.8495538234710693,
  //            "Y": 0.36189284920692444
  //          },
  //          {
  //            "Type": "leftEyeLeft",
  //            "X": 0.629088282585144,
  //            "Y": 0.34286588430404663
  //          },
  //          {
  //            "Type": "leftEyeRight",
  //            "X": 0.6820939183235168,
  //            "Y": 0.3586524724960327
  //          },
  //          {
  //            "Type": "leftEyeUp",
  //            "X": 0.6580297946929932,
  //            "Y": 0.3468707501888275
  //          },
  //          {
  //            "Type": "leftEyeDown",
  //            "X": 0.6537532210350037,
  //            "Y": 0.35663917660713196
  //          },
  //          {
  //            "Type": "rightEyeLeft",
  //            "X": 0.7655976414680481,
  //            "Y": 0.3776427209377289
  //          },
  //          {
  //            "Type": "rightEyeRight",
  //            "X": 0.8166338801383972,
  //            "Y": 0.38544225692749023
  //          },
  //          {
  //            "Type": "rightEyeUp",
  //            "X": 0.7969376444816589,
  //            "Y": 0.37844377756118774
  //          },
  //          {
  //            "Type": "rightEyeDown",
  //            "X": 0.7909533977508545,
  //            "Y": 0.3877102732658386
  //          },
  //          {
  //            "Type": "noseLeft",
  //            "X": 0.6727234721183777,
  //            "Y": 0.44030481576919556
  //          },
  //          {
  //            "Type": "noseRight",
  //            "X": 0.7237889170646667,
  //            "Y": 0.45200300216674805
  //          },
  //          {
  //            "Type": "mouthUp",
  //            "X": 0.6882695555686951,
  //            "Y": 0.4740942418575287
  //          },
  //          {
  //            "Type": "mouthDown",
  //            "X": 0.6720560789108276,
  //            "Y": 0.5046101808547974
  //          },
  //          {
  //            "Type": "leftPupil",
  //            "X": 0.6554790735244751,
  //            "Y": 0.35153862833976746
  //          },
  //          {
  //            "Type": "rightPupil",
  //            "X": 0.7940073609352112,
  //            "Y": 0.38292214274406433
  //          },
  //          {
  //            "Type": "upperJawlineLeft",
  //            "X": 0.5517005324363708,
  //            "Y": 0.30355724692344666
  //          },
  //          {
  //            "Type": "midJawlineLeft",
  //            "X": 0.5320234894752502,
  //            "Y": 0.43352627754211426
  //          },
  //          {
  //            "Type": "chinBottom",
  //            "X": 0.6419994831085205,
  //            "Y": 0.5531964302062988
  //          },
  //          {
  //            "Type": "midJawlineRight",
  //            "X": 0.7752369046211243,
  //            "Y": 0.48957017064094543
  //          },
  //          {
  //            "Type": "upperJawlineRight",
  //            "X": 0.8515444397926331,
  //            "Y": 0.37258899211883545
  //          }
  //        ],
  //        "MouthOpen": {
  //          "Confidence": 68.26280212402344,
  //          "Value": false
  //        },
  //        "Mustache": {
  //          "Confidence": 99.73213195800781,
  //          "Value": false
  //        },
  //        "Pose": {
  //          "Pitch": -11.299633026123047,
  //          "Roll": 17.6924991607666,
  //          "Yaw": 13.582314491271973
  //        },
  //        "Quality": {
  //          "Brightness": 83.72581481933594,
  //          "Sharpness": 67.22731018066406
  //        },
  //        "Smile": {
  //          "Confidence": 98.4793930053711,
  //          "Value": true
  //        },
  //        "Sunglasses": {
  //          "Confidence": 99.3582992553711,
  //          "Value": false
  //        }
  //      }
  //    ]
  //  }

  //  Sample code for parsing the JSON response...
  //  Use the following online tool to generate parsing code from sample JSON:
  //  Generate Parsing Code from JSON

  i := 0;
  count_i := jResp.SizeOfArray('FaceDetails');
  while i < count_i do
    begin
      jResp.I := i;
      AgeRangeHigh := jResp.IntOf('FaceDetails[i].AgeRange.High');
      AgeRangeLow := jResp.IntOf('FaceDetails[i].AgeRange.Low');
      BeardConfidence := jResp.StringOf('FaceDetails[i].Beard.Confidence');
      BeardValue := jResp.BoolOf('FaceDetails[i].Beard.Value');
      BoundingBoxHeight := jResp.StringOf('FaceDetails[i].BoundingBox.Height');
      BoundingBoxLeft := jResp.StringOf('FaceDetails[i].BoundingBox.Left');
      BoundingBoxTop := jResp.StringOf('FaceDetails[i].BoundingBox.Top');
      BoundingBoxWidth := jResp.StringOf('FaceDetails[i].BoundingBox.Width');
      Confidence := jResp.StringOf('FaceDetails[i].Confidence');
      EyeglassesConfidence := jResp.StringOf('FaceDetails[i].Eyeglasses.Confidence');
      EyeglassesValue := jResp.BoolOf('FaceDetails[i].Eyeglasses.Value');
      EyesOpenConfidence := jResp.StringOf('FaceDetails[i].EyesOpen.Confidence');
      EyesOpenValue := jResp.BoolOf('FaceDetails[i].EyesOpen.Value');
      GenderConfidence := jResp.StringOf('FaceDetails[i].Gender.Confidence');
      GenderValue := jResp.StringOf('FaceDetails[i].Gender.Value');
      MouthOpenConfidence := jResp.StringOf('FaceDetails[i].MouthOpen.Confidence');
      MouthOpenValue := jResp.BoolOf('FaceDetails[i].MouthOpen.Value');
      MustacheConfidence := jResp.StringOf('FaceDetails[i].Mustache.Confidence');
      MustacheValue := jResp.BoolOf('FaceDetails[i].Mustache.Value');
      PosePitch := jResp.StringOf('FaceDetails[i].Pose.Pitch');
      PoseRoll := jResp.StringOf('FaceDetails[i].Pose.Roll');
      PoseYaw := jResp.StringOf('FaceDetails[i].Pose.Yaw');
      QualityBrightness := jResp.StringOf('FaceDetails[i].Quality.Brightness');
      QualitySharpness := jResp.StringOf('FaceDetails[i].Quality.Sharpness');
      SmileConfidence := jResp.StringOf('FaceDetails[i].Smile.Confidence');
      SmileValue := jResp.BoolOf('FaceDetails[i].Smile.Value');
      SunglassesConfidence := jResp.StringOf('FaceDetails[i].Sunglasses.Confidence');
      SunglassesValue := jResp.BoolOf('FaceDetails[i].Sunglasses.Value');
      j := 0;
      count_j := jResp.SizeOfArray('FaceDetails[i].Emotions');
      while j < count_j do
        begin
          jResp.J := j;
          Confidence := jResp.StringOf('FaceDetails[i].Emotions[j].Confidence');
          v_Type := jResp.StringOf('FaceDetails[i].Emotions[j].Type');
          j := j + 1;
        end;

      j := 0;
      count_j := jResp.SizeOfArray('FaceDetails[i].Landmarks');
      while j < count_j do
        begin
          jResp.J := j;
          v_Type := jResp.StringOf('FaceDetails[i].Landmarks[j].Type');
          X := jResp.StringOf('FaceDetails[i].Landmarks[j].X');
          Y := jResp.StringOf('FaceDetails[i].Landmarks[j].Y');
          j := j + 1;
        end;

      i := i + 1;
    end;



  rest.Free;
  authAws.Free;
  bdJpg.Free;
  sbJpg.Free;
  json.Free;
  sbRequestBody.Free;
  sbResponseBody.Free;
  jResp.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.