49714 Programming for Online Prototypes
· 9 members
A hands on introduction to building online products and services through code
Movie Eva can help you find a movie for the day! Just simply send her a selfie and she will recommend a movie based on your mood. Prefer texting? You can text her a genre type you desire or tell her how you feel today.
Imagine this scenario: you and your friends just made a last-minute decision that you want to watch a movie together, and now you are struggling with what movie to watch. Sounds familiar? The struggle of finding a movie is real! According to Hick's law, the more options you have, the longer it takes to make a choice. With the attention to solve this problem, I created Movie Eva to recommend movies basing on your feelings or desired genre type - one movie at a time!
With the rapid development of Artificial Intelligence and deep machine learning, there is never a lack of movie recommender that can suggest movies base on users' behavior on the internet. However, the process of finding a movie online is laborious for me. Opening a browser, typing in keywords, clicking into a movie database website, rolling through pages on the websites, and debating on choices...this process is time-consuming. So I looked to shorten this process.
Looking into zero-UI concepts, a chatbot will be a very suitable solution. I got some inspiration from the HuggingFace chatbot, a social AI featuring chit-chat with users, selfie trading, and character customization. The bot doesn't try to disguise itself as a human because it sometimes will provide choices of response for users, which does not resemble human texting conversation. However, this is a smart and effective way to guide the users in the interaction, especially if the bot is not able to handle out-of-range questions.
4. Connecting APIs
I looked into 2 APIs: Microsoft Face API and the Movie DB API. The former can analyze data such as emotion from images, and the latter is a movie database that offers multiple ways to extract a movie information. I am pulling these two APIs together because I tried to recommend movies by reading users' mood if they choose to send a selfie to the bot.
#------------------------------------------------------------------------------
# gems for both APIs:
# Microsoft Azure & theMovieDB
#------------------------------------------------------------------------------
require 'net/http' #emotion API library
require 'parseconfig'
require 'rest-client'
require 'themoviedb-api' #moviedb database
#------------------------------------------------------------------------------
# call for the movieDb API
#------------------------------------------------------------------------------
Tmdb::Api.key("aa73605e3dfbc5266697038b580c3678")
#call
response = Tmdb::Genre.movies(12)
response2 = Tmdb::Genre.movies(10749)
#------------------------------------------------------------------------------
# call for the Azure face API
#------------------------------------------------------------------------------
uri = URI('https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect')
uri.query = URI.encode_www_form({
# Request parameters
'returnFaceId' => 'true',
'returnFaceLandmarks' => 'false',
'returnFaceAttributes' => 'age,gender,headPose,smile,facialHair,glasses,' +
'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'
})
request = Net::HTTP::Post.new(uri.request_uri)
# Request headers
# Replace <Subscription Key> with your valid subscription key.
request['Ocp-Apim-Subscription-Key'] = '74e4615ad75b40179c0cca590c66615c'
request['Content-Type'] = 'application/json'
imageUri = media_url
request.body = "{\"url\": \"" + imageUri + "\"}"
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
http.request(request)
end
#call
json = JSON.parse( response.body )
emotions = json.first["faceAttributes"]["emotion"]
searchEmotion = emotions.max_by{|k,v| v}[0]
Click to Expand
1. More Usability Testing
How I decided to match different genre types to different emotions was to do a quick survey - I asked my friend to do the matching. The survey sample could have been bigger if I have more time so that the data would have been more accurate.
2. Better with Random Questions
I can dig deeper into the conversation. For example, "I feel" / "I am" + "{feeling}" can trigger a next step response such as "Why do you feel this way?"
In some usability testing, I observed that users would ignore my onboarding message and text things like "how are you doing?", "what's up" instead of following the instruction. When that happened, Movie Eva does not respond well. I will dedicate more time to polishing the conversation flow, and possibly implement the Dialogflow API.
3. More Ways to Request a Movie
"I really like history movie. I wish I could just say 'Victoria' and it gives me a movie for that time period."
A user told me what feature she would like to see in my movie bot, and I agreed that the bot can be more versatile in terms of ways of searching. One user was trying to type in a movie's name and then realized the bot did not take name search. Therefore, exploring how to use the "keyword" search of the movie API is my next step.
A hands on introduction to building online products and services through code
Movie Eva can help you find a movie for the day! Just simply send her a selfie and she will recommend a movie based on your mood. Prefer texting? You can text her a genre type you desire or tell her how you feel today.
October 19th, 2018