【问题标题】:How to use AWS Rekognition to Compare Face in Swift 3如何在 Swift 3 中使用 AWS Rekognition 比较人脸
【发布时间】:2017-09-29 07:02:37
【问题描述】:

我一直在尝试使用 AWSRekognition SDK 来比较人脸。但是,亚马逊没有关于如何将其 SDK 与 iOS 集成的文档。他们的链接显示了如何使用 Recognition (Developer Guide),其中的示例仅在 Java 中并且非常有限。

我想知道是否有人知道如何在 Swift 3 中集成 AWS Rekognition。如何初始化它并使用图像发出请求,接收带有标签的响应。

我有 AWS 签名 AccessKey、SecretKey、AWS 区域、服务名称。还有身体

{
  "SourceImage": {
    "S3Object": {
      "Bucket": "bucketName",
      "Name": "ios/sample.jpg"
    }
  },
  "TargetImage": {
    "S3Object": {
      "Bucket": "buketName",
      "Name": "ios/target.JPG"
    }
  }
}

如何初始化 Rekognition 并构建请求。

谢谢!

【问题讨论】:

    标签: ios amazon-web-services swift3 amazon-rekognition


    【解决方案1】:
    1. 实例化 Rekognition 客户端,这里我使用的是默认配置的客户端。

      let rekognitionClient:AWSRekognition = AWSRekognition.default()
      

    否则,您可以按如下方式使用凭据:

        let credentialsProvider = AWSCognitoCredentialsProvider(
            regionType: AWSRegionType.usEast2,
            identityPoolId: "us-east-2_myPoolID")
    
        let configuration = AWSServiceConfiguration(
            region: AWSRegionType.usEast2,
            credentialsProvider: credentialsProvider)
    
        AWSServiceManager.default().defaultServiceConfiguration = configuration
        let rekognitionClient:AWSRekognition = AWSRekognition.default()
    
    1. 现在构造请求并在其中设置图像。

      let image = UIImage(named: "MyImage")
      let request = AWSRekognitionDetectLabelsRequest() 
      request.image = image
      request.maxLabels = <num_labels_needed>
      request.minConfidence = <confidence_interval_needed>
      
    2. 现在要比较人脸,请阅读 CompareFacesRequest:https://github.com/aws/aws-sdk-ios/blob/master/AWSRekognition/AWSRekognitionService.m#L288

    SDK 中有一个示例测试,用于比较 ObjC 中的两个人脸,但您可以在 Swift 中进行翻译:

    https://github.com/aws/aws-sdk-ios/blob/master/AWSRekognitionUnitTests/AWSGeneralRekognitionTests.m#L60

        let key = "testCompareFaces"
        let configuration = AWSServiceConfiguration(region: AWSRegionUSEast2, credentialsProvider: nil)
        AWSRekognition.register(with: configuration, forKey: key)
        AWSRekognition(for: key).compareFaces(AWSRekognitionCompareFacesRequest()).continue(withBlock: {(_ task: AWSTask) -> Any in
            print("completed")
    

    【讨论】:

    • 谢谢你,Karthikeyan!但它是 AWSRekognitionDetectLabelsRequest。不知何故,它很有帮助。我创造了自己来比较脸。但是如何将 let image = UIImage(named: "MyImage") 更改为存储桶。我的两张图片都来自本地。我想将一个目标图像设置为存储桶图像
    • 是否要引用存储在 S3 存储桶中的图像而不是本地图像?您是否尝试过下载图像并使用适用于 iOS 的 AWS SDK 中的 S3 TransferUtility 引用它?
    • 感谢 Karthikeyan 抽出宝贵时间。是的。我没有尝试过,但现在我可以使用“AWSRekongnitionS3Object”、“AWSRekonitionImage”类来使用存储桶图像。在 AWSRekognitionModel.m 文件中找到。谢谢!请在推特上关注我@ImPrana。如果您不介意,我会通过社交媒体与您联系。
    • @PranavanSp,如果你完成了实现,请分享代码,这将是有帮助的
    • 我正在使用 AWS 进行面部匹配。我从服务器下载了一个图像,从本地下载了另一个图像。我怎样才能做到这一点?我需要将两个图像都添加到 S3 存储桶然后使用面部匹配?请解释一下。我想在 iOS 9 中使用面部匹配。@PranavanSp
    【解决方案2】:

    Swift 5.0

    let key = "testCompareFaces"
    let credentialsProvider = AWSStaticCredentialsProvider(accessKey: "Add_access_key_id", secretKey:"Add_secret_access_key_id")
    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider)
    AWSServiceManager.default().defaultServiceConfiguration = configuration
        
    AWSRekognition.register(with: configuration!, forKey: key)
    let rekognition = AWSRekognition(forKey: key)
    
    guard let request = AWSRekognitionCompareFacesRequest() else {
        puts("Unable to initialize AWSRekognitionDetectLabelsRequest.")
        return
    }
    let sourceImage = AWSRekognitionImage()
    sourceImage!.bytes = sourceImage.jpegData(compressionQuality: 0.4)// Specify your source image
    request.sourceImage = sourceImage
    
    let targetImage = AWSRekognitionImage()
    targetImage!.bytes = targetImage.jpegData(compressionQuality: 0.4) // Specify your target image
    request.targetImage = targetImage
    
    rekognition.compareFaces(request) { (respone, error) in
        if error == nil {
            if let response = respone {
                if let first = response.faceMatches?.first {
                    print(first)
                }
            }
        } else {
            print(error?.localizedDescription)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2019-03-28
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      相关资源
      最近更新 更多