Commit bf7489ed authored by Thejan Ganepola's avatar Thejan Ganepola

Backend

parent 0c5d7c4c
{
"info": {
"_postman_id": "6b463409-1886-4304-a952-a34fc0a31bdc",
"name": "Heal",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "LOCAL",
"item": [
{
"name": "risk",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://127.0.0.1:5000/risk",
"protocol": "http",
"host": [
"127",
"0",
"0",
"1"
],
"port": "5000",
"path": [
"risk"
]
}
},
"response": []
},
{
"name": "diet_workout",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://127.0.0.1:5000/diwo",
"protocol": "http",
"host": [
"127",
"0",
"0",
"1"
],
"port": "5000",
"path": [
"diwo"
]
}
},
"response": []
},
{
"name": "pharmacy",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n\"user_location\" : \"7.09408649773395,79.99345377711329\",\r\n\"medicine_list\" : \"salbutamol,theophylline\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http://127.0.0.1:5000/pharmacy",
"protocol": "http",
"host": [
"127",
"0",
"0",
"1"
],
"port": "5000",
"path": [
"pharmacy"
]
}
},
"response": []
}
]
},
{
"name": "AWS",
"item": [
{
"name": "risk",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "ec2-54-242-87-59.compute-1.amazonaws.com:5003/risk",
"host": [
"ec2-54-242-87-59",
"compute-1",
"amazonaws",
"com"
],
"port": "5003",
"path": [
"risk"
]
}
},
"response": []
},
{
"name": "diet_workout",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "ec2-54-242-87-59.compute-1.amazonaws.com:5003/diwo",
"host": [
"ec2-54-242-87-59",
"compute-1",
"amazonaws",
"com"
],
"port": "5003",
"path": [
"diwo"
]
}
},
"response": []
},
{
"name": "pharmacy",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n\"user_location\" : \"7.09408649773395,79.99345377711329\",\r\n\"medicine_list\" : \"salbutamol,theophylline\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "ec2-54-242-87-59.compute-1.amazonaws.com:5003/pharmacy",
"host": [
"ec2-54-242-87-59",
"compute-1",
"amazonaws",
"com"
],
"port": "5003",
"path": [
"pharmacy"
]
}
},
"response": []
}
]
}
]
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
[
{
"name":"Anura pharmacy",
"location":"7.0940864977339615,79.99345377711329",
"medicine":"salbutamol,theophylline,terbutaline"
},
{
"name":"Venura pharmacy",
"location":"7.0940864977339615,79.99345377711329",
"medicine":"terbutaline,bisoprolol,propanolol,diltiazem"
},
{
"name":"Onel pharmacy",
"location":"6.924009203281871,79.97785832551634",
"medicine":"salbutamol,theophylline,bisoprolol,diltiazem"
},
{
"name":"Pharmart pharmacy",
"location":"6.9170765501095826,79.9731878634781",
"medicine":"paracetamol,brufen,cetrizine"
},
{
"name":"Sahana Suwa pharmacy",
"location":"6.909795166009974,79.9712794543516",
"medicine":"arorva,deriphyllin retard,ibuprofen"
},
{
"name":"Excel Chemist pharmacy",
"location":"6.909111411712752,79.96812888133942",
"medicine":"acetaminophen,panadol,celox r"
},
{
"name":"Lanka Hospitals pharmacy",
"location":"6.890199838379547,79.8755232678455",
"medicine":"beta-blockers,metoprolol,atenolol"
},
{
"name":"Safeway Chemist pharmacy",
"location":"6.900765273496725,79.95812885160541",
"medicine":"diazepam,amoxicillin,atenolol"
},
{
"name":"Osulka pharmacy",
"location":"7.065439421205347,80.00579199852889",
"medicine":"lyrica,metoprolol,codein"
},
{
"name":"Med-X pharmacy",
"location":"6.905658609086574,79.96319536969301",
"medicine":"azithromycin,alprazolam,lorazepam"
},
{
"name":"Slim pharma pharmacy",
"location":"6.904108520002969,79.97499582551622",
"medicine":"asprin,morphine,losartan,insulin"
},
{
"name":"Uni Chemist pharmacy",
"location":"6.876906714846124,79.93725064085758",
"medicine":"omeprazole,metoprolol,epinephrine"
},
{
"name":"Liberty pharmacy",
"location":"6.911167058228385,79.85208210037594",
"medicine":"salbutamol,paracetomol,theophylline,terbutaline"
},
{
"name":"Harcourts pharmacy",
"location":"6.917029157743831,79.86644722366874",
"medicine":"bisoprolol,propranolol,paracetomol,theophylline"
},
{
"name":"Suwahasa pharmacy",
"location":"6.897430094321646, 79.92642060253203",
"medicine":"metoprolol,albuterol,diltiazem,brufen"
},
{
"name":"Health guard pharmacy",
"location":"6.915351746143819,79.85908343901018",
"medicine":"paracetamol,brufen,theophylline,amoxicillin"
},
{
"name":"Central pharmacy & store",
"location":"6.916017661229803,79.87667135250412",
"medicine":"atenolol,codein,metformin,januvia"
},
{
"name":"Sarasi pharmacy",
"location":"6.97766771303644,79.92491054974622",
"medicine":"trazodone,paracetamol,theophylline,lyrica"
},
{
"name":"Himaya pharmacy",
"location":"6.8954949709475555,79.96076454085762",
"medicine":"ceftriaxone,clarithromycin,erythromycin,cefclor"
},
{
"name":"Health Chemist pharmacy",
"location":"6.903887744124613,79.93547647320233",
"medicine":"salbutamol,terbutaline,diltiazem,bisprolol"
},
{
"name":"Rokem pharmacy",
"location":"6.903580379800135,79.95527011017482",
"medicine":"brufen,trazodone,paracetamol,lyrica"
},
{
"name":"New Koswatte chemist pharmacy",
"location":"6.906252512873709,79.92877771202234",
"medicine":"bisoprolol,propranolol,terbutaline,diltiazem"
},
{
"name":"Isuru pharmacy",
"location":"6.902048508051585,79.91718599852838",
"medicine":"clarithromycin,erythromycin,cefclor,diltiazem"
},
{
"name":"CFC Healthcare Pharmacy Battaramulla ",
"location":"6.896750209485456,79.92250838318691",
"medicine":"paracetamol,theophylline,atenolol,codein"
},
{
"name":"Pelawatte pharmacy",
"location":"6.891533775472255,79.9284086831869",
"medicine":"metoprolol,albuterol,diltiazem,brufen"
},
{
"name":"S.A.K pharmacy",
"location":"6.966268386952313,79.90001644085787",
"medicine":"salbutamol,paracetomol,theophylline,diltiazem"
},
{
"name":"Yukee pharmacy",
"location":"7.231367395308464,80.24504313901123",
"medicine":"bisoprolol,propranolol,paracetomol,beta-blockers"
},
{
"name":" Losetha pharmacy",
"location":"6.966355838731583,79.9275027255164",
"medicine":"atenolol,beta-blockers,salbutamol,paracetamol"
},
{
"name":"Lanka pharmacy",
"location":"7.2111603452394055, 79.8401644866482",
"medicine":"beta-blockers,metoprolol,atenolol,paracetamol"
},
{
"name":"Nawaloka care pharmacy",
"location":"7.207141215951129, 79.84963235407916",
"medicine":"salbutamol,theophylline,bisoprolol,diltiazem"
}
]
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
from inference import *
from flask_cors import CORS
from flask import Flask, Response, request
app = Flask(__name__)
CORS(app)
@app.route('/risk', methods=['GET'])
def risk():
risk_level, HeartRateArr, BloodOxygenLevelArr, BodyTemperatureArr = risk_level_prediction()
return Response(
response=json.dumps({
"status": "success",
"HeartRate": HeartRateArr,
"BloodOxygenLevel": BloodOxygenLevelArr,
"BodyTemperature": BodyTemperatureArr,
"RiskLevel": f"{risk_level}"
}),
status=200,
mimetype="application/json"
)
@app.route('/diwo', methods=['GET'])
def diwo():
exercise_plan, diet_plan, HeartRateArr, BloodOxygenLevelArr, BodyTemperatureArr = diet_workout_prediction()
return Response(
response=json.dumps({
"status": "success",
"HeartRate": HeartRateArr,
"BloodOxygenLevel": BloodOxygenLevelArr,
"BodyTemperature": BodyTemperatureArr,
"ExercisePlan": f"{exercise_plan}",
"DietPlan": f"{diet_plan}"
}),
status=200,
mimetype="application/json"
)
@app.route('/pharmacy', methods=['POST'])
def pharmacy():
'''
{
"user_location" : "7.09408649773395,79.99345377711329",
"medicine_list" : "salbutamol,theophylline"
}
'''
data = request.get_json()
user_location = data['user_location']
medicine_list = data['medicine_list']
rec_list = pharmacy_recommendation(user_location, medicine_list)
return Response(
response=json.dumps({
"status": "success",
"pharmacy_recommendation": rec_list
}),
status=200,
mimetype="application/json"
)
if __name__ == "__main__":
app.run(
debug=True,
host='0.0.0.0',
port=5000,
threaded=False,
use_reloader=True
)
\ No newline at end of file
This diff is collapsed.
[
{
"name":"Anura pharmacy",
"location":"7.0940864977339615,79.99345377711329",
"medicine":"salbutamol,theophylline,terbutaline"
},
{
"name":"Venura pharmacy",
"location":"7.0940864977339615,79.99345377711329",
"medicine":"terbutaline,bisoprolol,propanolol,diltiazem"
},
{
"name":"Onel pharmacy",
"location":"6.924009203281871,79.97785832551634",
"medicine":"salbutamol,theophylline,bisoprolol,diltiazem"
},
{
"name":"Pharmart pharmacy",
"location":"6.9170765501095826,79.9731878634781",
"medicine":"paracetamol,brufen,cetrizine"
},
{
"name":"Sahana Suwa pharmacy",
"location":"6.909795166009974,79.9712794543516",
"medicine":"arorva,deriphyllin retard,ibuprofen"
},
{
"name":"Excel Chemist pharmacy",
"location":"6.909111411712752,79.96812888133942",
"medicine":"acetaminophen,panadol,celox r"
},
{
"name":"Lanka Hospitals pharmacy",
"location":"6.890199838379547,79.8755232678455",
"medicine":"beta-blockers,metoprolol,atenolol"
},
{
"name":"Safeway Chemist pharmacy",
"location":"6.900765273496725,79.95812885160541",
"medicine":"diazepam,amoxicillin,atenolol"
},
{
"name":"Osulka pharmacy",
"location":"7.065439421205347,80.00579199852889",
"medicine":"lyrica,metoprolol,codein"
},
{
"name":"Med-X pharmacy",
"location":"6.905658609086574,79.96319536969301",
"medicine":"azithromycin,alprazolam,lorazepam"
},
{
"name":"Slim pharma pharmacy",
"location":"6.904108520002969,79.97499582551622",
"medicine":"asprin,morphine,losartan,insulin"
},
{
"name":"Uni Chemist pharmacy",
"location":"6.876906714846124,79.93725064085758",
"medicine":"omeprazole,metoprolol,epinephrine"
},
{
"name":"Liberty pharmacy",
"location":"6.911167058228385,79.85208210037594",
"medicine":"salbutamol,paracetomol,theophylline,terbutaline"
},
{
"name":"Harcourts pharmacy",
"location":"6.917029157743831,79.86644722366874",
"medicine":"bisoprolol,propranolol,paracetomol,theophylline"
},
{
"name":"Suwahasa pharmacy",
"location":"6.897430094321646, 79.92642060253203",
"medicine":"metoprolol,albuterol,diltiazem,brufen"
},
{
"name":"Health guard pharmacy",
"location":"6.915351746143819,79.85908343901018",
"medicine":"paracetamol,brufen,theophylline,amoxicillin"
},
{
"name":"Central pharmacy & store",
"location":"6.916017661229803,79.87667135250412",
"medicine":"atenolol,codein,metformin,januvia"
},
{
"name":"Sarasi pharmacy",
"location":"6.97766771303644,79.92491054974622",
"medicine":"trazodone,paracetamol,theophylline,lyrica"
},
{
"name":"Himaya pharmacy",
"location":"6.8954949709475555,79.96076454085762",
"medicine":"ceftriaxone,clarithromycin,erythromycin,cefclor"
},
{
"name":"Health Chemist pharmacy",
"location":"6.903887744124613,79.93547647320233",
"medicine":"salbutamol,terbutaline,diltiazem,bisprolol"
},
{
"name":"Rokem pharmacy",
"location":"6.903580379800135,79.95527011017482",
"medicine":"brufen,trazodone,paracetamol,lyrica"
},
{
"name":"New Koswatte chemist pharmacy",
"location":"6.906252512873709,79.92877771202234",
"medicine":"bisoprolol,propranolol,terbutaline,diltiazem"
},
{
"name":"Isuru pharmacy",
"location":"6.902048508051585,79.91718599852838",
"medicine":"clarithromycin,erythromycin,cefclor,diltiazem"
},
{
"name":"CFC Healthcare Pharmacy Battaramulla ",
"location":"6.896750209485456,79.92250838318691",
"medicine":"paracetamol,theophylline,atenolol,codein"
},
{
"name":"Pelawatte pharmacy",
"location":"6.891533775472255,79.9284086831869",
"medicine":"metoprolol,albuterol,diltiazem,brufen"
},
{
"name":"S.A.K pharmacy",
"location":"6.966268386952313,79.90001644085787",
"medicine":"salbutamol,paracetomol,theophylline,diltiazem"
},
{
"name":"Yukee pharmacy",
"location":"7.231367395308464,80.24504313901123",
"medicine":"bisoprolol,propranolol,paracetomol,beta-blockers"
},
{
"name":" Losetha pharmacy",
"location":"6.966355838731583,79.9275027255164",
"medicine":"atenolol,beta-blockers,salbutamol,paracetamol"
},
{
"name":"Lanka pharmacy",
"location":"7.2111603452394055, 79.8401644866482",
"medicine":"beta-blockers,metoprolol,atenolol,paracetamol"
},
{
"name":"Nawaloka care pharmacy",
"location":"7.207141215951129, 79.84963235407916",
"medicine":"salbutamol,theophylline,bisoprolol,diltiazem"
}
]
\ No newline at end of file
import json
import pickle
import numpy as np
import pandas as pd
import tensorflow as tf
from pymongo import MongoClient
from math import sin, cos, sqrt, atan2, radians, asin
try:
client = MongoClient("mongodb+srv://admin:admin@early-detection.jevtz.mongodb.net/test")
db = client["Heal"]
client.server_info()
print("DB accessed !")
except Exception as e:
print("*************************************************************")
print(e)
print("*************************************************************")
##################################### PARAMS #########################################
risk_level_mapping = {
0 : "situation doesn't exist",
1 : "Manageable",
2 : "Normal Healthy",
3 : "Risky"
}
excercise_plan_mapping = {
0: 'No exercises',
1: 'sleep,Rest, Yoga',
2: 'jogging, walking, Running',
3: 'swimming, Breathing exercises'
}
diet_plan_mapping = {
0: 'No food plan',
1: 'Low cholesterol food',
2: 'Balance Diet which contain all the nutrients',
3: 'Hot Beverages & Meals Food rich in potassium'
}
##################################### LOAD MODELS #########################################
risk_model = tf.keras.models.load_model('weights/risk_prediction.h5')
risk_model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=[
tf.keras.metrics.CategoricalAccuracy(),
tf.keras.metrics.Precision(),
tf.keras.metrics.Recall(),
tf.keras.metrics.AUC()
])
with open('weights/scalar - risk_prediction.pkl', 'rb') as f:
risk_scalar = pickle.load(f)
diet_workout_model = tf.keras.models.load_model('weights/diet_workout_prediction.h5')
diet_workout_model.compile(
loss='sparse_categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
with open('weights/scalar - diet_workout_prediction.pkl', 'rb') as f:
diet_workout_scalar = pickle.load(f)
##################################### PREDICTION #########################################
def risk_level_prediction():
health_collection = db["health"]
health_data = pd.DataFrame(list(health_collection.find()))
sample_data = health_data[-50:][["HeartRate","BloodOxygenLevel","BodyTemperature"]]
HeartRateArr = sample_data["HeartRate"].values.tolist()
BloodOxygenLevelArr = sample_data["BloodOxygenLevel"].values.tolist()
BodyTemperatureArr = sample_data["BodyTemperature"].values.tolist()
Xinf = sample_data.values
Xinf = risk_scalar.transform(Xinf)
Xinf = Xinf.reshape(1, 50, 3)
risk_level = risk_model.predict(Xinf).squeeze()
risk_level = np.argmax(risk_level)
risk_level = risk_level_mapping[risk_level]
return risk_level, HeartRateArr, BloodOxygenLevelArr, BodyTemperatureArr
def diet_workout_prediction():
health_collection = db["health"]
health_data = pd.DataFrame(list(health_collection.find()))
sample_data = health_data[-50:][["HeartRate","BloodOxygenLevel","BodyTemperature"]]
HeartRateArr = sample_data["HeartRate"].values.tolist()
BloodOxygenLevelArr = sample_data["BloodOxygenLevel"].values.tolist()
BodyTemperatureArr = sample_data["BodyTemperature"].values.tolist()
Xinf = sample_data.values
Xinf = diet_workout_scalar.transform(Xinf)
exercise_plan_idxs, diet_plan_idxs = diet_workout_model.predict(Xinf)
exercise_plan_idxs = exercise_plan_idxs.squeeze()
diet_plan_idxs = diet_plan_idxs.squeeze()
exercise_plan_idxs = np.argmax(exercise_plan_idxs, axis=1)
diet_plan_idxs = np.argmax(diet_plan_idxs, axis=1)
exercise_plans = [excercise_plan_mapping[idx] for idx in exercise_plan_idxs]
diet_plans = [diet_plan_mapping[idx] for idx in diet_plan_idxs]
mode_exercise_plan = max(set(exercise_plans), key=exercise_plans.count)
mode_diet_plan = max(set(diet_plans), key=diet_plans.count)
return mode_exercise_plan, mode_diet_plan, HeartRateArr, BloodOxygenLevelArr, BodyTemperatureArr
def haversine(p1, p2):
lat1, lon1 = p1
lat2, lon2 = p2
lat1 = float(lat1)
lon1 = float(lon1)
lat2 = float(lat2)
lon2 = float(lon2)
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles. Determines return value units.
distance_km = c * r
return distance_km
def pharmacy_recommendation(user_location, medicine_list):
user_location = user_location.split(',')
user_location = (float(user_location[0]), float(user_location[1]))
medicine_list = medicine_list.split(',')
medicine_list = [medicine.strip() for medicine in medicine_list]
pharmacy_collection = db["pharmacy"]
df_pharmacy = pd.DataFrame(list(pharmacy_collection.find()))
df_pharmacy[['latitude', 'longitude']] = df_pharmacy['location'].str.split(',', 1, expand=True)
del df_pharmacy['location']
df_pharmacy['latitude'] = df_pharmacy['latitude'].str.strip()
df_pharmacy['longitude'] = df_pharmacy['longitude'].str.strip()
df_pharmacy['latitude'] = df_pharmacy['latitude'].astype(float)
df_pharmacy['longitude'] = df_pharmacy['longitude'].astype(float)
df_pharmacy["medicine"] = df_pharmacy["medicine"].str.split(',')
df_pharmacy = df_pharmacy.loc[df_pharmacy['medicine'].apply(lambda x: set(medicine_list).issubset([m.strip() for m in x]))]
df_pharmacy['distance'] = df_pharmacy.apply(lambda row: haversine(user_location, (row['latitude'], row['longitude'])), axis=1)
df_pharmacy.sort_values(by=['distance'], inplace=True)
df_pharmacy = df_pharmacy.head(5)
df_pharmacy = df_pharmacy[['name', 'distance', 'medicine']]
df_pharmacy['distance'] = df_pharmacy['distance'].apply(lambda x: round(x, 2))
rec_list = []
for _, row in df_pharmacy.iterrows():
rec_json = {}
rec_json["name"] = f"{row['name']}"
rec_json["distance"] = f"{row['distance']} km"
rec_json["available medicines"] = f"{row['medicine']}"
rec_list.append(rec_json)
return rec_list
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment