diff --git a/cloud-functions/python/functions/prediction/main.py b/cloud-functions/python/functions/prediction/main.py new file mode 100644 index 0000000..7b399b2 --- /dev/null +++ b/cloud-functions/python/functions/prediction/main.py @@ -0,0 +1,87 @@ +import functions_framework +# from google.cloud.firestore_v1.base_query import FieldFilter +# from firebase_admin import initialize_app, credentials, firestore +import os +from datetime import datetime +import pickle +import pandas as pd +from flask import jsonify + +# initialize_app() + +@functions_framework.http +def prediction(request): + """HTTP Cloud Function. + Args: + request (flask.Request): The request object. + + Returns: + The response text, or any set of values that can be turned into a + Response object using `make_response` + . + """ + if request.method == 'OPTIONS': + headers = { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'POST', + 'Access-Control-Allow-Headers': 'Content-Type', + # 'Access-Control-Max-Age': '3600' + } + + return ('', 204, headers) + + headers = { + 'Access-Control-Allow-Origin': '*' + } + + request_json = request.get_json(silent=True) + if request_json and 'calculatedRatio' in request_json and 'deviceRatio' in request_json: + calculated_ratio = request_json['calculatedRatio'] + device_ratio = request_json['deviceRatio'] + led1_buffer = request_json['led1Buffer'] + led2_buffer = request_json['led2Buffer'] + led1_sample = request_json['led1Sample'] + led2_sample = request_json['led2Sample'] + else: + calculated_ratio = 0.231057205 + device_ratio = 0.231057205 + led1_buffer = 23776.33 + led2_buffer = 26401.67 + led1_sample = 16286 + led2_sample = 6952.67 + + with open('label_encoder.pkl', 'rb') as label_encoder_file: + loaded_label_encoder = pickle.load(label_encoder_file) + + with open('gaussian_naive_bayes_model.pkl', 'rb') as model_file: + loaded_model = pickle.load(model_file) + + input_data = pd.DataFrame({'calculatedRatio': calculated_ratio, 'deviceRatio': device_ratio,'led1Buffer': led1_buffer, 'led2Buffer': led2_buffer, + 'led1Sample': led1_sample, 'led2Sample': led2_sample}, index=[0]) + + predicted_result = loaded_model.predict(input_data) + print(predicted_result.item()) + +# db = firestore.client() +# source_collection = "testData" + + # # Get all documents from the source collection + # source_docs = db.collection(source_collection).where(filter=FieldFilter("createdAt", ">=", datetime.today().strftime("%Y-%m-%d"))).stream() + # count = 0 + # for doc in source_docs: + # # Extract the document ID + # doc_id = doc.id + # print(doc_id) + + # # Get the document data + # doc_data = doc.to_dict() + + # try: + # # Delete the document from the source collection + # db.collection(source_collection).document(doc_id).delete() + # print(f"Document with ID '{doc_id}' updated") + # count = count + 1 + # except Exception as e: + # print(f"Error deleting document with ID '{doc_id}' from the source collection: {e}") + + return (jsonify({"predictedClass": predicted_result.item()}), 200, headers)