|
import os |
|
import gc |
|
import csv |
|
import socket |
|
import json |
|
import huggingface_hub |
|
import requests |
|
|
|
import re as r |
|
import gradio as gr |
|
import pandas as pd |
|
|
|
from huggingface_hub import Repository |
|
from urllib.request import urlopen |
|
from transformers import AutoTokenizer, AutoModelWithLMHead |
|
|
|
|
|
HF_TOKEN = os.environ.get("HF_TOKEN") |
|
|
|
|
|
DATASET_REPO_URL = "https://huggingface.co/datasets/pragnakalp/emotion_detection_dataset" |
|
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.""" |
|
|
|
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) |
|
|
|
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" |
|
|
|
|
|
|
|
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') |
|
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): |
|
table = {'Input':[], 'Detected Emotion':[]} |
|
if article.strip(): |
|
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 |
|
} |
|
) |
|
|
|
table = {'Input':sen_list_temp, 'Detected Emotion':results} |
|
gc.collect() |
|
save_data_and_sendmail(article,results_dict,sen_list, results) |
|
return pd.DataFrame(table) |
|
else: |
|
raise gr.Error("Please enter text in inputbox!!!!") |
|
|
|
""" |
|
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) |
|
|
|
writer.writerow(add_csv) |
|
commit_url = repo.push_to_hub() |
|
print("commit data :",commit_url) |
|
|
|
url = 'https://pragnakalpdev33.pythonanywhere.com/HF_space_emotion_detection_demo' |
|
|
|
|
|
myobj = {"sentences":sen_list,"gen_results":results,"ip_addr":ip_address,'loc':location} |
|
response = requests.post(url, json = myobj) |
|
print("response=-----=",response.status_code) |
|
|
|
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"],wrap=True)] |
|
|
|
demo = gr.Interface( |
|
generate_emotion, |
|
inputs, |
|
outputs, |
|
title="Emotion Detection", |
|
css=".gradio-container {background-color: lightgray} #inp_div {background-color: #FB3D5;}", |
|
article="""<p style='text-align: center;'>Provide us your <a href="https://www.pragnakalp.com/contact/" target="_blank">feedback</a> on this demo and feel free |
|
to contact us at <a href="mailto:[email protected]" target="_blank">[email protected]</a> if you want to have your own Emotion Detection system. |
|
We will be happy to serve you for your requirement. And don't forget to check out more interesting |
|
<a href="https://www.pragnakalp.com/services/natural-language-processing-services/" target="_blank">NLP services</a> we are offering.</p> |
|
<p style='text-align: center;'>Developed by: <a href="https://www.pragnakalp.com" target="_blank">Pragnakalp Techlabs</a></p>""" |
|
) |
|
demo.launch() |