コード例 #1
0
ファイル: app.py プロジェクト: AhmedHamedTN/TherapioFlaskApp
def showSignIn():
    error = ''
    try:
        if request.method == "POST":
            name = request.form['inputName']
            password = sha256_crypt.encrypt(str(request.form['inputPassword']))
            c, conn = connection()

            data = c.execute("SELECT * FROM doctor WHERE docname = (%s)", name)

            data = c.fetchone()[4]

            if sha256_crypt.verify(password, data):
                session['logged_in'] = True
                session['username'] = name

                flash("You are now logged in")
                return redirect(url_for("main"))

            else:
                print data
                error = "Invalid credentials, try again."

        gc.collect()

        return render_template("signin.html", error=error)

    except Exception as e:
        # flash(e)
        error = "Invalid credentials, try again."
        return render_template("signin.html", error=error)
コード例 #2
0
ファイル: app.py プロジェクト: AhmedHamedTN/TherapioFlaskApp
def get_users():
    # Query DB:
    cur, conn = connection()
    q_list_one = "SELECT * FROM users"
    cur.execute(q_list_one)
    users = cur.fetchall()

    users_dict = []
    for user in users:
        user_dict = {
            'Id': user[0],
            'IdUniq': user[1],
            'Name': user[2],
            'Age': user[3],
            'Date': user[4],
            'Imei': user[5],
        }
        users_dict.append(user_dict)

    return json.dumps(users_dict)
コード例 #3
0
ファイル: app.py プロジェクト: AhmedHamedTN/TherapioFlaskApp
def showSignUp():
    try:
        if request.method == "POST":
            name = request.form['inputName']
            email = request.form['inputEmail']
            password = sha256_crypt.encrypt(str(request.form['inputPassword']))
            c, conn = connection()

            x = c.execute("SELECT * FROM doctor WHERE docname = (%s)", name)

            today = datetime.datetime.today().strftime("%m/%d/%Y")
            if int(x) > 0:
                flash("That username is already taken, please choose another")
                return render_template('signup.html')

            else:
                c.execute(
                    "INSERT INTO doctor (doc_id, docname, email, password, created_at) VALUES (%s, %s, %s, %s, %s)",
                    (name, name, email, password, today))

                conn.commit()
                flash("Thanks for registering!")
                c.close()
                conn.close()
                gc.collect()

                session['logged_in'] = True
                session['username'] = name

                return redirect(url_for('main'))

        return render_template("signup.html")

    except Exception as e:
        return (str(e))
    return render_template('signup.html')
コード例 #4
0
ファイル: app.py プロジェクト: AhmedHamedTN/TherapioFlaskApp
def dashboard(userid):

    # Declarations
    global starttime, endtime, myPath, numbPauses, loudness, dur, madmax, maxDBFS, MPA, numOfFtrs, phoneCallFtrFinal, wavo, jsonFeatures, nf
    starttime = ""
    endtime = ""
    myPath = ""
    numbPauses = 0
    loudness = 0
    nf = 0
    dur = 0
    madmax = 0
    maxDBFS = 0
    MPA = 0
    numOfFtrs = 0
    wavo = ""
    jsonFeatures = {}
    phoneCallFtrFinal = pd.DataFrame()

    # Ftp connection
    FtpHostName = "**********************"
    FtpUser = "******"
    FtpPassword = "******"
    ftp = FTP(FtpHostName)
    ftp.login(FtpUser, FtpPassword)
    path = "****************************"

    # forms
    form = DateForm()
    if form.validate_on_submit():
        starttime = form.dt.data.strftime('%x')
        #endtime = form.dt.data.strftime('%x')

        ########################################
        ########################################

        # Accelerometer CSV data manipulation and features extraction

        #########################################
        #########################################
        #########################################

    # SQL queries
    curCSV, conn = connection()
    reqCSV = "SELECT * FROM files AS f WHERE f.uid = %s and f.type = 'CSV' "
    curCSV.execute(reqCSV, userid)
    CSVfiles = curCSV.fetchall()

    def magnitude(activity):
        x2 = activity['xAxis'] * activity['xAxis']
        y2 = activity['yAxis'] * activity['yAxis']
        z2 = activity['zAxis'] * activity['zAxis']
        m2 = x2 + y2 + z2
        m = m2.apply(lambda x: math.sqrt(x))
        return m

    def windows(df, size=100):
        start = 0
        while start < df.count():
            yield start, start + size
            start += (size / 2)

    def jitter(axis, start, end):
        j = float(0)
        for i in xrange(start, min(end, axis.count())):
            if start != 0:
                j += abs(axis[i] - axis[i - 1])
        return j / (end - start)

    def mean_crossing_rate(axis, start, end):
        cr = 0
        m = axis.mean()
        for i in xrange(start, min(end, axis.count())):
            if start != 0:
                p = axis[i - 1] > m
                c = axis[i] > m
                if p != c:
                    cr += 1
        return float(cr) / (end - start - 1)

    def window_summary(axis, start, end):
        acf = stattools.acf(axis[start:end])
        acv = stattools.acovf(axis[start:end])
        sqd_error = (axis[start:end] - axis[start:end].mean())**2
        return [
            jitter(axis, start, end),
            mean_crossing_rate(axis, start, end),
            axis[start:end].mean(),
            axis[start:end].std(),
            axis[start:end].var(),
            axis[start:end].min(),
            axis[start:end].max(),
            acf.mean(),  # mean auto correlation
            acf.std(),  # standard deviation auto correlation
            acv.mean(),  # mean auto covariance
            acv.std(),  # standard deviation auto covariance
            skew(axis[start:end]),
            kurtosis(axis[start:end]),
            math.sqrt(sqd_error.mean())
        ]

    def features(activity):
        for (start, end) in windows(activity['timestamp']):
            features = []
            for axis in ['xAxis', 'yAxis', 'zAxis', 'magnitude']:
                features += window_summary(activity[axis], start, end)
            yield features

    COLUMNS = ['timestamp', 'xAxis', 'yAxis', 'zAxis']
    features_dict = []
    for csvfile in CSVfiles:
        Activity = pd.read_csv(path + csvfile[1], header=None,
                               names=COLUMNS)[:3000]
        Activity['magnitude'] = magnitude(Activity)

        with open(
                '/home/ahmed/Desktop/flaskTherapio/AccFtr/' + csvfile[1][17:] +
                '_Features.csv', 'w') as out:
            rows = csv.writer(out)
            for f in features(Activity):
                rows.writerow(f)

        ActivityDataFeature = pd.read_csv(
            '/home/ahmed/Desktop/flaskTherapio/AccFtr/' + csvfile[1][17:] +
            '_Features.csv',
            header=None)

    # return ActivityDataFeature.reset_index().to_json(orient='index')
    # CSVDATA = json.dumps(csv_files_dict)

    ########################################
    ########################################

    # Phone calls processing and features extraction

    #########################################
    #########################################
    #########################################

    curWAV, conn = connection()
    reqWAV = "SELECT * FROM files AS f WHERE f.uid = %s and f.type = 'WAV' "
    curWAV.execute(reqWAV, userid)
    WAVfiles = curWAV.fetchall()

    wavs_dict = []
    for wavf in WAVfiles:
        wavf_dict = {
            'Id': wavf[0],
            'filepath': wavf[1],
            'type': wavf[2],
            'createdat': wavf[3],
            'uid': wavf[4]
        }
        wavs_dict.append(wavf_dict)

    #print wavs_dict.__len__()
    print len(WAVfiles)
    ind = 0
    patho = "/home/ahmed/Desktop/flaskTherapio/"
    for wavfile in WAVfiles:
        ind += 1
        print "checking database for the " + str(ind) + " time"
        dirPath = wavfile[1][1:17]
        wavName = wavfile[1][17:]
        wavdate = wavfile[3][1:10]
        #print dirPath
        print wavName
        print wavdate
        ftp.cwd("/" + dirPath)
        print "done changing directory"
        audiofilematch = '*.wav'
        cc = 0
        error = False
        for filename in ftp.nlst(
                audiofilematch):  # Loop - looking for WAV files
            if error == False:

                cc += 1
                print "checking FTP for the " + str(cc) + " time"
                print "comparing " + wavName + " and     " + filename
                print wavName == filename
                fhandle = open(filename, 'wb')
                print 'Getting ' + filename
                os.chdir("/home/ahmed/Desktop/flaskTherapio/")
                ftp.retrbinary('RETR ' + filename, fhandle.write)
                print "stored"
                fhandle.close()
                if filename == wavName:
                    print " just do this shit here"
                    sound = AudioSegment.from_file(patho + filename)
                    sound.export(patho + "PhoneCallsFtr/" + filename + ".wav",
                                 format="wav")
                    loudness = sound.rms
                    #number of Frames
                    nf = sound.frame_count()
                    # Value of loudness
                    loudness = sound.rms
                    #duration
                    dur = sound.duration_seconds
                    #max
                    madmax = sound.max
                    #max possible amplitude
                    MPA = sound.max_possible_amplitude
                    #max dbfs
                    maxDBFS = sound.max_dBFS
                    samplewidth = sound.sample_width

                    today = datetime.datetime.today().strftime("%m/%d/%Y")
                    blahblah = patho + "PhoneCallsFtr/" + filename + ".wav"
                    print "Blah blah path :   ======>  " + blahblah

                    [Fs, x] = audioBasicIO.readAudioFile(blahblah)
                    #silence removal ---- into segments

                    segments = aS.silenceRemoval(x,
                                                 Fs,
                                                 0.030,
                                                 0.030,
                                                 smoothWindow=0.3,
                                                 Weight=0.6,
                                                 plot=True)
                    numbPauses = len(segments) - 1
                    if numbPauses:
                        error = False
                    else:
                        error = True
                    print "num pauses : " + str(numbPauses)
                    # SELECT * FROM `phoneCallFeatures` WHERE (`created_at` BETWEEN 60 AND 1500) AND (uid = '5795028d168257.04609170')
                    # SQL query to insert phone call features to DB
                    insertFtrReq = """INSERT INTO phoneCallFeatures
                                              (uid,
                                              npause,
                                              loudness,
                                              maxA,
                                              created_at)
                                              VALUES (%s,
                                                      %s,
                                                      %s,
                                                      %s,
                                                      %s)""", (userid,
                                                               numbPauses,
                                                               loudness,
                                                               madmax, wavdate)
                    curInsertFtr, conn = connection()
                    curInsertFtr.execute(*insertFtrReq)
                    conn.commit()

                    # short term features extraction
                    fw = audioFeatureExtraction.stFeatureExtraction(
                        x, Fs, 0.1 * Fs, 0.1 * Fs)
                    print fw
                    # Mid term feature extraction
                    #F1 = audioFeatureExtraction.mtFeatureExtraction(x, Fs, 0.050*Fs, 0.050*Fs,0.050*Fs, 0.050*Fs)
                    mypath = "/home/ahmed/Desktop/flaskTherapio/PhoneCallsFtr/"
                    if not os.path.isdir(mypath):
                        os.makedirs(mypath)
                    numpy.savetxt(mypath + wavName + "_AllStFtrs.csv",
                                  fw,
                                  delimiter=",")
                    #numpy.savetxt("00_AllMidFtrs.csv", F1, delimiter=",")
                    # read features in a data frame
                    phoneCallFtrPrime = pd.read_csv(mypath + wavName +
                                                    "_AllStFtrs.csv")
                    COLUMNS = []
                    for i in range(0, len(phoneCallFtrPrime.columns)):
                        COLUMNS.append('Frame' + str(i + 1))
                        COLUMNS.append('label')
                    phoneCallFtrFinal = pd.read_csv(mypath + wavName +
                                                    "_AllStFtrs.csv",
                                                    header=None,
                                                    names=COLUMNS)

                    numOfFtrs = len(phoneCallFtrFinal["label"])
                    phoneCallFtrFinal.label = phoneCallFtrFinal.label.astype(
                        float).fillna(0)
                    # phoneCallFtrFinal.label = phoneCallFtrFinal.label.astype(int).fillna(0)
                    for j in range(0, numOfFtrs):
                        phoneCallFtrFinal.iloc[j]['label'] = 0

                #jsonFeatures = phoneCallFtrFinal.reset_index().to_json(orient='index')
                #jsonFeatures = phoneCallFtrFinal.to_json(orient=None)
                    display(phoneCallFtrFinal.head())
                #print "JSON Features of every audio ----------------------------------------------"
                #print jsonFeatures
            else:
                print " Moving to the next file"

    curPhone, conn = connection()
    reqPhoneCallFtr = """SELECT * FROM phoneCallFeatures WHERE
                          created_at BETWEEN  %s AND %s
                          AND uid = %s""", (starttime, today, userid)

    curPhone.execute(*reqPhoneCallFtr)
    calls = curPhone.fetchall()

    calls_dict = []
    for call in calls:
        call_dict = {
            'Id': call[0],
            'IdUniq': call[1],
            'npause': call[2],
            'loudness': call[3],
            'maxA': call[4],
            'createdat': call[5],
        }
        calls_dict.append(call_dict)
    #callJsonData = json.dumps(calls_dict)
    #LoadJsonData = json.loads(callJsonData)
    #print "JSON calls data ----------------------------------------------"
    #print LoadJsonData
    #print LoadJsonData['loudness']

    return render_template('dashboard.html',
                           userid=userid,
                           loudness=loudness,
                           nf=nf,
                           dur=dur,
                           maxDBFS=maxDBFS,
                           madmax=madmax,
                           MPA=MPA,
                           jsonFeatures=jsonFeatures,
                           starttime=starttime,
                           form=form)
コード例 #5
0
ファイル: app.py プロジェクト: AhmedHamedTN/TherapioFlaskApp
def extractAudio():

    # Declarations
    global userid, starttime, endtime, myPath, numbPauses, loudness, dur, madmax, maxDBFS, MPA, numOfFtrs, phoneCallFtrFinal, wavo, jsonFeatures, nf
    userid = ""
    starttime = ""
    endtime = ""
    myPath = ""
    numbPauses = 0
    loudness = 0
    nf = 0
    dur = 0
    madmax = 0
    maxDBFS = 0
    MPA = 0
    numOfFtrs = 0
    wavo = ""
    jsonFeatures = {}
    phoneCallFtrFinal = pd.DataFrame()

    # getting the parameters
    if request.method == 'POST':
        userid = request.args.get('userid')
        #userid = request.form['userid']
        print " Android must Have invoked this"

        # Ftp connection
        FtpHostName = "****************"
        FtpUser = "******"
        FtpPassword = "******"
        ftp = FTP(FtpHostName)
        ftp.login(FtpUser, FtpPassword)
        path = "************************"

        ########################################
        ########################################

        # Phone calls processing and features extraction

        #########################################
        #########################################
        #########################################

        # SQL queries
        curWAV, conn = connection()
        reqWAV = "SELECT * FROM files AS f WHERE f.uid = %s and f.type = 'WAV' "
        curWAV.execute(reqWAV, userid)
        WAVfiles = curWAV.fetchall()

        wavs_dict = []
        for wavf in WAVfiles:
            wavf_dict = {
                'Id': wavf[0],
                'filepath': wavf[1],
                'type': wavf[2],
                'createdat': wavf[3],
                'uid': wavf[4]
            }
            wavs_dict.append(wavf_dict)

        #print wavs_dict.__len__()
        print len(WAVfiles)
        ind = 0
        patho = "/home/ahmed/Desktop/flaskTherapio/"
        for wavfile in WAVfiles:
            ind += 1
            print "checking database for the " + str(ind) + " time"
            dirPath = wavfile[1][1:17]
            wavName = wavfile[1][17:]
            wavdate = wavfile[3][1:10]
            #print dirPath
            print wavName
            print wavdate
            ftp.cwd("/" + dirPath)
            print "done changing directory"
            audiofilematch = '*.wav'
            cc = 0
            for filename in ftp.nlst(
                    audiofilematch):  # Loop - looking for WAV files
                cc += 1
                print "checking FTP for the " + str(cc) + " time"
                print "comparing " + wavName + " and     " + filename
                print wavName == filename
                fhandle = open(filename, 'wb')
                print 'Getting ' + filename
                os.chdir("/home/ahmed/Desktop/flaskTherapio/")
                ftp.retrbinary('RETR ' + filename, fhandle.write)
                print "stored"
                fhandle.close()
                if filename == wavName:
                    print " just do this shit here"
                    sound = AudioSegment.from_file(patho + filename)
                    sound.export(patho + "PhoneCallsFtr/" + filename + ".wav",
                                 format="wav")
                    loudness = sound.rms
                    #number of Frames
                    nf = sound.frame_count()
                    # Value of loudness
                    loudness = sound.rms
                    #duration
                    dur = sound.duration_seconds
                    #max
                    madmax = sound.max
                    #max possible amplitude
                    MPA = sound.max_possible_amplitude
                    #max dbfs
                    maxDBFS = sound.max_dBFS
                    samplewidth = sound.sample_width

                    today = datetime.datetime.today().strftime("%m/%d/%Y")
                    blahblah = patho + "PhoneCallsFtr/" + filename + ".wav"
                    print "Blah blah path :   ======>  " + blahblah

                    [Fs, x] = audioBasicIO.readAudioFile(blahblah)
                    #silence removal ---- into segments

                    segments = aS.silenceRemoval(x,
                                                 Fs,
                                                 0.030,
                                                 0.030,
                                                 smoothWindow=0.3,
                                                 Weight=0.6,
                                                 plot=True)
                    numbPauses = len(segments) - 1
                    if numbPauses:
                        error = False
                    else:
                        error = True
                    print "num pauses : " + str(numbPauses)
                    # SELECT * FROM `phoneCallFeatures` WHERE (`created_at` BETWEEN 60 AND 1500) AND (uid = '5795028d168257.04609170')
                    # SQL query to insert phone call features to DB
                    insertFtrReq = """INSERT INTO phoneCallFeatures
                                              (uid,
                                              npause,
                                              loudness,
                                              maxA,
                                              created_at)
                                              VALUES (%s,
                                                      %s,
                                                      %s,
                                                      %s,
                                                      %s)""", (userid,
                                                               numbPauses,
                                                               loudness,
                                                               madmax, wavdate)
                    curInsertFtr, conn = connection()
                    curInsertFtr.execute(*insertFtrReq)
                    conn.commit()

                    # short term features extraction
                    fw = audioFeatureExtraction.stFeatureExtraction(
                        x, Fs, 0.1 * Fs, 0.1 * Fs)
                    print fw
                    # Mid term feature extraction
                    #F1 = audioFeatureExtraction.mtFeatureExtraction(x, Fs, 0.050*Fs, 0.050*Fs,0.050*Fs, 0.050*Fs)
                    mypath = "/home/ahmed/Desktop/flaskTherapio/PhoneCallsFtr/"
                    if not os.path.isdir(mypath):
                        os.makedirs(mypath)
                    numpy.savetxt(mypath + wavName + "_AllStFtrs.csv",
                                  fw,
                                  delimiter=",")
                    #numpy.savetxt("00_AllMidFtrs.csv", F1, delimiter=",")
                    # read features in a data frame
                    phoneCallFtrPrime = pd.read_csv(mypath + wavName +
                                                    "_AllStFtrs.csv")
                    COLUMNS = []
                    for i in range(0, len(phoneCallFtrPrime.columns)):
                        COLUMNS.append('Frame' + str(i + 1))
                        COLUMNS.append('label')
                    phoneCallFtrFinal = pd.read_csv(mypath + wavName +
                                                    "_AllStFtrs.csv",
                                                    header=None,
                                                    names=COLUMNS)

                    numOfFtrs = len(phoneCallFtrFinal["label"])
                    phoneCallFtrFinal.label = phoneCallFtrFinal.label.astype(
                        float).fillna(0)
                    # phoneCallFtrFinal.label = phoneCallFtrFinal.label.astype(int).fillna(0)
                    for j in range(0, numOfFtrs):
                        phoneCallFtrFinal.iloc[j]['label'] = 0

                    #jsonFeatures = phoneCallFtrFinal.reset_index().to_json(orient='index')
                    #jsonFeatures = phoneCallFtrFinal.to_json(orient=None)
                    display(phoneCallFtrFinal.head())
                    #print "JSON Features of every audio ----------------------------------------------"
                    #print jsonFeatures

    print "this script has been called and data has been handled"
    return jsonify({'USER ID': userid}), 201
コード例 #6
0
ファイル: app.py プロジェクト: AhmedHamedTN/TherapioFlaskApp
def extractCSV():
    global myPath, userid
    # Declarations
    userid = ""
    myPath = ""
    jsonFeatures = {}

    if request.method == "POST":
        #userid = request.form['userid']
        userid = request.args.get('userid')

        print " Android must Have invoked this CSV shit"

        # Ftp connection
        FtpHostName = "*************"
        FtpUser = "******"
        FtpPassword = "******"
        ftp = FTP(FtpHostName)
        ftp.login(FtpUser, FtpPassword)
        path = "*********************"

        ########################################
        ########################################

        # Accelerometer CSV data manipulation and features extraction

        #########################################
        #########################################
        #########################################

        # SQL queries
        #con = mdb.connect(hostname, username, password, database)

        curCSV, conn = connection()
        reqCSV = "SELECT * FROM files AS f WHERE f.uid = %s and f.type = 'CSV' "
        curCSV.execute(reqCSV, userid)
        CSVfiles = curCSV.fetchall()

        def magnitude(activity):
            x2 = activity['xAxis'] * activity['xAxis']
            y2 = activity['yAxis'] * activity['yAxis']
            z2 = activity['zAxis'] * activity['zAxis']
            m2 = x2 + y2 + z2
            m = m2.apply(lambda x: math.sqrt(x))
            return m

        def windows(df, size=100):
            start = 0
            while start < df.count():
                yield start, start + size
                start += (size / 2)

        def jitter(axis, start, end):
            j = float(0)
            for i in xrange(start, min(end, axis.count())):
                if start != 0:
                    j += abs(axis[i] - axis[i - 1])
            return j / (end - start)

        def mean_crossing_rate(axis, start, end):
            cr = 0
            m = axis.mean()
            for i in xrange(start, min(end, axis.count())):
                if start != 0:
                    p = axis[i - 1] > m
                    c = axis[i] > m
                    if p != c:
                        cr += 1
            return float(cr) / (end - start - 1)

        def window_summary(axis, start, end):
            acf = stattools.acf(axis[start:end])
            acv = stattools.acovf(axis[start:end])
            sqd_error = (axis[start:end] - axis[start:end].mean())**2
            return [
                jitter(axis, start, end),
                mean_crossing_rate(axis, start, end),
                axis[start:end].mean(),
                axis[start:end].std(),
                axis[start:end].var(),
                axis[start:end].min(),
                axis[start:end].max(),
                acf.mean(),  # mean auto correlation
                acf.std(),  # standard deviation auto correlation
                acv.mean(),  # mean auto covariance
                acv.std(),  # standard deviation auto covariance
                skew(axis[start:end]),
                kurtosis(axis[start:end]),
                math.sqrt(sqd_error.mean())
            ]

        def features(activity):
            for (start, end) in windows(activity['timestamp']):
                features = []
                for axis in ['xAxis', 'yAxis', 'zAxis', 'magnitude']:
                    features += window_summary(activity[axis], start, end)
                yield features

        COLUMNS = ['timestamp', 'xAxis', 'yAxis', 'zAxis']
        features_dict = []
        for csvfile in CSVfiles:
            Activity = pd.read_csv(path + csvfile[1],
                                   header=None,
                                   names=COLUMNS)[:3000]
            Activity['magnitude'] = magnitude(Activity)

            with open(
                    '/home/ahmed/Desktop/flaskTherapio/AccFtr/' +
                    csvfile[1][17:] + '_Features.csv', 'w') as out:
                rows = csv.writer(out)
                for f in features(Activity):
                    rows.writerow(f)

            ActivityDataFeature = pd.read_csv(
                '/home/ahmed/Desktop/flaskTherapio/AccFtr/' + csvfile[1][17:] +
                '_Features.csv',
                header=None)

            # return ActivityDataFeature.reset_index().to_json(orient='index')
            # CSVDATA = json.dumps(csv_files_dict)

        return "Shit must be invoked by android and the user id is   " + str(
            userid)