Source code for forensicfit.utils.array_tools

# -*- coding: utf-8 -*-

import io

import cv2
import numpy as np

from .. import HAS_PYMONGO

[docs]def serializer(indict: dict) -> dict: """Serilizes any given dictionary for mongodb. Parameters ---------- indict : dict input dictionary """ ret = {} for key in indict: if type(indict[key]) is dict: ret[key] = serializer(indict[key]) elif type(indict[key]) is np.ndarray: ret[key] = indict[key].tolist() else : ret[key] = indict[key] return ret
[docs]def vote_calculator(prediction: np.ndarray) -> np.ndarray: n_voters = prediction.shape[1] ret = np.zeros(shape=(prediction.shape[0])) for i, pred in enumerate(prediction): votes = pred.round() score = votes.sum()/n_voters ret[i] = score return np.array(ret)
if HAS_PYMONGO: from gridfs.grid_file import GridOut
[docs] def read_bytes_io(obj: GridOut, method: str = 'numpy') -> np.array: """reads a binary file stored in mongodb and returns a numpy array Parameters ---------- obj : GridOut output from a mongodb girdfs file Returns ------- np.array numpy array containing the information loaded from gridfs file """ if method == 'numpy': return np.load(io.BytesIO(obj.read()), allow_pickle=True) elif method == 'opencv': return cv2.imdecode(np.frombuffer(obj.read().getbuffer(), np.uint8), -1)
[docs] def write_bytes_io(obj: dict, method: str = 'numpy') -> io.BytesIO: if method == 'numpy': output = io.BytesIO() np.savez(output, **obj) return output.getvalue() elif method == 'opencv': is_success, buffer = cv2.imencode(".png", obj) output = io.BytesIO(buffer) return output.getvalue()