| | import time |
| |
|
| | from Helper_functions import * |
| |
|
| |
|
| | class API_Connection: |
| | def __init__(self, gd_connection, kaggle_username: str = "", kaggle_key: str = ""): |
| | os.environ["KAGGLE_USERNAME"] = kaggle_username |
| | os.environ["KAGGLE_KEY"] = kaggle_key |
| |
|
| | self.GoogleDrive_connection = gd_connection |
| |
|
| | self.NOTEBOOK_ID = "amirmorris/pix2pix-model" |
| | self.DATASET_NAME = "dataset" |
| |
|
| | def pull_kaggle_notebook(self, notebook_path: str): |
| | command = rf"kaggle kernels pull {self.NOTEBOOK_ID} -p {notebook_path} -m" |
| | return execute_terminal_command(command) |
| |
|
| | def push_kaggle_notebook(self, notebook_path: str): |
| | command = rf"kaggle kernels push -p {notebook_path}" |
| | return execute_terminal_command(command) |
| |
|
| | def get_notebook_status(self): |
| | command = rf"kaggle kernels status {self.NOTEBOOK_ID}" |
| | return execute_terminal_command(command) |
| |
|
| | def run(self, notebook_path: str): |
| | self.pull_kaggle_notebook(notebook_path) |
| | return self.push_kaggle_notebook(notebook_path) |
| |
|
| | def generate_image(self, input_image_name: str, edit_instruction: str, output_image_name: str, |
| | steps: int, seed: int, cfgtext: float, cfgimage: float, resolution: int |
| | ): |
| |
|
| | if len(input_image_name) == 0: |
| | return False, rf"Missing Input: input_image" |
| |
|
| | if len(edit_instruction) == 0: |
| | return False, rf"Missing Input: edit_instruction" |
| |
|
| | if len(output_image_name) == 0: |
| | return False, rf"Output Error: Missing output_image path" |
| |
|
| | current_time = get_current_time() |
| | print(rf"Start Time : {current_time}") |
| |
|
| | dataset_path = correct_path(self.DATASET_NAME) |
| | notebook_path = correct_path("notebook") |
| |
|
| | create_folder(dataset_path) |
| |
|
| | |
| | copy_file(rf"local_dataset\{input_image_name}", rf"{dataset_path}\{input_image_name}") |
| |
|
| | data = [ |
| | { |
| | "time": current_time, |
| | "edit_instruction": edit_instruction, |
| | "input_image_path": input_image_name, |
| | "output_image_path": output_image_name, |
| | "steps": steps, |
| | "seed": seed, |
| | "cfg-text": cfgtext, |
| | "cfg-image": cfgimage, |
| | "resolution": resolution |
| | } |
| | ] |
| |
|
| | write_file(data, dataset_path, "data.json") |
| |
|
| | |
| | self.GoogleDrive_connection.upload_file("data.json", rf"{self.DATASET_NAME}\data.json") |
| | self.GoogleDrive_connection.upload_file(input_image_name, rf"{self.DATASET_NAME}\{input_image_name}") |
| |
|
| | |
| | print(self.run(notebook_path)) |
| |
|
| | number_of_checks = 0 |
| | while True: |
| | status = str(self.get_notebook_status()).replace("\n", "") |
| | print(rf"- status no #{number_of_checks} : {status}") |
| | number_of_checks += 1 |
| | if "complete" in status: |
| | break |
| |
|
| | if "error" in status: |
| | return False, "notebook status error" |
| | if "cancelAcknowledged" in status: |
| | return False, "notebook status cancelAcknowledged" |
| | time.sleep(120) |
| |
|
| | |
| | self.GoogleDrive_connection.download_file( |
| | output_image_name, rf"{dataset_path}\{output_image_name}" |
| | ) |
| | output_image = read_image(rf"{dataset_path}\{output_image_name}") |
| |
|
| | if output_image is None: |
| | return False, "An error occured while running, no output image found" |
| |
|
| | return True, output_image |
| |
|
| |
|
| | def main(): |
| | pass |
| |
|
| |
|
| | if __name__ == "__main__": |
| | main() |