ImageEn, unit iexGoogleApi




function ProcessImage(const Filename: string; SilentFailures: Boolean = False): Boolean; overload;
function ProcessImage(bmp: TIEBitmap; SilentFailures: Boolean = False): Boolean; overload;
function ProcessImage(Stream: TStream; SilentFailures: Boolean = False): Boolean; overload;


Submit an image to the Google Vision API for processing.
If SilentFailures = False, an exception will be raised on failure. Otherwise the result will be False on failure.

Specify your API key using: GoogleApiKey
Specify which features to detect using: RequestTypes
Specify the delivery size by setting SendImageWidth and SendImageHeight

Then submit, e.g. GoogleApi.ProcessImage( ImageEnView1.IEBitmap );

Access the results via:

 You need an API key that supports the "Google Cloud Vision API". See our instructions for this.
 Google recommends that images be scaled for sending by setting SendImageWidth and SendImageHeight
 If you are sending a full size image, then the Filename overload will likely give best performance. If you are scaling the image and already have it loaded, then the TIEBitmap is likely best.
 ProcessImage() requires Delphi/BCB 10.1 (Berlin) or newer (on older versions you can still parse content by setting ResponseJSON)


Demo  Demos\InputOutput\GoogleVisionApi\GoogleVisionApi.dpr


Cursor := crHourglass;
lblSubmitting.Visible := True;
GVision := TIEGoogleVision.Create( MY_API_KEY );
  // Use recommended delivery size (for faster processing)
  GVision.SendImageWidth  := 640;
  GVision.SendImageHeight := 480;

  GVision.RequestTypes := [iegrWebDetection, iegrSafeSearchDetection, iegrLandmarkDetection];
  GVision.ProcessImage( edtFilename.Text );


  if Length( GVision.WebDetection.bestGuessLabels ) > 0 then
    lbxResults.Items.Add( 'This image is likely to be: ' + GVision.WebDetection.bestGuessLabels[0].webLabel );

  if GVision.HasLandmarkAnnotations then
    lbxResults.Items.Add( 'This image is the landmark: ' + GVision.LandmarkAnnotations[0].description );
    lbxResults.Items.Add( 'Latitude: '  + LatLongToStr( GVision.LandmarkAnnotations[0].latitude, True ));
    lbxResults.Items.Add( 'Longitude: ' + LatLongToStr( GVision.LandmarkAnnotations[0].longitude, False ));

  lbxResults.Items.Add( format( 'Found %d matching images on the web', [ GVision.WebDetection.fullMatchingImages.Count ]));
  lbxResults.Items.AddStrings( GVision.WebDetection.fullMatchingImages );

  lbxResults.Items.Add( format( 'Found %d pages on the web containing this image', [ GVision.WebDetection.pagesWithMatchingImages.Count ]));
  lbxResults.Items.AddStrings( GVision.WebDetection.pagesWithMatchingImages );

  if in [ieglLikely, ieglVeryLikely] then
    lbxResults.Items.Add( 'Likely to be an ADULT image' );

  if GVision.SafeSearchAnnotation.violence in [ieglLikely, ieglVeryLikely] then
    lbxResults.Items.Add( 'Likely to be an VIOLENT image' );

  Cursor := crDefault;
  lblSubmitting.Visible := False;