Spaces:
Sleeping
Sleeping
| import newspaper | |
| from newspaper import* | |
| import gradio as gr | |
| import openai | |
| openai.api_key = "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" | |
| import validators | |
| import ast | |
| import pyshine as ps | |
| import cv2 | |
| import numpy as np | |
| def predict(action,image, text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space): | |
| def titleonImage(action,image, text_in_image, words_line,font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space): | |
| font_dict = {'normal size sans-serif':cv2.FONT_HERSHEY_SIMPLEX, 'small size sans-serif':cv2.FONT_HERSHEY_PLAIN, | |
| 'normal size sans-serif (complexity +1)': cv2.FONT_HERSHEY_DUPLEX, 'normal size sans-serif (complexity +2)': cv2.FONT_HERSHEY_COMPLEX , | |
| 'normal size sans-serif (complexity +3)': cv2.FONT_HERSHEY_TRIPLEX, 'small size sans-serif (complexity +2)': cv2.FONT_HERSHEY_COMPLEX_SMALL, | |
| 'hand-writing style font': cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 'hand-writing style font (complexity +1)': cv2.FONT_HERSHEY_SCRIPT_COMPLEX } | |
| inp = text_in_image | |
| string = "" | |
| for word in range(len(inp.split())): | |
| if (word > 0) & (word % words_line == 0): | |
| string += "\n" | |
| string += " " + inp.split()[word] | |
| text_in_image = string | |
| if image is None: | |
| width = 1000 | |
| height = 1000 | |
| image = np.ones((height, width, 3), dtype=np.uint8) * 255 | |
| y_gap = 0 | |
| for i in text_in_image.split("\n"): | |
| image = ps.putBText(image, i, text_offset_x = int(x_cor), | |
| text_offset_y = int(y_cor)+y_gap, vspace = 5, | |
| hspace = 5, font_scale = float(font_size), font = font_dict[font], | |
| background_RGB = ast.literal_eval(backgound_RGB), | |
| text_RGB = ast.literal_eval(text_RGB), thickness = int(thickness), | |
| alpha = float(opacity)) | |
| y_gap+= int(line_space) | |
| return image | |
| def getText(url_or_text): | |
| text = url_or_text | |
| if validators.url(url_or_text): | |
| article = Article(url="%s" % (url_or_text), language='en') | |
| article.download() | |
| article.parse() | |
| text = article.text | |
| return text | |
| def getTitle(text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space): | |
| response = openai.Completion.create( | |
| model=model, | |
| prompt = url_or_text + "\n"+ prompt, | |
| temperature=int(temperature), | |
| max_tokens=int(max_tokens), | |
| top_p=1, | |
| frequency_penalty=0.0, | |
| presence_penalty=1 | |
| ).choices[0].text | |
| return response | |
| def getSummary(text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space): | |
| summary = openai.Completion.create( | |
| model=model, | |
| prompt = url_or_text + "\n"+ summary_prompt, | |
| temperature=int(temperature), | |
| max_tokens=int(max_tokens), | |
| top_p=1, | |
| frequency_penalty=0.0, | |
| presence_penalty=1 | |
| ).choices[0].text | |
| return summary | |
| image_final = cv2.imread("fun.png") | |
| # text_in_image = "title was not asked" --> only need in summary | |
| summary = "summary was not asked" | |
| if action == "title on Image": | |
| image_final = titleonImage(action,image, text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space) | |
| if action == "title on image from url/text": | |
| url_or_text = getText(url_or_text) | |
| text_in_image = getTitle(text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space) | |
| image_final = titleonImage(action,image, text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space) | |
| if action == "title on image and summary from url/text": | |
| url_or_text = getText(url_or_text) | |
| text_in_image = getTitle(text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space) | |
| summary = getSummary(text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space) | |
| image_final = titleonImage(action,image, text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space) | |
| if action == "title from url/text": | |
| url_or_text = getText(url_or_text) | |
| text_in_image = getTitle(text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space) | |
| if action == "summary from url/text": | |
| url_or_text = getText(url_or_text) | |
| text_in_image = "title was not asked" | |
| summary = getSummary(text_in_image, words_line, font, model, url_or_text, prompt, summary_prompt, temperature, max_tokens, x_cor, y_cor, | |
| font_size, backgound_RGB, text_RGB, thickness, opacity, line_space) | |
| return image_final, text_in_image, summary | |
| intr = gr.Interface(predict, | |
| [gr.Dropdown(["title on Image", | |
| "title on image from url/text", | |
| "title on image and summary from url/text", | |
| "title from url/text", | |
| "summary from url/text" | |
| ], value = "title on Image", label = "List of Actions"), | |
| "image", | |
| gr.Textbox(value="Text was not given", label = "Text you want to see in the image"), | |
| gr.Number(value=5, label = "Number of words in a line"), | |
| gr.Dropdown(['normal size sans-serif', 'small size sans-serif', | |
| 'normal size sans-serif (complexity +1)', 'normal size sans-serif (complexity +2)', | |
| 'normal size sans-serif (complexity +3)', 'small size sans-serif (complexity +2)', | |
| 'hand-writing style font', 'hand-writing style font (complexity +1)'], | |
| label = "Font for the text", value = 'normal size sans-serif'), | |
| gr.Dropdown(["text-curie-001", "text-davinci-003"], value = "text-curie-001", label = "GPT3- Model"), | |
| gr.Textbox(value="https://www.datasciencecentral.com/will-chatgpt-make-fraud-easier/", label = "Provide blog url or directly input the text for better results"), | |
| gr.Textbox(value="Title for instagram post based on above article", label= "Prompt for generating the title"), | |
| gr.Textbox(value="Captions for instagram post based on above article", label= "Prompt for summary generation"), | |
| gr.Number(value=0.7, label = "How random you want the results to be"), | |
| gr.Number(value=100, label= "Max number of words in output"), | |
| gr.Number(value=20, label = "X co-ordinate"), | |
| gr.Number(value=20, label = "Y co-ordiante"), | |
| gr.Number(value=1.0, label = "Font size"), | |
| gr.Textbox(value="(228, 225, 222, 211)", label = "Box Color (RGB)"), | |
| gr.Textbox(value= "(0, 255,1)", label = "Text Color (RGB)"), | |
| gr.Number(value=1, label = "text Thickness"), | |
| gr.Number(value=0.8, label = "Opacity of Box"), | |
| gr.Number(value=50, label = "Line sapcing")], | |
| ["image","text", gr.Textbox(label = "summarizer")], | |
| title = "Auto Insta Post", | |
| description = "Image and url to Instagram Post" | |
| ) | |
| intr.launch(inline = False) |