Kotlin AWS Rekognition Conversion

В настоящее время я портирую приложение, созданное на Swift для iOS. В Swift вызов повторного распознавания делается следующим образом:

Сначала инициализируйте клиента после импорта пакета в подфайл:

rekognitionClient = AWSRekognition.default()

Затем создайте «faceRequest», чтобы вызвать службу и посмотреть, соответствует ли лицо в вашей коллекции отправленному вами изображению:

guard let FaceRequest = AWSRekognitionSearchFacesByImageRequest() else
       {
           puts("Unable to initialize AWSRekognitionSearchfacerequest.")
           return
       }
       FaceRequest.collectionId = "MY_COLLECTION_NAME"
       FaceRequest.faceMatchThreshold = 75
       FaceRequest.maxFaces = 2
       let FacesourceImage = capturedImage
       let Faceimage = AWSRekognitionImage()
       Faceimage!.bytes = UIImageJPEGRepresentation(FacesourceImage!, 0.7)
       FaceRequest.image = Faceimage
       rekognitionClient.searchFaces(byImage:FaceRequest) { (response:AWSRekognitionSearchFacesByImageResponse?, error:Error?) in
           if error == nil
           {
               //print(response!)

               for faceMatch in (response?.faceMatches)! {
                     //do something
               }
           }
        }

Я хочу преобразовать это в Kotlin, и у меня проблемы с синтаксисом, и я делаю запрос. У меня есть изображение в растровом формате, которое готово к отправке в службу.

Вот один из примеров того, что я пробовал:

fun doRekognitionRequest(bitmap: Bitmap){

    //this says AmazonRekognitionClient has been deprecated
    val rekognitionClient = AmazonRekognitionClient()

    //unresolved reference
    val facesImageRequest = facesByImageRequest()
}

Вот мой импорт:

import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.SurfaceTexture
import android.graphics.drawable.BitmapDrawable
import android.hardware.camera2.*
import android.net.Uri
import android.os.*
import android.util.Log
import android.view.*
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import kotlinx.android.synthetic.main.camera_layout.*
import pub.devrel.easypermissions.AfterPermissionGranted
import pub.devrel.easypermissions.EasyPermissions
import java.io.*
import java.io.File
import java.util.*
import android.provider.MediaStore
import androidx.core.content.FileProvider
import com.amazonaws.services.rekognition.AmazonRekognition;
import com.amazonaws.services.rekognition.AmazonRekognitionClient
import com.amazonaws.services.rekognition.model.FaceMatch;
import com.amazonaws.services.rekognition.model.Image;
import com.amazonaws.services.rekognition.model.S3Object;
import com.amazonaws.services.rekognition.model.SearchFacesByImageRequest;
import com.amazonaws.services.rekognition.model.SearchFacesByImageResult;

Я пытаюсь развить то, что сделал этот парень: https://github.com/awslabs/serverless-photo-recognition/blob/master/src/main/kotlin/com/budilov/rekognition/RekognitionService.kt

А также попытка преобразовать пример кода java из документации rekognition в Kotlin, но безуспешно.

https://docs.aws.amazon.com/rekognition/latest/dg/search-face-with-image-procedure.html

   AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient();

  ObjectMapper objectMapper = new ObjectMapper();

   // Get an image object from S3 bucket.
  Image image=new Image()
          .withS3Object(new S3Object()
                  .withBucket(bucket)
                  .withName(photo));

  // Search collection for faces similar to the largest face in the image.
  SearchFacesByImageRequest searchFacesByImageRequest = new SearchFacesByImageRequest()
          .withCollectionId(collectionId)
          .withImage(image)
          .withFaceMatchThreshold(70F)
          .withMaxFaces(2);

   SearchFacesByImageResult searchFacesByImageResult = 
           rekognitionClient.searchFacesByImage(searchFacesByImageRequest);

   System.out.println("Faces matching largest face in image from" + photo);
  List < FaceMatch > faceImageMatches = searchFacesByImageResult.getFaceMatches();
  for (FaceMatch face: faceImageMatches) {
      System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
              .writeValueAsString(face));
     System.out.println();
  }

Kotlin и Android - все для меня в новинку, я работаю с C# и Swift, поэтому любая помощь будет принята с благодарностью. Ваше здоровье!

Редактировать:

Удалось заставить конструктор searchfacesbyImageRequest быть замеченным компилятором. Теперь застрял на преобразовании растрового изображения в изображение.

    val facesImageRequest = SearchFacesByImageRequest()
    facesImageRequest.collectionId = "MY_COLLECTION_NAME"
    facesImageRequest.maxFaces = 2
    facesImageRequest.faceMatchThreshold = 75.0F
    facesImageRequest.image = Image(bitmap)
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
348
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот один из способов создания com.amazonaws.services.rekognition.model.Image из android.graphics.Bitmap.

val bitmap : Bitmap? = // Source of your picture
val byteBuffer = ByteBuffer.allocate(bitmap.byteCount)
bitmap?.copyPixelsToBuffer(byteBuffer)
val image = Image().withBytes(byteBuffer)

Другие вопросы по теме