π
<-
Chat plein-écran
[^]

[Librairie] Compress - Compressez vos données/images !

Pour TI-Nspire OS 3.0 ou ultérieur.

[Librairie] Compress - Compressez vos données/images !

Message non lude Morhaus » 01 Juin 2013, 17:49

Bonjour les gens.

Le format d'image par défaut mis à disposition par TI ne dispose d'aucune compression et résulte en des classeurs lents à charger et très importants en taille. Ce constat m'a amené à écrire ma propre librairie, nommée compress, qui permet de compresser des images sur votre ordinateur pour les décompresser en Lua sur une calculatrice.

Décompresser en Lua peut sembler exagéré, mais c'est cependant beaucoup plus efficace que la seule compression du .tns. Sur mes images, j'observe un poids de fichier réduit de 600% et une vitesse d'exécution améliorée de 50%.

Actuellement, seuls deux algorithmes de compression/décompression sont disponibles : RLE (Run-length encoding) et LZW (Lempel-Ziv-Welch). RLE a tendance à produire des fichiers plus légers mais plus lents d'exécution que LZW.

Version 0.0.4
Lien de téléchargement : https://mega.co.nz/#!owxVXbAQ!MPb4JRfuZbVcEriqC6IqsUbJRjdcQw9CMYDzvEuwahc
Changelog : http://tiplanet.org/forum/viewtopic.php?f=19&t=12084&p=144084#p144084

Cette version nécessite Python 2.7.5, ImageMagick et si vous souhaitez convertir les fichiers .lua en .tns, l'exécutable luna.exe à la racine du dossier "compress" ou dans votre variable d'environnement PATH.

Pour voir toutes les options fournies par le programme :
Code: Tout sélectionner
python convert.py -h


Version 0.0.3
Lien de téléchargement : https://mega.co.nz/#!UxYBAZQR!BfvEC079-PEB0j98wG58RGjTjJRrt4GDA5xsJMV1KYY
Changelog : http://tiplanet.org/forum/viewtopic.php?f=19&t=12084&start=10#p143091

Version 0.0.2
Lien de téléchargement : https://mega.co.nz/#!w8hTnIJB!SDoEbCshxMgHZbV3bNXFcxCMy-0d9H3iK7fUiFTpoZ8
Changelog : http://tiplanet.org/forum/viewtopic.php?f=19&t=12084#p142325

Version 0.0.1
Lien de téléchargement : https://mega.co.nz/#!UwhnDRAJ!Tuad9XC01 ... MElQwSm8GQ
Description ci-dessous.

La librairie se situe dans src/compress.lua. Vous pouvez utiliser les packages lzw.py, rle.py, lua.py et image.py pour compresser vos images ou vos données. Des exemples d'utilisation se trouvent dans example.py et src/example.lua.
Attention cependant, image.py recquiert le package PIL. Si vous disposez déjà de Python 2.7.3/3.X, vous pouvez l'installer via "pip install pillow".

Roadmap :
- script exécutable en ligne de commande pour faciliter la compression.
- génération d'un fichier images.lua qui contient les données des images compressées.
- utiliser ImageMagick plutôt que PIL.

N'hésitez pas à partager vos optimisations ! L'implémentation actuelle de LZW génère des fichiers encore trop importants, ce qui est notamment dû au fait que la table des entrées n'est jamais remise à zéro.
Dernière édition par Morhaus le 19 Juin 2013, 10:58, édité 5 fois.
Avatar de l’utilisateur
Morhaus
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 78.1%
 
Messages: 19
Inscription: 16 Jan 2013, 14:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Morhaus » 06 Juin 2013, 13:47

Nouvelle version !

Lien de téléchargement : https://mega.co.nz/#!w8hTnIJB!SDoEbCshxMgHZbV3bNXFcxCMy-0d9H3iK7fUiFTpoZ8

Changelog :
- image.py utilise à présent ImageMagick au lieu de PIL. C'est un peu plus lent, mais ça permet plus de contrôle sur le résultat. En conséquence, pour pouvoir l'utiliser, vous devrez avoir installé ImageMagick et avoir les utilitaires 'convert' et 'identify' dans votre variable PATH.
- example.py renommé en convert.py, accepte à présent des arguments en lignes de commande et peut générer des fichiers lua ou tns à partir de vos images. La génération de fichiers tns requiert d'avoir installé luna et d'avoir l'exécutable 'luna' dans sa variable PATH.
- lzw.decompress et rle.decompress (lua) prennent à présent une table lua pour troisième paramètre facultatif, qui permet d'insérer un header au résultat à moindre coûts.

Exemples d'utilisation :
Afficher le message d'aide
Code: Tout sélectionner
python convert.py -h


Convertir toutes les images dans img/ en fichiers lua dans lua/
Code: Tout sélectionner
python convert.py img/* -o lua/


Convertir toutes les images gif et png dans img/ en fichier tns dans le même répertoire, avec une palette restreinte à 128 couleurs (par défaut 256)
Code: Tout sélectionner
python convert.py --tns -c 128 img/*.png img/*.gif


Si le chemin donné cible au moins un fichier autre qu'une image, une erreur sera lancée.
Exemple :
Code: Tout sélectionner
python convert.py passwords.txt
Avatar de l’utilisateur
Morhaus
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 78.1%
 
Messages: 19
Inscription: 16 Jan 2013, 14:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Bisam » 10 Juin 2013, 13:29

Je n'ai pas l'occasion de tester, mais ça a l'air prometteur.
Bon courage pour la suite.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Morhaus » 11 Juin 2013, 16:28

J'ai réalisé une conversion du pack d'annales maths pour le bac 2013 en utilisant cette librarie, une jolie démonstration de son potentiel :)
Disponible à l'adresse : archives_voir.php?id=16979
Pack originel : archives_voir.php?id=15922.
L'ensemble des classeurs fais un peu moins de 2 fois la taille du pack originel, ce qui est un assez bon ratio. Cela s'explique notamment par le fait que les images converties n'étaient composées que de 3 couleurs.
J'ai pu constater en convertissant le pack que le module lzw.py était très mal optimisé. J'ai pas mal amélioré sa vitesse d'exécution mais ça reste très lent. Je mettrai à jour l'archive avec la nouvelle version dès que je trouverai le temps.
Avatar de l’utilisateur
Morhaus
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 78.1%
 
Messages: 19
Inscription: 16 Jan 2013, 14:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Excale » 11 Juin 2013, 16:47

Personnellement, la nspire refuse de m'ouvrir les images (insufficient memory), même avec la RAM d'une CX.
Avatar de l’utilisateur
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 3.9%
 
Messages: 2955
Images: 3
Inscription: 10 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Morhaus » 11 Juin 2013, 17:05

Sous quel OS es-tu ?
Je n'ai pu tester que sous l'OS 3.2 et je n'ai rencontré aucun problème à l'ouverture des plus gros fichiers. Le seul inconvénient est la lenteur de l'explorateur de fichier qui est inévitable sous 3.2.
Avatar de l’utilisateur
Morhaus
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 78.1%
 
Messages: 19
Inscription: 16 Jan 2013, 14:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Excale » 11 Juin 2013, 17:11

J'ai testé avec l'OS 3.2 sur emulateur (pas sur le logiciel PC de TI pour ordi).
Avatar de l’utilisateur
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 3.9%
 
Messages: 2955
Images: 3
Inscription: 10 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Morhaus » 11 Juin 2013, 17:20

La décompression LZW occupe beaucoup de mémoire car elle stocke l'ensemble des chaînes de caractères rencontrés dans une table, sans jamais la remettre à zéro. C'est un défaut de l'outil de compression et de décompression dont je n'ai pas eu le temps de m'occuper. Mais ce compromis peut aussi permettre d'accélérer la décompression sur la calculatrice.

Les classeurs (ou du moins ceux que j'ai testé) fonctionnent tout de même sur TI-Nspire CX CAS en 3.2. C'est le seul modèle et OS pour lequel j'ai pu programmer et optimiser, il est donc plus que probable de rencontrer des erreurs sur d'autres installations.

Edit: j'ajoute que j'ai aussi pu tester des images beaucoup plus conséquentes en 256 couleurs, avec des tailles de fichier avoisinant les 200ko, et je n'ai rencontré aucun problème de mémoire. Cependant, à ce niveau là, la compression ne produit plus de résultats satisfaisants (LZW dépasse même le poids du format sans compression) et la décompression prend alors plus de temps que l'ouverture du format sans compression.

Edit 2: j'ai fais une erreur dans la description du fichier :( je voulais bien sûr dire "compatible 3.2" et non "convertible 3.2"... est-il possible d'éditer?
Avatar de l’utilisateur
Morhaus
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 78.1%
 
Messages: 19
Inscription: 16 Jan 2013, 14:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Morhaus » 12 Juin 2013, 14:13

Après avoir essayé de réarranger les annales en classeurs (un classeur par groupe de pages), j'ai aussi pu rencontrer des problèmes de mémoire insuffisante.
J'ai donc implémenté la réinitialisation de dictionnaire à l'algorithme de LZW. Cependant, cela n'a pas réglé mon problème pour autant. Le problème venait du garbage collector et un simple collectgarbage() à la fin de chaque script a suffit à le résoudre.
La réinitialisation de dictionnaire reste cependant utile pour les plus grosses images (permet d'éviter le message "mémoire insuffisante" dans certains cas), mais implique une perte en vitesse et un gain en poids de fichier.

J'ai aussi beaucoup optimisé la compression LZW, qui est à présent beaucoup plus rapide qu'auparavant, où convertir un set de 200 fichiers prenait une demi-heure...
Le lecteur d'image intégré à chaque image convertie a aussi été un peu amélioré, vous pouvez à présent déplacer l'image hors du cadre de l'écran et les touches du pavé numérique permettent de naviguer rapidement à chaque coin de l'image.
L'utilitaire en ligne de commande convert.py prend désormais deux nouveaux arguments facultatifs, -l [N] qui désigne la taille maximale du dictionnaire avant qu'il soit remis à zéro et --rle qui précise d'utiliser la compression RLE au lieu de LZW (par défaut).
La librairie en lua gagne aussi une nouvelle fonction, lzw.decompress2, qui sert dans le cas où la taille maximale du dictionnaire est précisée. lzw.decompress est utilisé dans le cas par défaut.

Je mettrai à jour le lien de téléchargement dès que possible.
Avatar de l’utilisateur
Morhaus
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 78.1%
 
Messages: 19
Inscription: 16 Jan 2013, 14:04
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: [Librairie] Compress - Compressez vos données/images !

Message non lude Adriweb » 12 Juin 2013, 14:21

Bon travail :)
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.2%
 
Messages: 14613
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Suivante

Retourner vers Nspire-Lua

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1347 utilisateurs:
>1315 invités
>27 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)