MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Lire les données de MongoDB (gridfs) via Matlab et le pilote Java

Je n'ai jamais répondu à aucune question du forum, mais j'ai beaucoup profité en particulier de stackoverflow, alors j'ai pensé que je devais rendre quelque chose au moins une fois. Étant donné que le problème ci-dessus me dérangeait depuis près de deux jours et que j'ai finalement trouvé une solution, j'ai pensé que ce serait un bon sujet pour redonner quelque chose à la communauté.

J'ai eu le même problème de récupération d'une image (.png) à partir d'un MongoDB/GridFS avec le pilote Java. Tout d'abord, comme également décrit ci-dessus, vous devez récupérer l'objet Java du fichier :

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

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

La partie de code ci-dessus obtient la collection avec les données d'image. Ensuite, l'objet Java de données d'image peut être récupéré :

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

Maintenant, ByteArrayOutputStream est nécessaire là où le flux de données peut être redirigé vers au lieu d'un fichier :

    import java.io.ByteArrayOutputStream;

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

Le flux de sortie doit à nouveau être redirigé vers un ByteArrayInputStream qui peut être utilisé pour construire un objet ImageIO :

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

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

Maintenant, l'image Matlab réelle en tant que matrice peut être récupérée et affichée :

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

    imagesc(matImg);

Je ne sais pas si c'est la solution parfaite, mais cela a fonctionné pour moi.

Santé !