A device to detect if you are sad and send dog pictures
Aug 01, 2020
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
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())["data"]["children"]["data"]["url"]
Then it comes to working with SendGrid, this is very simple with the
sendgrid Python library
message = Mail( email@example.com', firstname.lastname@example.org', 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.