AmirShabani commited on
Commit
0dbc568
·
1 Parent(s): 5261ce7

Create gradio_app.py

Browse files
Files changed (1) hide show
  1. gradio_app.py +0 -132
gradio_app.py CHANGED
@@ -1,132 +0,0 @@
1
- import gradio as gr
2
- import requests
3
- import numpy as np
4
- import pandas as pd
5
- from PIL import Image
6
-
7
- # api_key = "4e45e5b0"
8
-
9
- # A function that takes a movie name and returns its poster image as a numpy array
10
- def get_poster(movie):
11
- api_key = "4e45e5b0"
12
- base_url = "http://www.omdbapi.com/"
13
-
14
- params = {"apikey": api_key , "t": movie}
15
- response = requests.get(base_url, params=params)
16
- data = response.json()
17
-
18
- if data['Response'] == 'True': # Check if the response is successful
19
- # Open the image from the url
20
- poster_image = Image.open(requests.get(data['Poster'], stream=True).raw)
21
- # Convert the image to a numpy array
22
- poster_array = np.array(poster_image)
23
- return poster_array
24
-
25
- else:
26
- return np.zeros((500, 500, 3))
27
-
28
- # A function that takes a movie name and returns its meta data
29
- def get_data(movie):
30
- api_key = "4e45e5b0"
31
- base_url = "http://www.omdbapi.com/"
32
-
33
- params = {"apikey": api_key , "t": movie}
34
- response = requests.get(base_url, params=params)
35
- data = response.json()
36
-
37
- if data['Response'] == 'True': # Check if the response is successful
38
- poster = data["Poster"]
39
- title = data["Title"]
40
- director = data["Director"]
41
- cast = data["Actors"]
42
- genres = data["Genre"]
43
- rating = data["imdbRating"]
44
- # Return a dictionary with the information
45
- return {
46
-
47
- "poster": poster,
48
- "title": title,
49
- "director": director,
50
- "cast": cast,
51
- "genres": genres,
52
- "rating": rating
53
- }
54
-
55
- def get_recommendations(input_list):
56
- movie_names = ["The Matrix", "The Shawshank Redemption", "The Godfather", "The Dark Knight", "Inception"]
57
- movies_data = [get_data(movie) for movie in movie_names]
58
-
59
- movie_posters = [get_poster(movie) for movie in movie_names]
60
-
61
-
62
- return movie_names, movie_posters
63
- # HTML table for recommendation section
64
- def generate_table(movies, posters):
65
- html_code = ""
66
- # Add the table tag and style attributes
67
- html_code += "<table style='width:100%; border: 1px solid black; text-align: center;'>"
68
-
69
- for i in range(len(movies)):
70
- movie_name = movies[i]
71
- poster_array = posters[i]
72
- movie_data = get_data(movie_name)
73
-
74
- # Extract the information from the dictionary
75
- poster_url = movie_data["poster"]
76
- title = movie_data["title"]
77
- director = movie_data["director"]
78
- cast = movie_data["cast"]
79
- genres = movie_data["genres"]
80
- rating = movie_data["rating"]
81
-
82
- # Add a table row tag for each movie
83
- html_code += "<tr>"
84
- # Add a table cell tag with the poster image as an img tag
85
- html_code += f"<td><img src='{poster_url}' height='400' width='300'></td>"
86
- # Add a table cell tag with the movie information as a paragraph tag
87
- html_code += f"<td><p><b>Title:</b> {title}</p><p><b>Director:</b> {director}</p><p><b>Cast:</b> {cast}</p><p><b>Genres:</b> {genres}</p><p><b>Rating:</b> {rating}</p></td>"
88
- # Close the table row tag
89
- html_code += "</tr>"
90
-
91
- # Close the table tag
92
- html_code += "</table>"
93
-
94
- return html_cod
95
-
96
- user_input = {}
97
-
98
- def display_movie(movie, rating):
99
-
100
- global user_input
101
- user_input[movie] = rating
102
- poster = get_poster(movie)
103
-
104
- if len(user_input) == 5:
105
- # Get the recommended movies from the input
106
- r_movies, r_posters = get_recommendations(user_input)
107
-
108
- # Create a list with a list of HTML strings with information
109
- html_code = generate_table(r_movies, r_posters)
110
-
111
- user_input = {}
112
- # Return the output
113
- return f"Your movies are ready!\nPlease check the recommendations below.", np.zeros((500, 500, 3)), html_code
114
-
115
- else:
116
-
117
- # Return the input movie name and poster
118
- return f"You entered {movie} with rating {rating}", poster, ""
119
-
120
- # Gradio Interface
121
- iface = gr.Interface(
122
-
123
- fn= display_movie,
124
- inputs= [gr.Textbox(label="Enter a movie name (five movie in total!)"), gr.Slider(minimum=0, maximum=5, step=1, label="Rate the movie")],
125
- outputs= [gr.Textbox(label="Output", min_width=200), gr.components.Image(label="Poster", height=400, width=300), gr.components.HTML(label="Recommendations", height=400)],
126
- live= False,
127
- examples=[["The Matrix"], ["The Lion King"], ["Titanic"], ['Fight Club'], ["Inception"]],
128
- title = "Movie Recommender",
129
-
130
- )
131
-
132
- iface.launch()