J'ai un ensemble d'images de formation, pour chacun desquels j'ai Les vecteurs de fonctionnalité à enregistrer sont de taille variable par image et sont donc celles avec des tailles non maximales sont rembourrées avec des zéros pour unifier toutes les tailles de vecteurs. La taille maximale est actuellement de 500 rangées x 32 cols; Ainsi, 16K fonctionnalités. P>
Voici les options que je pourrais atteindre jusqu'à présent; P>
existe-t-il une méthode courante pour manipuler les vecteurs de fonctionnalités sur les téléphones Android? Cela englobe-t-il l'une des méthodes ci-dessus? Si non, pouvez-vous offrir des directives sur la manière de mettre en œuvre une telle solution de stockage? P>
Merci. p>
Enregistrer code> pour
(non orb). De plus, je ne sais pas si vous enregistrez des fonctionnalités utilisant les options de stockage de fichiers d'OPENCV serait la plus optimale de mémoire mémoire pour les téléphones Android, étant donné que le fichier XML serait trop grand pour charger. LI>
3 Réponses :
Je suggérerais de stocker les vecteurs de fonctionnalités comme des images pour avoir une représentation simple et compacte. Vous pouvez même utiliser une compression non destructive telle que PNG pour minimiser la taille du fichier. P>
À mon avis, le moyen le plus universel de stocker les claviers est de les convertir d'abord en un format de données-interchange comme JSON.
Après avoir capable de faire cette conversion, vous avez beaucoup de flexibilité pour la stocker. JSON est facilement converti en chaîne et / ou envoyé via une connexion réseau. P>
avec openc c ++ Vous êtes en mesure de stocker des données comme YAML , mais qui n'est pas disponible pour Android. P>
Pour analyser JSON en Java Vous pouvez Utilisez cette optique facile à utiliser bibliothèque google gson . p>
et voici ma première tentative de faire exactement que: p>
Je vois que vous avez envisagé d'utiliser la base de données Android SQLite: P>
Mon choix actuel consiste à opter pour une base de données SQLLITE, ayant une table avec deux cols; ID et fonctionnalité (comme fréquemment suggéré en ligne); Tabiner toutes les fonctionnalités de 16K dans SQLLITE. Cela semble plutôt intensif du stockage téléphonique, mais c'est la solution la plus raisonnable que je puisse trouver. P> blockQuote>
là est fort> un moyen d'enregistrer et de récupérer
matofkeyypoint code> à la base de données SQLite avec une efficacité raisonnable. p>
Utilisation de la base de données a l'avantage de ne pas avoir besoin de demander une autorisation de stockage externe en écriture de l'utilisateur (bien que cette autorisation soit nécessaire pour une autre des fonctions de vos applications). P>
Il existe une solution complète Android, avec code Java qui peut être trouvé dans Cette réponse de Stackoverflow répond . P>
Vous trouverez ci-dessous une description de ce qui se passe dans le code de cette réponse ... em> p>
MATOFKEYPOING à Ayte [] et certains attributs h3>
Pour enregistrer dans la base de données, vous devez enregistrer dans un objet
octet [] code>. Utilisation de la méthode
MATOFKEYPOINKOINT.GET () CODE>, vous pouvez obtenir un
float [] peuplé [] code>. Ensuite, en utilisant
bytebuffer.putfloat () code>, vous pouvez faire boucler tous vos flotteurs, enfin obtenir un octet
peuplé [] code> à l'aide de
bytebuffer.array () code>. p>
Vous devez également enregistrer quelques attirbutes
matofkeyypoint.Rows () code>,
matofkeyypoint.cols () code> et
matofkeypoint.type () code> à Votre base de données, ainsi que le
blob code> de
octet [] code>. p>
Blob de la base de données (octet []) à MatofkeyPoint h3>
Pour reconstituer votre
MatofkeyPoint Code> de la base de données, vous devez d'abord créer un
float [] code> hors de votre blob. Utilisez
bytebuffer.wrap (blob) code>, puis exécutez
bytebuffer.asfloatbuffer () code>, et enfin
floatbuffer.get () code> avec un nouveau < code> flotteur [] code>. p>
Maintenant que vous avez
YourflatArray Code> Vous exécutez
MatofkeyPoint.Create (lignes, cols, type) code>, ces trois choses provenant de l'enregistrement de base de données. Enfin, vous exécutez
matofkeyypoint.put (0, 0, Vecfloatarray) code>. P>