Google AIY Emotion Detection
A device to detect if you are sad and send dog pictures
This project started with assembling the Google AIY Vision Kit, this was very enjoyable and gave me a good insight into what makes up the device.
This code is a fork of the Google example face_camera_detection.
Building on top of this example, I created a counter, which allowed me to keep track of how consistently happy or sad the face in the frame is.
if avg_joy_score(faces) > 0.8:
if joy_counter < 0:
joy_counter = 0
else:
joy_counter += 1
if avg_joy_score(faces) < 0.1:
if joy_counter > 0:
joy_counter = 0
else:
joy_counter -= 1
if joy_counter > 20:
print("Happy")
joy_counter = 0
Sending Emails
The code for sending emails is nested under a conditional of if joy_counter < -20
in a similar way to the Happy branch is defined above.
For sending emails, I first had to work with the Reddit API, this is fairly simple as adding /random.json
to the end of a subreddit will give you a response with a random post from that subreddit. So I just used urllib
to make a request in the following way
request_url = urllib.request.urlopen("https://www.reddit.com/r/dogpictures/random.json")
Then it comes to parsing the response, as the URL to the image is deep in the JSON response. The json
package works for this, with result
being set as a string of the URL
result = json.loads(request_url.read().decode())[0]["data"]["children"][0]["data"]["url"]
Then it comes to working with SendGrid, this is very simple with the sendgrid
Python library
message = Mail(
from_email='contact@samrobbins.uk',
to_emails='samrobbinsgb@gmail.com',
subject='Sending with Twilio SendGrid is Fun',
html_content='<img src='+result+'>')
try:
sg = SendGridAPIClient(env.str('SENDGRID_API_KEY'))
response = sg.send(message)
print(response.status_code)
except Exception as e:
print(e.message)
With those simple modifications, it will now send the image when you get sad.