diff --git a/custom-labels/golang/go.mod b/custom-labels/golang/go.mod new file mode 100644 index 0000000..10cb772 --- /dev/null +++ b/custom-labels/golang/go.mod @@ -0,0 +1,29 @@ +module github.com/aws-samples/amazon-rekognition-code-samples/custom-labels/golang + +go 1.20 + +require ( + github.com/aws/aws-sdk-go-v2 v1.17.5 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.15 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.15 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.21 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.24 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.23 // indirect + github.com/aws/aws-sdk-go-v2/service/rekognition v1.23.4 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.30.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.18.5 // indirect + github.com/aws/smithy-go v1.13.5 // indirect + github.com/fogleman/gg v1.3.0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + golang.org/x/image v0.5.0 // indirect +) diff --git a/custom-labels/golang/go.sum b/custom-labels/golang/go.sum new file mode 100644 index 0000000..3bfc3fe --- /dev/null +++ b/custom-labels/golang/go.sum @@ -0,0 +1,77 @@ +github.com/aws/aws-sdk-go-v2 v1.17.5 h1:TzCUW1Nq4H8Xscph5M/skINUitxM5UBAyvm2s7XBzL4= +github.com/aws/aws-sdk-go-v2 v1.17.5/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10 h1:dK82zF6kkPeCo8J1e+tGx4JdvDIQzj7ygIoLg8WMuGs= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10/go.mod h1:VeTZetY5KRJLuD/7fkQXMU6Mw7H5m/KP2J5Iy9osMno= +github.com/aws/aws-sdk-go-v2/config v1.18.15 h1:509yMO0pJUGUugBP2H9FOFyV+7Mz7sRR+snfDN5W4NY= +github.com/aws/aws-sdk-go-v2/config v1.18.15/go.mod h1:vS0tddZqpE8cD9CyW0/kITHF5Bq2QasW9Y1DFHD//O0= +github.com/aws/aws-sdk-go-v2/credentials v1.13.15 h1:0rZQIi6deJFjOEgHI9HI2eZcLPPEGQPictX66oRFLL8= +github.com/aws/aws-sdk-go-v2/credentials v1.13.15/go.mod h1:vRMLMD3/rXU+o6j2MW5YefrGMBmdTvkLLGqFwMLBHQc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23 h1:Kbiv9PGnQfG/imNI4L/heyUXvzKmcWSBeDvkrQz5pFc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23/go.mod h1:mOtmAg65GT1HIL/HT/PynwPbS+UG0BgCZ6vhkPqnxWo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29 h1:9/aKwwus0TQxppPXFmf010DFrE+ssSbzroLVYINA+xE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29/go.mod h1:Dip3sIGv485+xerzVv24emnjX5Sg88utCL8fwGmCeWg= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23 h1:b/Vn141DBuLVgXbhRWIrl9g+ww7G+ScV5SzniWR13jQ= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23/go.mod h1:mr6c4cHC+S/MMkrjtSlG4QA36kOznDep+0fga5L/fGQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30 h1:IVx9L7YFhpPq0tTnGo8u8TpluFu7nAn9X3sUDMb11c0= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30/go.mod h1:vsbq62AOBwQ1LJ/GWKFxX8beUEYeRp/Agitrxee2/qM= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.21 h1:QdxdY43AiwsqG/VAqHA7bIVSm3rKr8/p9i05ydA0/RM= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.21/go.mod h1:QtIEat7ksHH8nFItljyvMI0dGj8lipK2XZ4PhNihTEU= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11 h1:y2+VQzC6Zh2ojtV2LoC0MNwHWc6qXv/j2vrQtlftkdA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11/go.mod h1:iV4q2hsqtNECrfmlXyord9u4zyuFEJX9eLgLpSPzWA8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.24 h1:Qmm8klpAdkuN3/rPrIMa/hZQ1z93WMBPjOzdAsbSnlo= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.24/go.mod h1:QelGeWBVRh9PbbXsfXKTFlU9FjT6W2yP+dW5jMQzOkg= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23 h1:QoOybhwRfciWUBbZ0gp9S7XaDnCuSTeK/fySB99V1ls= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23/go.mod h1:9uPh+Hrz2Vn6oMnQYiUi/zbh3ovbnQk19YKINkQny44= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.23 h1:qc+RW0WWZ2KApMnsu/EVCPqLTyIH55uc7YQq7mq4XqE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.23/go.mod h1:FJhZWVWBCcgAF8jbep7pxQ1QUsjzTwa9tvEXGw2TDRo= +github.com/aws/aws-sdk-go-v2/service/rekognition v1.23.4 h1:WIfKehRDb9VDl7Vq6AS66cxNAPJrUb7R+tGcHgNCOtA= +github.com/aws/aws-sdk-go-v2/service/rekognition v1.23.4/go.mod h1:p1RwsRk2JAChaE1bGdKlMmb+DGADo9vQpQTeTFH/zX4= +github.com/aws/aws-sdk-go-v2/service/s3 v1.30.5 h1:kFfb+NMap4R7nDvBYyABa/nw7KFMtAfygD1Hyoxh4uE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.30.5/go.mod h1:Dze3kNt4T+Dgb8YCfuIFSBLmE6hadKNxqfdF0Xmqz1I= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.4 h1:qJdM48OOLl1FBSzI7ZrA1ZfLwOyCYqkXV5lko1hYDBw= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.4/go.mod h1:jtLIhd+V+lft6ktxpItycqHqiVXrPIRjWIsFIlzMriw= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4 h1:YRkWXQveFb0tFC0TLktmmhGsOcCgLwvq88MC2al47AA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4/go.mod h1:zVwRrfdSmbRZWkUkWjOItY7SOalnFnq/Yg2LVPqDjwc= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.5 h1:L1600eLr0YvTT7gNh3Ni24yGI7NSHkq9Gp62vijPRCs= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.5/go.mod h1:1mKZHLLpDMHTNSYPJ7qrcnCQdHCWsNQaT0xRvq2u80s= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= +github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/image v0.5.0 h1:5JMiNunQeQw++mMOz48/ISeNu3Iweh/JaZU8ZLqHRrI= +golang.org/x/image v0.5.0/go.mod h1:FVC7BI/5Ym8R25iw5OLsgshdUBbT1h5jZTpA+mvAdZ4= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/custom-labels/golang/main.go b/custom-labels/golang/main.go new file mode 100644 index 0000000..7e28973 --- /dev/null +++ b/custom-labels/golang/main.go @@ -0,0 +1,100 @@ +package main + +import ( + "context" + "flag" + "image" + + _ "image/jpeg" + _ "image/png" + "log" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/rekognition" + "github.com/aws/aws-sdk-go-v2/service/rekognition/types" + "github.com/aws/aws-sdk-go-v2/service/s3" + "github.com/fogleman/gg" +) + +var bucketName = flag.String("bucket", "", "The name of the bucket to get the object") +var key = flag.String("key", "", "The s3 object key to the image file (JPEG, JPG, PNG)") +var modelArn = flag.String("model-arn", "", "The rekognition custom labels model arn") +var minConfidence = float32(*flag.Float64("min-confidence", 70, "The minimum confidence value ")) + +func main() { + flag.Parse() + + cfg, err := config.LoadDefaultConfig(context.TODO()) + if err != nil { + log.Fatalf("unable to load SDK config, %v", err) + } + + svc := rekognition.NewFromConfig(cfg) + var s3Obj = types.S3Object{ + Bucket: bucketName, + Name: key} + + resp, err := svc.DetectCustomLabels(context.TODO(), &rekognition.DetectCustomLabelsInput{ + Image: &types.Image{ + S3Object: &s3Obj}, + ProjectVersionArn: modelArn, + MinConfidence: aws.Float32(minConfidence), + }) + + if err != nil { + log.Fatalf("unable to detect custom labels, %v", err) + } + + log.Printf("Detected %v labels", len(resp.CustomLabels)) + + for _, label := range resp.CustomLabels { + log.Printf("%v: %v\b", *label.Name, *label.Confidence) + } + + s3Client := s3.NewFromConfig(cfg) + input := s3.GetObjectInput{ + Bucket: bucketName, + Key: key, + } + s3Resp, err := s3Client.GetObject(context.TODO(), &input) + if err != nil { + log.Fatalf("unable to retrieve image: %v", err) + } + + i, _, err := image.Decode(s3Resp.Body) + if err != nil { + log.Fatalf("can't decode image: %v", err) + } + + ggContext := gg.NewContextForImage(i) + err = ggContext.LoadFontFace("/Library/Fonts/Arial Unicode.ttf", 100) + if err != nil { + log.Fatalf("Unable to load font: %v", err) + } + ggContext.SetRGB(1, 0, 0) + ggContext.SetLineWidth(10) + + for i, label := range resp.CustomLabels { + x := float64(*label.Geometry.BoundingBox.Left) * float64(ggContext.Width()) + y := float64(*label.Geometry.BoundingBox.Top) * float64(ggContext.Height()) + w := float64(*label.Geometry.BoundingBox.Width) * float64(ggContext.Width()) + h := float64(*label.Geometry.BoundingBox.Height) * float64(ggContext.Height()) + + log.Printf("Detected label #%v: %v", i, *label.Name) + log.Printf("\tLeft: %v", x) + log.Printf("\tTop: %v", y) + log.Printf("\tWidth: %v", w) + log.Printf("\tHeight: %v", h) + + ggContext.DrawRectangle(x, y, w, h) + ggContext.Stroke() + ggContext.DrawString(*label.Name, x, y) + ggContext.Stroke() + } + + err = ggContext.SavePNG("output.png") + if err != nil { + log.Fatalf("error saving image: %v", err) + } +} diff --git a/custom-labels/add-images-to-datasets-and-retrigger-training-job-using-rekognition-custom-labels-api.ipynb b/custom-labels/python/add-images-to-datasets-and-retrigger-training-job-using-rekognition-custom-labels-api.ipynb similarity index 100% rename from custom-labels/add-images-to-datasets-and-retrigger-training-job-using-rekognition-custom-labels-api.ipynb rename to custom-labels/python/add-images-to-datasets-and-retrigger-training-job-using-rekognition-custom-labels-api.ipynb diff --git a/custom-labels/custom-object-detection-using-rekognition-custom-labels-api.ipynb b/custom-labels/python/custom-object-detection-using-rekognition-custom-labels-api.ipynb similarity index 100% rename from custom-labels/custom-object-detection-using-rekognition-custom-labels-api.ipynb rename to custom-labels/python/custom-object-detection-using-rekognition-custom-labels-api.ipynb diff --git a/custom-labels/media/screenshots/CreateDefaultAmazonS3Bucket.png b/custom-labels/python/media/screenshots/CreateDefaultAmazonS3Bucket.png similarity index 100% rename from custom-labels/media/screenshots/CreateDefaultAmazonS3Bucket.png rename to custom-labels/python/media/screenshots/CreateDefaultAmazonS3Bucket.png diff --git a/custom-labels/media/screenshots/Dataset_1.png b/custom-labels/python/media/screenshots/Dataset_1.png similarity index 100% rename from custom-labels/media/screenshots/Dataset_1.png rename to custom-labels/python/media/screenshots/Dataset_1.png diff --git a/custom-labels/media/screenshots/Dataset_2.png b/custom-labels/python/media/screenshots/Dataset_2.png similarity index 100% rename from custom-labels/media/screenshots/Dataset_2.png rename to custom-labels/python/media/screenshots/Dataset_2.png diff --git a/custom-labels/media/screenshots/Dataset_3.png b/custom-labels/python/media/screenshots/Dataset_3.png similarity index 100% rename from custom-labels/media/screenshots/Dataset_3.png rename to custom-labels/python/media/screenshots/Dataset_3.png diff --git a/custom-labels/media/screenshots/Dataset_4.png b/custom-labels/python/media/screenshots/Dataset_4.png similarity index 100% rename from custom-labels/media/screenshots/Dataset_4.png rename to custom-labels/python/media/screenshots/Dataset_4.png diff --git a/custom-labels/media/screenshots/Dataset_5.png b/custom-labels/python/media/screenshots/Dataset_5.png similarity index 100% rename from custom-labels/media/screenshots/Dataset_5.png rename to custom-labels/python/media/screenshots/Dataset_5.png diff --git a/custom-labels/media/screenshots/Dataset_6.png b/custom-labels/python/media/screenshots/Dataset_6.png similarity index 100% rename from custom-labels/media/screenshots/Dataset_6.png rename to custom-labels/python/media/screenshots/Dataset_6.png diff --git a/custom-labels/media/screenshots/Dataset_7.png b/custom-labels/python/media/screenshots/Dataset_7.png similarity index 100% rename from custom-labels/media/screenshots/Dataset_7.png rename to custom-labels/python/media/screenshots/Dataset_7.png diff --git a/custom-labels/media/screenshots/Initialize_AmazonRekognitionCustomLabels.png b/custom-labels/python/media/screenshots/Initialize_AmazonRekognitionCustomLabels.png similarity index 100% rename from custom-labels/media/screenshots/Initialize_AmazonRekognitionCustomLabels.png rename to custom-labels/python/media/screenshots/Initialize_AmazonRekognitionCustomLabels.png diff --git a/custom-labels/media/screenshots/Metrics_4.png b/custom-labels/python/media/screenshots/Metrics_4.png similarity index 100% rename from custom-labels/media/screenshots/Metrics_4.png rename to custom-labels/python/media/screenshots/Metrics_4.png diff --git a/custom-labels/media/screenshots/Metrics_5.png b/custom-labels/python/media/screenshots/Metrics_5.png similarity index 100% rename from custom-labels/media/screenshots/Metrics_5.png rename to custom-labels/python/media/screenshots/Metrics_5.png diff --git a/custom-labels/media/screenshots/Metrics_6.png b/custom-labels/python/media/screenshots/Metrics_6.png similarity index 100% rename from custom-labels/media/screenshots/Metrics_6.png rename to custom-labels/python/media/screenshots/Metrics_6.png diff --git a/custom-labels/media/screenshots/Sagemaker_1.png b/custom-labels/python/media/screenshots/Sagemaker_1.png similarity index 100% rename from custom-labels/media/screenshots/Sagemaker_1.png rename to custom-labels/python/media/screenshots/Sagemaker_1.png diff --git a/custom-labels/media/screenshots/Sagemaker_2.png b/custom-labels/python/media/screenshots/Sagemaker_2.png similarity index 100% rename from custom-labels/media/screenshots/Sagemaker_2.png rename to custom-labels/python/media/screenshots/Sagemaker_2.png diff --git a/custom-labels/media/screenshots/Sagemaker_3.png b/custom-labels/python/media/screenshots/Sagemaker_3.png similarity index 100% rename from custom-labels/media/screenshots/Sagemaker_3.png rename to custom-labels/python/media/screenshots/Sagemaker_3.png diff --git a/custom-labels/media/screenshots/Sagemaker_4.png b/custom-labels/python/media/screenshots/Sagemaker_4.png similarity index 100% rename from custom-labels/media/screenshots/Sagemaker_4.png rename to custom-labels/python/media/screenshots/Sagemaker_4.png diff --git a/custom-labels/media/screenshots/Sagemaker_5.png b/custom-labels/python/media/screenshots/Sagemaker_5.png similarity index 100% rename from custom-labels/media/screenshots/Sagemaker_5.png rename to custom-labels/python/media/screenshots/Sagemaker_5.png diff --git a/custom-labels/media/screenshots/Sagemaker_6.png b/custom-labels/python/media/screenshots/Sagemaker_6.png similarity index 100% rename from custom-labels/media/screenshots/Sagemaker_6.png rename to custom-labels/python/media/screenshots/Sagemaker_6.png