change directory name and run scripts to account for name change

This commit is contained in:
ADParedes
2022-09-20 13:27:37 -05:00
parent 8829c31b7b
commit 3b8f5ee363
10242 changed files with 2 additions and 2027522 deletions

View File

@@ -0,0 +1,381 @@
from flask import Flask
from flask import request
import pandas as pd
import json
import numpy as np
from sklearn.decomposition import PCA
import sys
import process_input_data
app = Flask(__name__)
@app.route('/fetchIndividualFacialRawData', methods=["POST"])
def fetchIndividualFacialRawData():
id = request.json['id']
if id:
individualFacialRawData = process_input_data.read_rawFacialDf(sys.argv[1], id)
else:
individualFacialRawData = process_input_data.read_rawFacialDf(sys.argv[1], inputData['Filename'][0])
if individualFacialRawData.empty:
return {}
return individualFacialRawData.fillna(0).to_json(orient="records")
@app.route('/fetchIndividualMovementRawData', methods=["POST"])
def fetchIndividualMovementRawData():
id = request.json['id']
if id:
individualMovementRawData = process_input_data.read_rawMovementDf(sys.argv[1], id)
else:
individualMovementRawData = process_input_data.read_rawMovementDf(sys.argv[1], inputData['Filename'][0])
if individualMovementRawData.empty:
return {}
return individualMovementRawData.fillna(0).to_json(orient="records")
@app.route('/fetchIndividualAcousticRawData', methods=["POST"])
def fetchIndividualAcousticRawData():
id = request.json['id']
if id:
individualAcousticRawData = process_input_data.read_rawAcousticDf(sys.argv[1], id)
else:
individualAcousticRawData = process_input_data.read_rawAcousticDf(sys.argv[1], inputData['Filename'][0])
if individualAcousticRawData.empty:
return {}
return individualAcousticRawData.fillna(0).to_json(orient="records")
@app.route('/fetchIndividualDerivedData', methods=["POST"])
def fetchIndividualDerivedData():
if len(list(inputData.columns)) <2:
return {}
id = request.json['id']
if id:
res = inputData.loc[inputData['Filename'] == id, ~inputData.columns.isin(['Filename'])]
else:
res = inputData.iloc[:1, :].loc[:, ~inputData.columns.isin(['Filename'])]
return res.fillna(0).to_json(orient="records")
@app.route('/fetchIndividualFacialTimelineData', methods=["POST"])
def fetchIndividualFacialTimelineData():
id = request.json['id']
timepoints = 20
if id:
dfFace = process_input_data.read_rawFacialDf(sys.argv[1], id)
dfMovement = process_input_data.read_rawMovementDf(sys.argv[1], id)
else:
dfFace = process_input_data.read_rawFacialDf(sys.argv[1], inputData['Filename'][0])
dfMovement = process_input_data.read_rawMovementDf(sys.argv[1], inputData['Filename'][0])
if dfFace.empty:
return {}
dfFace=dfFace.fillna(0)
attrOfInterest= ["fac_angintsoft", "fac_feaintsoft", "fac_disintsoft", "fac_sadintsoft",
"fac_conintsoft", "fac_surintsoft", "fac_hapintsoft",
"fac_AU01int", "fac_AU02int", "fac_AU04int", "fac_AU05int", "fac_AU06int",
"fac_AU07int", "fac_AU09int", "fac_AU10int", "fac_AU12int","fac_AU14int",
"fac_AU15int", "fac_AU17int", "fac_AU20int", "fac_AU23int", "fac_AU25int",
"fac_AU26int", "fac_asymmaskcom", "fac_asymmaskeye", "fac_asymmaskeyebrow",
"fac_asymmaskmouth", "fac_paiintsoft", "fac_comintsoft",
"fac_comlowintsoft", "fac_comuppintsoft"]
timelineObject = {}
for a in attrOfInterest:
timelineObject[a] = []
seg = len(dfFace)//19
reminder = len(dfFace)%19
for t in range(0,timepoints):
for k in attrOfInterest:
if t <= reminder:
timelineObject[k].append(sum(list(dfFace[t*(seg + 1):(t+1)*(seg+1)][k]))/(seg+1))
else:
timelineObject[k].append(sum(list(dfFace[t*seg:(t+1)*seg][k]))/seg)
if dfMovement.empty:
return timelineObject
dfMovement=dfMovement.fillna(0)
movementAttr = ["mov_hposepitch", "mov_hposeyaw", "mov_hposeroll"]
for a in movementAttr:
timelineObject[a] = []
seg = len(dfMovement)//20
reminder = len(dfMovement)%20
for t in range(0,timepoints):
for k in movementAttr:
if t <= reminder:
timelineObject[k].append(sum(list(dfMovement[t*(seg + 1):(t+1)*(seg+1)][k]))/(seg+1))
else:
timelineObject[k].append(sum(list(dfMovement[t*seg:(t+1)*seg][k]))/seg)
return timelineObject
@app.route('/getRawAttributesAndIds')
def getRawAttributesAndIds():
result = {}
if not individualFacialRawData.empty:
result['facial'] = [x for x in list(individualFacialRawData.columns)]
else:
result['facial'] =[]
if not individualAcousticRawData.empty:
result['acoustic'] = [x for x in list(individualAcousticRawData.columns)]
else:
result['acoustic'] = []
if not individualMovementRawData.empty:
result['movement'] = [x for x in list(individualMovementRawData.columns)]
else:
result['movement'] = []
if len(rawDataArgs) > 0:
result['ids'] = rawDataArgs['ids']
else:
result['ids'] = []
return result
def individualCorrMatrixData(id, corrArgs):
individualFacialRawData = pd.DataFrame()
individualMovementRawData = pd.DataFrame()
individualAcousticRawData = pd.DataFrame()
if id:
if len([x for x in corrArgs if "fac_" in x])>0:
individualFacialRawData = process_input_data.read_rawFacialDf(sys.argv[1], id)
if len([x for x in corrArgs if "mov_" in x])>0:
individualMovementRawData = process_input_data.read_rawMovementDf(sys.argv[1], id)
if len([x for x in corrArgs if "aco_" in x])>0:
individualAcousticRawData = process_input_data.read_rawAcousticDf(sys.argv[1], id)
else:
if len([x for x in corrArgs if "fac_" in x])>0:
individualFacialRawData = process_input_data.read_rawFacialDf(sys.argv[1], inputData['Filename'][0])
if len([x for x in corrArgs if "mov_" in x])>0:
individualMovementRawData = process_input_data.read_rawMovementDf(sys.argv[1], inputData['Filename'][0])
if len(list(filter(lambda x : "aco_" in x or "tremor_median" in x or "fac_features_mean" in x or "fac_corr" in x, individualMovementRawData))) >0:
individualAcousticRawData = process_input_data.read_rawAcousticDf(sys.argv[1], inputData['Filename'][0])
f = individualFacialRawData.loc[:, individualFacialRawData.columns.isin(corrArgs)]
m = individualMovementRawData.loc[:, individualMovementRawData.columns.isin(corrArgs)]
a = individualAcousticRawData.loc[:, individualAcousticRawData.columns.isin(corrArgs)]
if f.empty:
f = pd.DataFrame()
if m.empty:
m = pd.DataFrame()
if a.empty:
a = pd.DataFrame()
min_len = float('inf')
if not f.empty:
min_len = len(f)
if not m.empty:
min_len = min(min_len, len(m))
if not a.empty:
min_len=min(min_len, len(a))
if min_len == float('inf'):
min_len = 0
if min_len == len(f):
all_df = f.copy()
if len(f) == len(m):
for x in m.columns:
all_df[x] = m[x]
else:
seg = int(len(m)/(max(len(f),1)))
reminder = len(m)%(max(len(f),1))
for i, row in all_df.iterrows():
for x in m.columns:
if i <reminder:
all_df.loc[i,x] = sum(list(m[i*(seg + 1):(i+1)*(seg+1)][x]))/(seg+1)
else:
all_df.loc[i,x] = sum(list(m[i*seg:(i+1)*seg][x]))/seg
if len(a) > len(f):
seg = int(len(a)/(max(len(f),1)))
reminder = len(a)%(max(len(f),1))
for i, row in all_df.iterrows():
for x in a.columns:
if i <reminder:
all_df.loc[i,x] = sum(list(a[i*(seg + 1):(i+1)*(seg+1)][x]))/(seg+1)
else:
all_df.loc[i,x] = sum(list(a[i*seg:(i+1)*seg][x]))/seg
else:
for x in a.columns:
all_df[x] = a[x]
elif len(m) == min_len:
all_df = m.copy()
seg = int(len(f)/(max(len(m),1)))
reminder = len(f)%(max(len(m),1))
for i, row in all_df.iterrows():
for x in f.columns:
if i <reminder:
all_df.loc[i,x] = sum(list(f[i*(seg + 1):(i+1)*(seg+1)][x]))/(seg+1)
else:
all_df.loc[i,x] = sum(list(f[i*seg:(i+1)*seg][x]))/seg
if len(a) > len(m):
seg = int(len(a)/(max(len(m),1)))
reminder = len(a)%(max(len(m),1))
for i, row in all_df.iterrows():
for x in a.columns:
if i <reminder:
all_df.loc[i,x] = sum(list(a[i*(seg + 1):(i+1)*(seg+1)][x]))/(seg+1)
else:
all_df.loc[i,x] = sum(list(a[i*seg:(i+1)*seg][x]))/seg
else:
for x in a.columns:
all_df[x] = a[x]
else:
all_df = a.copy()
seg = int(len(f)/(max(len(a),1)))
reminder = len(f)%(max(len(a),1))
for i, row in all_df.iterrows():
for x in f.columns:
if i <reminder:
all_df.loc[i,x] = sum(list(f[i*(seg + 1):(i+1)*(seg+1)][x]))/(seg+1)
else:
all_df.loc[i,x] = sum(list(f[i*seg:(i+1)*seg][x]))/seg
seg = int(len(m)/(max(len(a),1)))
reminder = len(m)%(max(len(a),1))
for i, row in all_df.iterrows():
for x in m.columns:
if i <reminder:
all_df.loc[i,x] = sum(list(m[i*(seg + 1):(i+1)*(seg+1)][x]))/(seg+1)
else:
all_df.loc[i,x] = sum(list(m[i*seg:(i+1)*seg][x]))/seg
return all_df.fillna(0)
@app.route("/performPCA")
def performPCA(PCAargs=[]):
if len(list(inputData.columns)) <2:
return {}
pca = PCA()
if len(PCAargs) == 0:
X = pd.DataFrame(columns = [x for x in list(inputData.columns) if x not in ['Filename']])
X = inputData.loc[:, ~inputData.columns.isin(['Filename'])]
else:
X = pd.DataFrame(columns = [x for x in PCAargs ])
X = inputData.loc[:, inputData.columns.isin(PCAargs)]
X = X.fillna(0)
x_pca = pca.fit_transform(X)
x_pca = pd.DataFrame(x_pca)
x_pca = x_pca.iloc[:, list(range(2))]
x_pca.columns = ['PC1', "PC2"]
pc1 = x_pca["PC1"].to_numpy()
pc2 = x_pca["PC2"].to_numpy()
pc1 = list((pc1 -pc1.mean())/np.std(pc1))
pc2 = list((pc2 -pc2.mean())/np.std(pc2))
pca_results =[[pc1[i], pc2[i]] for i in range(0, len(pc1))]
return dict(zip(inputData['Filename'], pca_results))
@app.route('/updatePCA', methods=["POST"])
def updatePCA():
PCAargs = request.json['PCA_args']
return performPCA(PCAargs)
@app.route('/defaultDistribution', methods=["POST"])
def defaultDistribution():
args = request.json['distributionArgs']
return {"data":updateDistribution(args)}
@app.route('/updateDistribution', methods=["POST"])
def updateDistribution(attr=[]):
if len(list(inputData.columns)) <2:
return {}
if len(attr) !=0:
distributionArgs = attr
else:
distributionArgs = request.json['distributionArgs']
if len(distributionArgs) == 0:
df = pd.DataFrame(columns = [x for x in list(inputData.columns) if x not in ['Filename']])
df = inputData.loc[:, ~inputData.columns.isin(['Filename'])]
else:
cols = ['Filename']+ distributionArgs
df = pd.DataFrame(columns = [c for c in list(cols )])
df = inputData.loc[:, inputData.columns.isin(cols)]
df = df.fillna(0)
if len(distributionArgs) ==0:
return {}
result = {}
for i, row in df.iterrows():
result[row['Filename']]={}
result[row['Filename']]['id'] = row['Filename']
for attr in distributionArgs:
result[row['Filename']][attr] = row[attr]
return result
@app.route('/defaultCorrMatrix', methods=["POST"])
def defaultCorrMatrix():
corrMatrixArgs = request.json['corrMatrix_args']
individual_corr = request.json['individual']
id= request.json['id']
return updateCorrMatrix(corrMatrixArgs, individual_corr, id)
@app.route('/updateCorrMatrix', methods=["POST"])
def updateCorrMatrix(attr=[], individual = False, id=None):
if len(attr) !=0:
corrMatrixArgs = attr
else:
corrMatrixArgs = request.json['corrMatrix_args']
individual = request.json['individual']
if len(corrMatrixArgs) < 2:
return {}
if len(corrMatrixArgs) > 24:
return{}
df = pd.DataFrame(columns = [c for c in corrMatrixArgs])
if individual:
if not id:
id = request.json['id']
d = individualCorrMatrixData(id, corrMatrixArgs)
df = d
# df = d.loc[:, d.columns.isin(corrMatrixArgs)]
else:
df = inputData.loc[:, inputData.columns.isin(corrMatrixArgs)]
corrMatrix = df.corr(method="spearman").fillna(0)
return corrMatrix.to_dict()
@app.route("/getDerivedAttributes")
def getDerivedAttributes():
if not len(rawDataArgs):
return {"facial": [], "acoustic":[], "movement":[], "speech": [], "ids": []}
res={"facial": rawDataArgs['facialAttr'], "acoustic": rawDataArgs['acousticAttr'], "movement": rawDataArgs['movementAttr'],
"speech": rawDataArgs["speechAttr"], "ids": rawDataArgs['ids']}
return res
@app.route("/getMetadata")
def getMetadata():
if not len(metadata):
return {}
return metadata
def load():
global rawDataArgs, metadata
rawDataArgs = process_input_data.read_derivedAttr(sys.argv[1])
if len(sys.argv) >2:
metadata = process_input_data.read_medatada(sys.argv[1], sys.argv[2])
else:
metadata=[]
global inputData
inputData = process_input_data.read_derivedDf(sys.argv[1])
if len(inputData):
inputData['Filename'] = inputData['Filename'].apply(lambda x: x.split('/')[1].replace(".mp4", ""))
else:
inputData['Filename'] = [""]
global individualFacialRawData, individualDerivedData, individualAcousticRawData, individualMovementRawData
individualFacialRawData = process_input_data.read_rawFacialDf(sys.argv[1], inputData['Filename'][0])
individualMovementRawData = process_input_data.read_rawMovementDf(sys.argv[1], inputData['Filename'][0])
individualAcousticRawData = process_input_data.read_rawAcousticDf(sys.argv[1], inputData['Filename'][0])
if __name__=="__main__":
# from waitress import serve
load()
# serve(app, host='127.0.0.1', port=5000)
app.run(debug=True)
# app.run(debug=False)