MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Leggi i dati da MongoDB (gridfs) tramite Matlab e driver Java

Non ho mai risposto a nessuna domanda del forum, ma ho beneficiato molto soprattutto dello stackoverflow, quindi ho pensato di dover restituire qualcosa almeno una volta. Poiché il problema di cui sopra mi stava infastidendo ormai da quasi due giorni e alla fine ho messo insieme una soluzione, ho pensato che sarebbe stato un buon argomento per restituire qualcosa alla comunità.

Ho avuto lo stesso problema nel recuperare un'immagine (.png) da un MongoDB/GridFS con il driver Java. Innanzitutto, come descritto sopra, è necessario recuperare il file oggetto Java:

    import com.mongodb.*;
    import com.mongodb.gridfs.*;

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

La parte di codice sopra sta ottenendo la raccolta con i dati dell'immagine. Successivamente, è possibile recuperare l'oggetto Java dei dati dell'immagine:

    javaIObj = imgData.findOne('image_name.png');

Ora è necessario ByteArrayOutputStream in cui è possibile reindirizzare il flusso di dati anziché un file:

    import java.io.ByteArrayOutputStream;

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

Il flusso di output deve essere nuovamente reindirizzato a un ByteArrayInputStream che può essere utilizzato per costruire un oggetto ImageIO:

    import java.io.ByteArrayInputStream;
    import javax.imageio.ImageIO;    

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

Ora l'effettiva immagine Matlab come matrice può essere recuperata e visualizzata:

    nrows = jbi.getHeight; ncols = jbi.getWidth;
    data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
    matImg = reshape(data,ncols,nrows)';

    imagesc(matImg);

Non so se questa sia la soluzione perfetta, ma per me ha funzionato.

Saluti!