Esempio n. 1
0
def cropped_images(predictions: dict, image: bytes, _id: str) -> list:
    """Recorta imagens de acordo com bbox passada.

    Para acessar algumas predições, é necessário recortar as imagens antes.

    Args:
        predictions: dicionário com as predições
        image: imagem do contêiner original, em bytes
        _id: id do MongoDB se existir. Apenas para reportar erro

    Returns:
        lista de imagem(ns) recortada[s]

    """
    images = []
    for prediction in predictions:
        bbox = prediction.get('bbox')
        if bbox:
            try:
                image_crop = recorta_imagem(image, bbox)
                images.append(image_crop)
            except Exception as err:
                print('Erro ao recortar imagem', _id, str(err))
                raise err
    return images
Esempio n. 2
0
def get_img_recortada(db, _id) -> Image:
    fs = GridFS(db)
    grid_data = fs.get(_id)
    preds = grid_data.metadata.get('predictions')
    if preds:
        bboxes = preds[0].get('bbox')
        # print(bboxes)
        image = grid_data.read()
        image = recorta_imagem(image, bboxes, pil=True)
        return image
Esempio n. 3
0
def image_zoom(filename):
    """Recorta e serializa a imagem do arquivo para stream HTTP."""
    filename = os.path.join(tmpdir, filename)
    image = Image.open(filename)
    prediction = call_model('ssd', image)
    success = prediction.get('success')
    pred_bbox = prediction['predictions']
    if success:
        coords = pred_bbox[0]['bbox']
        img_io = recorta_imagem(image, coords)
    return send_file(img_io, mimetype='image/jpeg')
Esempio n. 4
0
def get_image(_id, n, pil=False):
    """Recupera, recorta a imagem do banco e retorna."""
    db = app.config['mongodb']
    fs = GridFS(db)
    _id = ObjectId(_id)
    if fs.exists(_id):
        grid_data = fs.get(_id)
        if n is not None:
            n = int(n)
            preds = grid_data.metadata.get('predictions')
            if preds:
                bboxes = [pred.get('bbox') for pred in preds]
                if len(bboxes) >= n + 1 and bboxes[n]:
                    image = grid_data.read()
                    image = recorta_imagem(image, bboxes[n], pil=pil)
                    return image
    return None
Esempio n. 5
0
def preenche_bbox(db, engine, limit=2000, start=None):
    Session = sessionmaker(bind=engine)
    session = Session()
    if start:
        lista_conformidade = session.query(Conformidade) \
            .filter(Conformidade.dataescaneamento >= start) \
            .filter(Conformidade.bbox_classe.is_(None)).limit(limit).all()
    else:
        lista_conformidade = session.query(Conformidade) \
            .filter(Conformidade.bbox_classe.is_(None)).limit(limit).all()
    tempo = time.time()
    qtde = 0
    try:
        for conformidade in lista_conformidade:
            classe = None
            score = None
            fs = GridFS(db)
            _id = ObjectId(conformidade.id_imagem)
            if fs.exists(_id):
                grid_data = fs.get(_id)
                preds = grid_data.metadata.get('predictions')
                if preds:
                    bboxes = preds[0].get('bbox')
                    image = grid_data.read()
                    image = recorta_imagem(image, bboxes, pil=True)
                    classe = preds[0].get('class')
                    score = preds[0].get('score')
            if classe:
                conformidade.bbox_classe = classe
                conformidade.bbox_score = score
                conformidade.laplacian = calcula_laplacian(image)
                session.add(conformidade)
                qtde += 1
        session.commit()
    except Exception as err:
        logger.error(err, exc_info=True)
        session.rollback()
    tempo = time.time() - tempo
    tempo_registro = 0 if (qtde == 0) else (tempo / qtde)
    logger.info(f'{qtde} bbox preenchidos em {tempo} segundos.' +
                f'{tempo_registro} por registro')