pragnakalp's picture
Update app.py
ffe0ae6
raw
history blame
6.52 kB
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 + '</s>', 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.
<p style='text-align: center;'>Developed by :[ Pragnakalp Techlabs](https://www.pragnakalp.com)</p>"""
)
demo.launch()