Bonjour,
J'ai voulu faire un programme qui calcule le nombre de pixels en couleurs, et nombre de pixels en noir et blanc sur une image.
Assez simple:
Il charge une image
Il compare les valeurs r,g,b et il affiche le nombre de couleur/noir et blanc qu'il a compté.
J'utilise Python3 sur Ubuntu 14.04 LTS 64bits, avec le package suivant de PySFML:
Package: python3-sfml
Priority: optional
Section: universe/python
Installed-Size: 1073
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org>
Architecture: amd64
Source: python-sfml
Version: 1.5.1.is.1.3+dfsg-1build2
Provides: python3.4-sfml
Depends: libc6 (>= 2.14), libgcc1 (>= 1:4.1.1), libsfml-audio2 (>= 2.1), libsfml-graphics2 (>= 2.1), libsfml-network2 (>= 2.1), libsfml-system2 (>= 2.1), libsfml-window2 (>= 2.1), libstdc++6 (>= 4.1.1), python3 (>= 3.4~), python3 (<< 3.5)
Filename: pool/universe/p/python-sfml/python3-sfml_1.5.1.is.1.3+dfsg-1build2_amd64.deb
Size: 245558
MD5sum: 148b0c85f6df19774efb77e3bb4fdef0
SHA1: a48fe0b0ded426fd53e0b6b59809f9984f082e48
SHA256: 546c1f43ce23412f9ad65e9e467a79213ab870f9ee2cd1182065b4a2ed5500f8
Description-en: Simple and Fast Multimedia Library - Python 3 Bindings
SFML is an modern multimedia library offering a wide range
of subsystems useful to produce an multimedia application.
It offers OpenGL integration for hardware accelerated Graphics,
Windowing and input support, audio and network facilities and
supports besides GNU/Linux MS Windows and Mac OS X, too.
.
This package contains the Python 3 bindings for SFML.
Description-md5: 403dc02a5b8bdf526afffa2f14af877e
Homepage:
http://www.python-sfml.org/Bugs:
https://bugs.launchpad.net/ubuntu/+filebugOrigin: Ubuntu
(Si il existe une version + a jour que celle des dépôts, je veux bien tester, seulement le ppa du site officiel ne contient pas de version pour Ubuntu 14.04 LTS)
Mon programme commence a prendre environ 2Go de RAM, pour un petit script en console qui ne fait que charger quelques images, donc je me suis dit: Fuite de mémoire.
J'ai fait des tests et voici ce que ça donne:
Créer un sf.Image et le delete → Pas de soucis niveau ram.
Créer un sf.Color et le delete → Pas de soucis niveau ram.
En supposant que mon sf.Image s'appelle img
Si j'accède a img[0,0] ou img[(0,0)] un certain nombre de fois: Fuite de mémoire.
Je me suis dit qu'il fallait peut être supprimer le sf.Color crée, alors j'ai fait:
c = img[0,0]
del c
En boucle, et pareil, fuite de mémoire. (testé depuis le cli) (au bout de 150000 tours ou + environ, on prends des centaines de mo de RAM, alors que l'objet devrait être supprimé et ne plus consommer de ram)
Pour résumer: L'accès a img[x,y] ou img[(x,y)] me cause une fuite de mémoire, et vu que j'y accède souvent ça me prends des quantités de ram assez abominables !
Est-ce que ce bug est connu? Est-ce qu'il existe un autre moyen d'utiliser cette fonction (ou un équivalent) sans causer de fuite de mémoire? Une autre façon de coder en Python qui va fonctionner?
Sinon y a t-il une solution alternative, une mise a jour de PySFML qui résous ce bug? (si ma version n'était pas a jour) Etc...
Merci d'avance