Spaces:
Sleeping
Sleeping
| from flask import Flask,render_template,request,Response,jsonify,redirect,url_for | |
| import numpy as np | |
| from sklearn.metrics.pairwise import cosine_similarity | |
| import matplotlib.pyplot as plt | |
| import pandas as pd | |
| import os | |
| import json | |
| import re | |
| from PIL import Image | |
| import threading | |
| import algorithms as alg | |
| from io import BytesIO | |
| app=Flask(__name__) | |
| folder='static/images' | |
| app.config["UPLOAD_FOLDER"]=folder | |
| user="null" | |
| pair={} | |
| def pred_ver_and_save_data(img,img_name,data,digit,name,vector,brand,desc,cat,price): | |
| try: | |
| ans=alg.tell_vernelable(img) | |
| except Exception as e: | |
| ans=0.000001 | |
| vector=list(vector) | |
| if ans>0.5: | |
| data[f"id{digit+1}"]={"name":name,"description":desc,"reviews":[],"clicks":0,"category":cat,"price":price,"brand":brand,"img":f"images/{img_name}","vector":vector} | |
| else: | |
| data[f"id{digit+1}"]={"name":name,"description":desc,"reviews":[],"clicks":0,"category":cat,"price":price,"brand":brand,"img":'images/error.png',"vector":vector} | |
| with open("products.json","w") as file: | |
| json.dump(data,file) | |
| file.close() | |
| return 0 | |
| def page(): | |
| return render_template("index.html") | |
| def niche(): | |
| return render_template("Niche.html") | |
| def product_panel(product_id): | |
| with open("products.json") as f: | |
| data=json.load(f) | |
| f.close() | |
| vectors=[] | |
| for ids in data: | |
| vectors.append(data[ids]["vector"]) | |
| vect_arr=np.array(vectors) | |
| to_compare=np.array(data[product_id]["vector"]).reshape(1,-1) | |
| sim=[] | |
| indexes=[] | |
| rec={} | |
| for vec in vect_arr: | |
| sim.append(cosine_similarity(to_compare,vec.reshape(1,-1))) | |
| sorted_sim=sorted(sim)[1:4] | |
| for similar in sorted_sim: | |
| indexes.append(sim.index(similar)) | |
| for i in indexes: | |
| rec[list(data)[i]]=data[list(data)[i]] | |
| return render_template("product_panel.html",product=data[product_id],rec_pro=rec) | |
| def products(): | |
| global user | |
| with open("products.json") as f: | |
| data=json.load(f) | |
| f.close() | |
| return render_template("products.html",products=data) | |
| def login(): | |
| global user | |
| if request.method=="POST": | |
| with open("seller.json") as f: | |
| data=json.load(f) | |
| name=request.form['name'] | |
| password=request.form['password'] | |
| if name not in list(data): | |
| return redirect(url_for("sign_up")) | |
| elif password=="": | |
| return render_template("login.html") | |
| elif password == str(data[name]['password']): | |
| user=name | |
| with open("products.json") as f: | |
| pro=json.load(f) | |
| f.close() | |
| return redirect(url_for("products")) | |
| else: | |
| return render_template("login.html") | |
| else: | |
| return render_template("login.html") | |
| def sign_up(): | |
| global user | |
| if request.method=="GET": | |
| return render_template("Signup.html") | |
| else: | |
| with open("seller.json") as f: | |
| data=json.load(f) | |
| f.close() | |
| name=request.form['name'] | |
| if name in list(data): | |
| return redirect(url_for("login")) | |
| else: | |
| user=name | |
| password=request.form['confirm'] | |
| data[name]={"password":password,"products":[],"reviews":[]} | |
| with open("seller.json","w") as f: | |
| json.dump(data,f) | |
| f.close() | |
| return redirect(url_for("niche")) | |
| def graph(): | |
| with open("seller.json") as file: | |
| data=json.load(file) | |
| file.close() | |
| a=[] | |
| reviews=data['username1']['reviews'] | |
| for review in reviews: | |
| sentiment=alg.give_sentiment(review) | |
| a.append(sentiment) | |
| df=pd.Series(a) | |
| df=df.replace({1:"positive",0:"negative"}) | |
| data=df.value_counts() | |
| fig,ax=plt.subplots() | |
| data.plot(kind="bar" ,ax=ax) | |
| plt.xlabel("review sentiment") | |
| plt.ylabel("no of reviews") | |
| plt.xticks(rotation=0) | |
| img=BytesIO() | |
| fig.savefig(img,format="png") | |
| img.seek(0) | |
| return Response(img, mimetype='image/png') | |
| def seller(): | |
| with open("seller.json") as file: | |
| seller=json.load(file) | |
| file.close() | |
| reviews=seller[user]['reviews'] | |
| products=seller[user]['products'] | |
| with open("products.json") as file: | |
| prod=json.load(file) | |
| file.close() | |
| return render_template("seller_dashboard.html",user=user,product=prod,ids=products,reviews=reviews) | |
| def tell(): | |
| if request.method=="GET": | |
| return render_template("add_product.html") | |
| else: | |
| img_file=request.files["image"] | |
| img_name=img_file.filename | |
| img_file=Image.open(img_file.stream).convert("RGB") | |
| image_path=os.path.join(app.config['UPLOAD_FOLDER'],f"{img_name.split('.')[0]}.jpg") | |
| img_file.save(image_path,"JPEG") | |
| img=np.expand_dims(np.array(img_file.resize((256,256))).astype(np.float32)/255,axis=0) | |
| with open("products.json") as file: | |
| data=json.load(file) | |
| file.close() | |
| last=list(data.keys())[-1] | |
| digit=int("".join(re.findall(r"\d",last))) | |
| name=request.form["name"] | |
| cat=request.form["category"] | |
| desc=request.form["description"] | |
| brand=request.form["brand"] | |
| price=request.form['price'] | |
| vector=name+" "+brand+" "+desc | |
| with open("tokenize_description.json","r") as file: | |
| tokenizer=json.load(file) | |
| with open("seller.json") as file: | |
| seller=json.load(file) | |
| new_product_id = f"id{digit+1}" | |
| seller[user]["products"].append(new_product_id) | |
| with open("seller.json","w") as file: | |
| json.dump(seller,file) | |
| file.close() | |
| seq=[tokenizer[word] for word in vector.split() if word in tokenizer.keys()] | |
| if len(seq)<=22: | |
| vector=np.pad(seq,(22-len(seq),0)) | |
| else: | |
| vector=np.array(vector[:22]) | |
| vector=[int(val) for val in vector] | |
| threading.Thread(target=pred_ver_and_save_data,args=(img,img_name,data,digit,name,vector,brand,desc,cat,price)).start() | |
| return render_template("seller_dashboard.html",user=user,ids=seller[user]["products"][:-1],product=data,reviews=seller[user]["reviews"]) | |
| def chatbot(): | |
| if request.method=="GET": | |
| return render_template("chatwindow.html",chat=pair) | |
| else: | |
| question=request.form['question'] | |
| question=question.lower() | |
| ans=alg.ChatWithMe(question) | |
| pair[question]=ans | |
| return render_template("chatwindow.html",chat=pair) | |
| def predict(): | |
| if request.method=="POST": | |
| data = request.json | |
| input_text = data.get("text", "") | |
| sugg=alg.pred_next(input_text,1) | |
| return jsonify({"suggestions": [sugg]}) | |
| else: | |
| return render_template("products.html") | |
| if __name__=="__main__": | |
| app.run(debug=True) |