Amazon Rekognition "Запрос имеет неверный формат изображения" - PullRequest
0 голосов
/ 20 сентября 2019

Всегда получаю одну и ту же ошибку из метода CompareFaces ().Я пробовал другой формат изображения, размер изображения, тип изображения, различные кодировки (или ни один из них).Ничто не помогло мне здесь.Пожалуйста, дайте мне совет, что мне делать, или укажите на мою ошибку.Спасибо!

go версия go1.12.7 linux / amd64, AWSSDKVersion = "1.23.17"

import (
"bytes"
"encoding/base64"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/rekognition"
"github.com/aws/aws-sdk-go/service/s3"
"io/ioutil"
"log"
"net/http"
"os"
)

func main() {
creds := credentials.NewCredentials(
    &credentials.StaticProvider{Value: credentials.Value{
        AccessKeyID:     "", // insert creds here
        SecretAccessKey: "",
    }},
)

var myBucket = "my-very-unusual-and-odd-test-bucket"

imgFile, _ := os.Open("path.JPEG")
defer imgFile.Close()

buf, _ := ioutil.ReadAll(imgFile)
base64Text := []byte(base64.StdEncoding.EncodeToString(buf))

awsSess, _ := session.NewSession(&aws.Config{
    Credentials: creds,
    Region:      aws.String("us-west-2"),
    LogLevel:    aws.LogLevel(aws.LogDebug),
})

svc := s3.New(awsSess)
bucket := &s3.CreateBucketInput{
    Bucket: aws.String(myBucket),
}
svc.CreateBucket(bucket)

svc.PutObject(&s3.PutObjectInput{
    Bucket:             aws.String(myBucket),
    Key:                aws.String(myBucket + "/photo"),
    Body:               bytes.NewReader(base64Text),
    ContentLength:      aws.Int64(int64(len(base64Text))),
    ContentType:        aws.String(http.DetectContentType(base64Text)),
    ContentDisposition: aws.String("attachment"),
})

input := &s3.ListObjectsInput{
    Bucket:  aws.String(myBucket),
    MaxKeys: aws.Int64(50),
}

objects, _ := svc.ListObjects(input)
svcR := rekognition.New(awsSess)

for _, object := range objects.Contents {
    key := *object.Key

    input := &rekognition.CompareFacesInput{
        SimilarityThreshold: aws.Float64(90.000000),
        SourceImage: &rekognition.Image{
            Bytes: base64Text,
        },
        TargetImage: &rekognition.Image{
            S3Object: &rekognition.S3Object{
                Bucket: aws.String(myBucket),
                Name:   aws.String(key),
            },
        },
    }

    _, err := svcR.CompareFaces(input)
    if err != nil {
        log.Fatal(err)
    }
}}
...