Image Text/Face Recognition With AWS Rekognition👀
Pato
Posted on October 18, 2019
AWS Rekognition
What is AWS Rekognition?
Rekognition is an AWS service that provides deep learning visual analysis for your images. Rekognition is very easy to integrate into your application by providing an image or video to the AWS Rekognition API. The service will identify some of the following: objects, people, text, scenes, and activities. "Amazon Rekognition also provides highly accurate facial analysis and facial recognition. You can detect, analyze, and compare faces for a wide variety of use cases, including user verification, cataloging, people counting, and public safety." - AWS Official Docs
Now let's start using AWS Rekognition.
Let's start with trying some of their demos to see how AWS Rekognition works.
1) Go to the following link and play with the demos.
Time to get our hands dirty
Warning🚨 :
1) You need to have an AWS Management Console account.
2) It will ask you for your credit card info, but you won't be charged for what you use in this tutorial since it's part of the FREE TIER.
Setting up our S3 Bucket
Amazon S3 or Amazon Simple Storage Service is a service offered by Amazon Web Services that provides object storage through a web service interface.
1) Go to Find Services and look for S3
2) Click on CREATE A BUCKET
3) Enter the bucket name as thisdot-rk-YOUR_NAME.
4) Click on NEXT twice.
5) Uncheck all the boxes to grant public access to the bucket. Click NEXT.
Note: I'm making this bucket public because, for the purpose of this tutorial, I'm not worried about security.
6) Click on CREATE BUCKET
7) Time to upload some images to S3. Click on the bucket you just created.
8) Download this image and save it as thisdot.png.
https://thisdot-rk-pato.s3.amazonaws.com/thisdot.png
9) Click on the dropdown from Mange Permissions and click on Grant public read access to this object(s).
10) Click NEXT
11) In the Storage Class, select Standard, and click NEXT
12) Click UPLOAD
Setting up our Lambda Function
AWS Lambda is an event-driven, serverless computing platform provided by Amazon as a part of Amazon Web Services. It is a computing service that runs code in response to events and automatically manages the computing resources required by that code.
1) Go to Find Services and look for Lambda
2) Click on CREATE FUNCTION
3) For Lambda function name, enter thisdot-rk-YOUR_NAME
4) Under Runtime, click on the dropdown, and select Python 3.7.
5) Click on CREATE FUNCTION
6) Scroll down to where it says Function code. You should see something like this:
7) Erase everything you see in the editor and paste the following code:
Note: Change the name of the bucket to the bucket name you created thisdot-rk-YOUR_NAME.
The following code is going to help us finding the text inside of the images using the .detect_text method.
import json
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
print(event)
dump = json.loads(json.dumps(event))
fileName = dump['image']
print(fileName)
bucket='thisdot-rk-YOUR_NAME'
client=boto3.client('rekognition')
text=client.detect_text(Image={'S3Object':
{'Bucket':bucket,'Name':str(fileName)}})
res = {
"textFound": text
}
return res
Note: To Learn more about other AWS Boto Rekognition functions, visit this website.
8) Scroll down to change the BASIC SETTINGS of the lambda.
9) Change Memory to 512MB, and Timeout to 2min 30sec. This is to ensure your lambda doesn't timeout when processing images.
10) Scroll all the way to the top. In the upper right corner, you should see the SAVE button. Click on it.
Setting up our Security Roles Using IAM
AWS Identity and Access Management (IAM) is a web service that helps you securely control access to AWS resources. You use IAM to control who is authenticated (signed in) and authorized (has permissions) to use resources.
1) Search for the IAM Service (Services IAM)
2) On the left navigation bar, click on ROLES.
3) You can select any lambda you have created to give it a specific role. In this tutorial, we will select the following to give it access to AWS Rekognition.
4) Then click on ATTACH POLICIES
5) Search for rekognition
6) Select AmazonRekognitionFUllAccess
7) Click on ATTACH POLICY
Note: You can have multiple policies attached
Time to Test
1) Go back to your lambda function.
2) In the top right corner, select the dropdown that says "Select a test event"
3) Then select "Configure test events"
4) Give a name to your event
5) Then enter the following JSON object
{
"image": "thisdot.png"
}
Where "thisdot.png" is the name of your image inside of your S3 bucket.
6) Click CREATE
7) On Your top right corner, you will see the TEST button. Click on it.
8) You should see a green box. Click on expand details.
9) Take a look at the response object. As you can see, it has found our text inside of the image.
Awesome!!!, right?
Now, let's jump to compare faces. Imagine you want to see if one person appears in the same picture. Rekognition can do this. Imagine all the possibilities!
1) Download these 2 images.
Source Image https://thepracticaldev.s3.amazonaws.com/i/ktpt1lx1ubzt3ilupph7.jpg
Target Image
https://thepracticaldev.s3.amazonaws.com/i/p5j8z6hiey8z8rkspms6.jpg
2) Upload them to S3, following the steps previously mentioned.
3) Go back to your lambda, and create a new test, or edit the existing test. Your test will look like this:
{
"sourceImage": "source.jpg",
"targetImage": "target.jpg"
}
4) Then, we are going to modify our lambda code to be able to compare faces
import json
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
print(event)
dump = json.loads(json.dumps(event))
sourceImage = dump['sourceImage']
targetImage = dump['targetImage']
bucket='thisdot-rk-YOUR_NAME'
client = boto3.client('rekognition')
faceComparison= client.compare_faces(
SourceImage={'S3Object': {'Bucket':bucket,'Name':str(sourceImage)}},
TargetImage={'S3Object': {'Bucket':bucket,'Name':str(targetImage)}}
)
res = {
"faceRecognition": faceComparison
}
return res
5) Look at the Execution results, and analyze the data.
Tell me what you think about this tutorial on twitter or comment below!
Enjoy this article? Head on over to This Dot Labs and check us out! We are a tech consultancy that does all things javascript and front end. We specialize in open source software like, Angular, React and Vue.
Posted on October 18, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.