MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Leia dados do MongoDB (gridfs) via Matlab e driver Java


Eu nunca respondi a nenhuma pergunta do fórum, mas me beneficiei muito especialmente do stackoverflow, então pensei em devolver algo pelo menos uma vez. Como o problema acima estava me incomodando agora por quase dois dias e finalmente montei uma solução, pensei que seria um bom tópico para devolver algo à comunidade.

Eu tive o mesmo problema de recuperar uma imagem (.png) de um MongoDB/GridFS com o driver Java. Primeiro, como também descrito acima, você precisa recuperar o objeto Java do arquivo:
    import com.mongodb.*;
    import com.mongodb.gridfs.*;

    mongoClient = MongoClient('server_name',27017);
    db = mongoClient.getDB('database_name');
    imgData = GridFS(db,'image_data');

A parte do código acima está obtendo a coleção com os dados da imagem. Depois, o objeto Java de dados de imagem pode ser recuperado:
    javaIObj = imgData.findOne('image_name.png');

Agora ByteArrayOutputStream é necessário onde o fluxo de dados pode ser canalizado em vez de um arquivo:
    import java.io.ByteArrayOutputStream;

    baos = ByteArrayOutputStream();
    javaIObj.writeTo(baos);

O fluxo de saída precisa ser canalizado novamente para um ByteArrayInputStream que pode ser usado para construir um objeto ImageIO:
    import java.io.ByteArrayInputStream;
    import javax.imageio.ImageIO;    

    bais = ByteArrayInputStream(baos.toByteArray());
    jbi = ImageIO.read(bais);

Agora a imagem real do Matlab como matriz pode ser recuperada e exibida:
    nrows = jbi.getHeight; ncols = jbi.getWidth;
    data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
    matImg = reshape(data,ncols,nrows)';

    imagesc(matImg);

Não sei se esta é a solução perfeita, mas funcionou para mim.

Felicidades!