Données BLOB SQLite et Python
Bonjour,
Je me suis inscris sur ce forum pour vous faire part de mon problème, en espérant y trouver des éléments de solutions. Toute aide sera appréciée!
Je dispose d'une base de donnée SQLite. En autres, celle-ci contient des données BLOBS qui correspondent à des images 20*20 encodées en 8 bits, soit 400octets pour chaque canal. En effet, ma base de donnée contient un canal de l'image (YUV) sur chaque colonne. Pour simplifier le problème, je ne m'intéresse pour l'instant qu'au canal Y.
Mon objectif est à terme de convertir ces données BLOBs en un fichier HDF5 (ou LMDB, mais je n'ai trouvé aucunes informations en ce qui concerne ce format).
J'ai également besoin de reconstituer ces données en fichier image pour pouvoir les visualiser, tout ceci, en Python bien évidemment (je travaille avec Python 2.7.11).
Charger les données de la base de données ne semble a priori pas poser de problème:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import sqlite3
from pandas.io import sql
#Selection de la base de donnee
database='dataBase/Background.sqlite'
#Selection du canal Y1
instruction2="SELECT cutoutDataY1 FROM 'B_HYPOTHESIS'"
try:
conn = sqlite3.connect(database)
#Creation d'un cursor
cur = conn.cursor()
cur.execute(instruction2)
except:
print('*** Requete SQL incorrecte ***') |
Mon premier problème se pose à la récupération de ces données BLOBs dans Python, qui les interprète en terme de Buffer, comme en témoigne le bout de code ci-dessous:
Code:
1 2 3 4 5 6 7
| In[3]: row = cur.fetchone()
In[4]: print type(row)
<type 'tuple'>
In[5]: print type(row[0])
<type 'buffer'>
In[6 ]: print row[0]
geklklklkntumcgpvzzxd`eiimomjfmmd\]bgton``bbbfghhbdfhc[[`pmncghfhifdhgaa``_Z\pprfotuupkefea\VUZXXnpqdq|~{qoidYTWVVXXXnooimw}ukmmhVR[[YVSWopqefpxmffhiXR^_WRPUmon^agmgdcehVPYYWUSXpqo\cdc`aabh[Ya_VVY\opoWahb]_cac]cccZZZ\finU[df_aeba\]did\[\agqUVchbcb__efehgjpoonqWXfma`d^conffb`ecntrjntsb_d^akid`]ZXYlts����rhi_`igcXSVTXluq||zxzvtd^dd]VTVVXiuvvtqm{~yjddaZWXXXYfv�ononpqpmkjf_Z]^]^m}nilooonoponmheghho{zb |
Je reconnais ne pas avoir compris la documentation Python concernant les Buffers, je suis d'ailleurs preneur de documentation à ce sujet. Idéalement, je souhaiterai en premier lieu obtenir un array de int8, qui me permettent de valider la concomitance de ce que je récupère avec ma base SQL.
Quelques informations glanées sur le net suggèrent de passer par des string:
A supposer que cela serve, comment récupérer mes entiers depuis ce str?
Pour l'instant, je limiterai mes questions à cela. Mes investigations m'ont amené à considérer l'utilisation de la libraire pandas pour encoder mes données en hdf5, mais pour l'instant, je n'en suis pas encore là.
Bonne après-midi et merci à ceux qui se pencheront sur mon problème.
Clément.