import gc import csv import os import socket import reqests import huggingface_hub import re as r import gradio as gr import pandas as pd from urllib.request import urlopen from huggingface_hub import Repository from transformers import AutoTokenizer, AutoModelWithLMHead ## connection with HF datasets HF_TOKEN = os.environ.get("HF_TOKEN") DATASET_NAME = "emotion_detection_dataset" DATASET_REPO_URL = f"https://huggingface.co/datasets/pragnakalp/{DATASET_NAME}" DATA_FILENAME = "emotion_detection_logs.csv" DATA_FILE = os.path.join("emotion_detection_logs", DATA_FILENAME) DATASET_REPO_ID = "pragnakalp/emotion_detection_dataset" print("is none?", HF_TOKEN is None) try: hf_hub_download( repo_id=DATASET_REPO_ID, filename=DATA_FILENAME, cache_dir=DATA_DIRNAME, force_filename=DATA_FILENAME ) except: print("file not found") repo = Repository( local_dir="emotion_detection_logs", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN ) SENTENCES_VALUE = """Raj loves Simran.\nLast year I lost my Dog.\nI bought a new phone!\nShe is scared of cockroaches.\nWow! I was not expecting that.\nShe got mad at him.""" ## load model cwd = os.getcwd() model_path = os.path.join(cwd) tokenizer = AutoTokenizer.from_pretrained("mrm8488/t5-base-finetuned-emotion") model_base = AutoModelWithLMHead.from_pretrained(model_path) """ get ip address and location """ # def get_device_ip_address(): # if os.name == "nt": # result = "Running on Windows" # hostname = socket.gethostname() # ip_address = socket.gethostbyname(hostname) # print(ip_address) # return ip_address # elif os.name == "posix": # gw = os.popen("ip -4 route show default").read().split() # s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # s.connect((gw[2], 0)) # ip_address = s.getsockname()[0] # gateway = gw[2] # host = socket.gethostname() # return ip_address # else: # result['id'] = os.name + " not supported yet." # print(result) # return result def getIP(): ip_address = '' try: d = str(urlopen('http://checkip.dyndns.com/') .read()) return r.compile(r'Address: (\d+\.\d+\.\d+\.\d+)').search(d).group(1) except Exception as e: print("Error while getting IP address -->",e) return ip_address def get_location(ip_addr): location = {} try: ip=ip_addr req_data={ "ip":ip, "token":"pkml123" } url = "https://demos.pragnakalp.com/get-ip-location" # req_data=json.dumps(req_data) # print("req_data",req_data) headers = {'Content-Type': 'application/json'} response = requests.request("POST", url, headers=headers, data=json.dumps(req_data)) response = response.json() print("response======>>",response) return response except Exception as e: print("Error while getting location -->",e) return location """ generate emotions of the sentences """ def get_emotion(text): # input_ids = tokenizer.encode(text + '', return_tensors='pt') input_ids = tokenizer.encode(text, return_tensors='pt') output = model_base.generate(input_ids=input_ids, max_length=2) dec = [tokenizer.decode(ids) for ids in output] label = dec[0] gc.collect() return label def generate_emotion(article): sen_list = article sen_list = sen_list.split('\n') while("" in sen_list): sen_list.remove("") sen_list_temp = sen_list[0:] print(sen_list_temp) results_dict = [] results = [] for sen in sen_list_temp: if(sen.strip()): cur_result = get_emotion(sen) results.append(cur_result) results_dict.append( { 'sentence': sen, 'emotion': cur_result } ) result = {'Input':sen_list_temp, 'Detected Emotion':results} gc.collect() save_data_and_sendmail(article,results_dict,sen_list, results) return pd.DataFrame(result) """ Save generated details """ def save_data_and_sendmail(article,results_dict,sen_list,results): try: ip_address= getIP() print(ip_address) location = get_location(ip_address) print(location) add_csv = [article,results_dict,ip_address,location] with open(DATA_FILE, "a") as f: writer = csv.writer(f) # write the data writer.writerow(add_csv) commit_url = repo.push_to_hub() print("commit data :",commit_url) url = 'https://pragnakalpdev33.pythonanywhere.com/emotion_detection_demo' # url = 'https://pragnakalpdev35.pythonanywhere.com/HF_space_emotion_detection' myobj = {"sentences":sen_list,"gen_results":results,"ip_addr":ip_address,'loc':location} print("myobj###### ",myobj) response = requests.post(url, json = myobj) print("response=-----=",response.status_code) print("myobj2$$$$$ ",myobj) except Exception as e: return "Error while sending mail" + str(e) return "Successfully save data" """ UI design for demo using gradio app """ inputs = gr.Textbox(value=SENTENCES_VALUE,lines=3, label="Sentences",elem_id="inp_div") outputs = [gr.Dataframe(row_count = (3, "dynamic"), col_count=(2, "fixed"), label="Here is the Result", headers=["Input","Detected Emotion"])] demo = gr.Interface( generate_emotion, inputs, outputs, title="Emotion Detection", description="Feel free to give your feedback", css=".gradio-container {background-color: lightgray} #inp_div {background-color: #FB3D5;}", article="""Provide us your [feedback](https://www.pragnakalp.com/contact/) on this demo and feel free to contact us at [letstalk@pragnakalp.com]("mailto:letstalk@pragnakalp.com") if you want to have your own Emotion Detection system. We will be happy to serve you for your Emotion Detection requirement. And don't forget to check out more interesting [NLP services](https://www.pragnakalp.com/services/natural-language-processing-services/) we are offering.
Developed by :[ Pragnakalp Techlabs](https://www.pragnakalp.com)
""" ) demo.launch()