|
import os |
|
from box.exceptions import BoxValueError |
|
import yaml |
|
from cnnClassifier import logger |
|
import json |
|
import joblib |
|
from ensure import ensure_annotations |
|
from box import ConfigBox |
|
from pathlib import Path |
|
from typing import Any |
|
import base64 |
|
|
|
|
|
|
|
@ensure_annotations |
|
def read_yaml(path_to_yaml: Path) -> ConfigBox: |
|
"""reads yaml file and returns |
|
|
|
Args: |
|
path_to_yaml (str): path like input |
|
|
|
Raises: |
|
ValueError: if yaml file is empty |
|
e: empty file |
|
|
|
Returns: |
|
ConfigBox: ConfigBox type |
|
""" |
|
try: |
|
with open(path_to_yaml) as yaml_file: |
|
content = yaml.safe_load(yaml_file) |
|
logger.info(f"yaml file: {path_to_yaml} loaded successfully") |
|
return ConfigBox(content) |
|
except BoxValueError: |
|
raise ValueError("yaml file is empty") |
|
except Exception as e: |
|
raise e |
|
|
|
|
|
|
|
@ensure_annotations |
|
def create_directories(path_to_directories: list, verbose = True): |
|
"""create list of directories |
|
|
|
Args: |
|
path_to_directories (list): list of path of directories |
|
ignore_log (bool, optional): ignore if multiple dirs is to be created. Defaults to False. |
|
""" |
|
|
|
for path in path_to_directories: |
|
os.makedirs(path, exist_ok=True) |
|
if verbose: |
|
logger.info(f'Created directory at: {path}') |
|
|
|
@ensure_annotations |
|
def save_json(path: Path, data: dict): |
|
"""save json data |
|
|
|
Args: |
|
path (Path): path to json file |
|
data (dict): data to be saved in json file |
|
""" |
|
|
|
|
|
with open(path, 'w') as f: |
|
json.dump(data, f, indent=4) |
|
|
|
logger.info(f'Json file saved at: {path}') |
|
|
|
|
|
|
|
|
|
@ensure_annotations |
|
def load_json(path: Path) -> ConfigBox: |
|
"""load json files data |
|
|
|
Args: |
|
path (Path): path to json file |
|
|
|
Returns: |
|
ConfigBox: data as class attributes instead of dict |
|
""" |
|
|
|
with open(path, 'r') as f: |
|
content = json.load(f) |
|
|
|
logger.info(f"Json file loaded successfully from: {path}") |
|
return ConfigBox |
|
|
|
|
|
@ensure_annotations |
|
def save_bin(data: Any, path: Path): |
|
"""save binary file |
|
|
|
Args: |
|
data (Any): data to be saved as binary |
|
path (Path): path to binary file |
|
""" |
|
joblib.dump(value=data, filename=path) |
|
logger.info(f'binary file saved at: {path}') |
|
|
|
|
|
|
|
@ensure_annotations |
|
def load_bin(path: Path) -> ConfigBox: |
|
"""load binary data |
|
|
|
Args: |
|
path (Path): path to binary file |
|
|
|
Returns: |
|
Any: object stored in the file |
|
""" |
|
|
|
data = joblib.load(path) |
|
logger.info(f'binary file has been loaded successfully from : {path}') |
|
return data |
|
|
|
|
|
@ensure_annotations |
|
def get_size(path: Path) -> str: |
|
''' |
|
get size in KB |
|
|
|
Args: |
|
Path (Path): path of the file |
|
|
|
Returns: |
|
str: size in KB''' |
|
|
|
size_in_kb = round(os.path.getsize(path)/1024) |
|
return f"~ {size_in_kb} KB" |
|
|
|
|
|
def decodeImage(imgstring, fileName): |
|
imgdata = base64.b64decode(imgstring) |
|
with open(fileName, 'wb') as f: |
|
f.write(imgdata) |
|
f.close() |
|
|
|
|
|
|
|
def encodeImageIntoBase64(croppedImagePath): |
|
with open(croppedImagePath, 'rb') as f: |
|
return base64.b64decode(f.read()) |