Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Actualités


Index du Forum » Actualités » Concours de démos graphiques en Python
Lephenixnoir Hors ligne Administrateur Points: 17786 Défis: 142 Message

Concours de démos graphiques en Python

Posté le 21/04/2020 18:26

Salut à tous, chers programmeurs et avides de toutes choses stylées sur calculatrices. Vous êtes tous tombés au bon moment, car il est temps de jouer avec les nouveaux modules de dessin en Python !

Casio a récemment annoncé puis publié trois modules de rendu graphique en Python pour Graph 35+E II et Graph 90+E :
matplotl, une version minimale de matplotlib très fidèle à l'original.
turtle, une reproduction en règle parfaitement identique à l'original.
casioplot, un module bas-niveau pour modifier les pixels à l'écran avec des performances très intéressantes.

On a déjà commencé à parler de ces modules en détails dans un article précédent, et on va continuer dans le futur. Pour l'instant, on peut résumer les nouveautés en quelques points !

• Les modules matplotl et turtle sont très conformes aux originaux, ce qui permet aux mêmes programmes de marcher sur calculatrice et sur PC. D'autres constructeurs comme Numworks ont fait ce choix, et sur Planète Casio on trouve ça génial.
• Le module casioplot permet de faire du dessin très précis. Les performances ne permettent pas de faire du dessin en temps réel, mais on peut déjà faire pas mal de choses !
• Malheureusement, on n'a toujours rien pour interagir avec le clavier (à part quelques essais avec AC/ON) donc on peut pas faire de jeux.

Ce qui nous amène au concours d'aujourd'hui. Pour lancer tout le monde sur le chemin de ces bibliothèques et découvrir tout ce qu'on peut faire de stylé avec, je vous propose un concours de démos graphiques accessible à tous !


Qu'est-ce qu'une démo graphique ?

Une démo graphique, c'est un petit programme qui affiche des choses stylées à l'écran, pour démontrer les capacités graphiques d'une plateforme. Ça peut être des animations stylées, des choses colorées, des cubes en 3D... ça peut être une seule image, une animation, peu importe.

En gros si c'est beau et stylé, vous gagnez.

Voilà des exemples de démos graphiques que j'ai codées sur ma Graph 90+E. Celles-ci tournent en temps réel ! (Les captures ont été prises par un logiciel vidéo donc c'est bruité, ce n'est pas un effet du programme.)




Comme vous pouvez le voir, il y a plein de choses à faire, et vous pouvez vraiment vous lâcher !


Dates, fonctionnement, et lots du concours

Voilà comment ça va se passer. Vous avez jusqu'au Samedi 9 Mai (un peu plus de 2 semaines) pour poster vos participations sur ce sujet. Pour participer, vous devez :

Poster sur ce sujet une image ou animation de votre démo. Votre démo doit fonctionner sur Graph 35+E II ou sur Graph 90+E. Dans les deux cas, vous pouvez prendre une capture avec Screen Receiver.
Si vous n'y arrivez pas, envoyez-moi le code par message privé et je vous enverrai l'image ou l'animation en retour. Vous pourrez alors poster. Ne partagez pas votre code sur ce sujet !

Si vous n'avez pas de Graph 35+E II ou de Graph 90+E, vous pouvez utiliser les émulateurs officiels qui disposent d'une version d'essai de 90 jours. Si même ça vous est inaccessible (parce que vous avez déjà utilisé la période d'essai, par exemple), vous pouvez m'envoyer le code d'un programme compatible Graph 35+E II ou Graph 90+E et je le lancerai pour vous.

À la fin du concours, vous devrez partager votre code et on discutera des techniques utilisées, des optimisations, et de la créativité dont vous aurez fait preuve pour abuser des mécanismes de tracé pas prévus pour ça.

Les meilleures participations seront classifiées par un petit jury (jusqu'à 5 membres hors participants) pour élire les démos les plus impressionnantes.

Il y a un lot à gagner, l'auteur·e de la meilleure démo graphique recevra une clé USB multi-émulateurs à usage à vie. Cette clé USB contient les trois émulateurs fx-92 Spéciale Collège+, Graph 35+E II et Graph 90+E, tous utilisables dans leur version complète sans limite de durée pourvu que la clé USB soit branchée à l'ordinateur. Ce système permet d'utiliser les émulateurs sur plusieurs ordinateurs sans difficulté !

Les deux émulateurs de Graph sont dans les premières versions Python. Mais pas d'inquiétude, car cette clé USB peut être mise à jour avec les nouvelles versions de l'OS ! Comme annoncé durant la tournée pédagogique en ligne ce mois-ci, la mise à jour avec les bibliothèques graphiques est disponible pour les clés USB d'émulation. Casio a pensé à tout !


Alors évidemment, contrairement au CPC ce petit concours repose sur un système de notation assez subjectif. J'espère que tout le monde saura prendre le lot comme une incitation à participer, avec le recul suffisant pour éviter les mauvaises surprises à la fin !


À vos calculatrices !

Je compte sur vous pour envoyer le feu avec ces nouveaux modules. Si les participations sont vraiment stylées, on pourra en mettre en page d'accueil !

Je déclare le concours de démos graphiques Python ouvert !

Fichier joint


Précédente 1, 2, 3, 4, 5, 6, 7 Suivante
Lephenixnoir Hors ligne Administrateur Points: 17786 Défis: 142 Message

Citer : Posté le 29/04/2020 12:16 | #


On n'a rien de tel à ma connaissance. Je pense que le wiki est un bon plan, n'hésite pas à lancer ce que tu as !
Dark storm Hors ligne Membre d'honneur Points: 11040 Défis: 176 Message

Citer : Posté le 07/05/2020 02:41 | # | Fichier joint


Bon, j'ai toujours pas de quoi prendre un screenshot on calc, mais je me suis démerdé. Le gif est à peu près à vitesse réelle sans overclock.


Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Critor En ligne Administrateur Points: 1780 Défis: 18 Message

Citer : Posté le 07/05/2020 07:51 | #


Superbe, merci !
Et vitesse impressionnante.
Shadow15510 Hors ligne Administrateur Points: 4361 Défis: 16 Message

Citer : Posté le 07/05/2020 08:39 | #


On pourrait faire un jeu de sous-marin… Je vois le gameplay d'ici, mais sans les touches, c'est mission impossible…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
Dark storm Hors ligne Membre d'honneur Points: 11040 Défis: 176 Message

Citer : Posté le 07/05/2020 12:12 | # | Fichier joint


Les sources sont en PJ du coup
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Critor En ligne Administrateur Points: 1780 Défis: 18 Message

Citer : Posté le 07/05/2020 21:39 | #


Dark storm a écrit :
Les sources sont en PJ du coup


Merci, super bien codé, ça marche nickel sur les autres modèles en remplaçant le import casioplot par ma bibliothèque de compatibilité graphique plypynet en cours de développement; rien eu à changer d'autre :


Dernière amélioration de la bibliothèque : refonte avec correction ralentissement lorsque exécuté sur la plateforme ciblée par le code, donc ici sur Graph 90+E.
La NumWorks fait tourner le radar un peu plus rapidement, la Nspire un peu plus lentement.
Et la TI-83 est une véritable catastrophe à côté, vous n'avez pas idée...
Shadow15510 Hors ligne Administrateur Points: 4361 Défis: 16 Message

Citer : Posté le 08/05/2020 09:21 | #


Donc le Python de la Numworks, en plus d'être le plus complet et aussi le plus rapide… ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
Critor En ligne Administrateur Points: 1780 Défis: 18 Message

Citer : Posté le 08/05/2020 09:39 | #


Le contexte de la bibliothèque n'est pas l'idéal pour établir un classement par performances, vu que :
- le modèle ciblé par le code (ici Graph 90+E) est privilégiée avec ses appels graphiques qui contournent les diverses fonctions de correction de compatibilité
- et même les autres modèles ont leurs appels graphiques qui passent par des fonctions de compatibilité différentes et plus ou moins nombreuses

Il n'empêche que si dans ce contexte qui lui est défavorable la NumWorks est plus rapide, c'est que c'est effectivement la plus rapide, et qu'un script Python lui étant dédié irait encore plus vite.

Si tout va bien, je pense sortir une première version de la bibliothèque de compatibilité aujourd'hui.
Shadow15510 Hors ligne Administrateur Points: 4361 Défis: 16 Message

Citer : Posté le 08/05/2020 09:42 | #


D'accord, merci !
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
Critor En ligne Administrateur Points: 1780 Défis: 18 Message

Citer : Posté le 08/05/2020 14:51 | #


Voilà ce que donne actuellement la bibliothèque de compatibilité PolyPyNet que je viens de sortir dans une première version ( https://tiplanet.org/forum/archives_voir.php?id=2620335 ) avec le script de démo de radar partagé plus haut :


Non non, la TI-83 Premium CE Edition Python n'a pas freezé, soyez un peu patients.

Mis à part pour les extrêmes, je précise que ce n'est pas représentatif des performances Python de chaque machine.
La Graph 90+E est en effet avantagée vu que quasiment pas ralentie par la couche de compatibilité. Alors que les autres modèles se tapent une ou plusieurs opérations intermédiaires de correction à chaque appel graphique.

J'ai bien évidemment crédité et lié le script en description.
Lephenixnoir Hors ligne Administrateur Points: 17786 Défis: 142 Message

Citer : Posté le 08/05/2020 15:27 | #


Sympa la bibliothèque de compatibilité ! C'est un peu dommage qu'il faille en arriver là, mais au moins on peut faire des interfaces communes
Kikoodx Hors ligne Membre Points: 2113 Défis: 11 Message

Citer : Posté le 08/05/2020 18:48 | # | Fichier joint


J'ai failli oublier de poster
Loin du niveau de ce qu'on fait Darks et Hackcell mais j'en suis quand même plutôt content.
Téléchargement en pièce jointe, transférer tous les .py sur la calto et lancer menu.py. De mémoire, tron.py fonctionne sur monochrome mais est beaucoup trop rapide.
Si vous êtes masochiste, voici le code : https://gitea.planet-casio.com/KikooDX/demo-04-20/
Critor En ligne Administrateur Points: 1780 Défis: 18 Message

Citer : Posté le 08/05/2020 21:19 | #


Lephenixnoir a écrit :
Sympa la bibliothèque de compatibilité ! C'est un peu dommage qu'il faille en arriver là, mais au moins on peut faire des interfaces communes


Merci.

Personnellement, j'étais pour que les constructeurs adoptent un standard, ou se mettent d'accord sur des spécifications communes pour set_pixel() et compagnie.

Malheureusement ce ne fut pas le cas, donc il faudra en passer par là pour obtenir facilement une compatibilité globale des scripts graphiques.

Sauf bien sûr pour les dévs qui prendront eux-mêmes le temps de faire et fournir différentes versions de leurs scripts pour différents modèles. Ce sera sans doute mieux en terme de performances, même si franchement à une exception près que l'on va vite mettre de côté puisque c'est un cas particulier, les performances des scripts Casio sur modèles non-Casio sont très correctes sur la vidéo.
Dark storm Hors ligne Membre d'honneur Points: 11040 Défis: 176 Message

Citer : Posté le 09/05/2020 15:42 | #


On m'a demandé de poster le bout de code que j'ai fait sur Bad Apple, malgré que je n'ai pas fini et qu'en plus je sois parti dans une direction foireuse.

Bref, c'est en PJ, par contre ça demande un peu d'adaptation de votre coté.

TL;DR

Un lien vers le zip est en bas de ce message. Vous pouvez transférer demo.py ainsi que les fichiers présents dans data (bien conserver le dossier sur la calculatrice). Y'a peut-être pas la place pour tout, donc transférerez les dans l'ordre des numéros (ça correspond à des images).


Comment ça fontionne ?

1. Convertir la vidéo en images

Avec ffmpeg, commencez par réduire la vidéo en taille, la passer en noir & blanc, puis la convertir en images. Faites gaffe aux ratios, etc.
ffmpeg -i input.mp4 -s 123x456 -f lavfi -i color=gray:s=123x456 -f lavfi -i color=black:s=123x456 -f lavfi -i color=white:s=123x456 -lavfi threshold images/img_%d.png

-i input.mp4 : le fichier source
-s 123x456 : redimensionner à 123×456 pixels
-f lavfi -i color=gray:s=123x456 : défini le seuil de couleur à grey, pour un format de 123×456
-f lavfi -i color=black:s=123x456 : défini la couleur à appliquer si on est sous le seuil, pour un format de 123×456
-f lavfi -i color=black:s=123x456 : défini la couleur à appliquer si on est au dessus de seuil, pour un format de 123×456
-f lavfi threshold : applique le filtre threshold avec les 4 sources définies précédemment
images/img_%d.png : enregistre la sortie en tant qu'images PNG dans le dossier images

2. Convertir les images en données python

L'idée de base, c'est qu'il ne faut afficher que le delta de pixels qui change entre deux frames. La calculatrice n'étant pas assez rapide pour afficher chaque frame séparément. Et aussi de ne pas tout charger en mémoire d'un coup.

On a donc un script demo_helper.py qui va analyser les images qu'on a, puis générer du code qui sera transféré directement sur la calculatrice.
Pensez à modifier dans ce script les paramètres :
- X : la largeur de vos images
- Y : la hauteur de vos images
- folder : le dossier où aller chercher vos images
- Tout en bas, Image.open : potentiellement le nom des images

Les données générées sont des tableaux de tuples : [(l, x1, x2, c), …] où chaque tableau représente une image, chaque tuple contient les pixels à mettre à jour, à la ligne y, du pixel x1 au pixel x2, avec la couleur c.

L'idée c'est de tout mettre dans un générateur ce qui fait que, théoriquement, on charge moins de données en mémoire. D'où les yield. Mais à priori c'était une assertion foireuse, donc bon…

Bref, le script demande deux paramètres : l'ID de la première image à traiter, et le nombre. Le code suivant va donc traiter les images 12 à 41 et mettre ça dans un fichier :
python demo_helper.py 12 30 > data/d12_41.py


3. Création du lecteur

On a maintenant un dossier data avec des scripts qu'il reste à charger au fur et à mesure, et afficher.

On vient donc copier le fichier de base base_demo.py en tant que demo.py, puis on exécute dessus le script demo_make.py
Il va s'occuper de charger les données au fur et à mesure à coup d'import, puis appeler la fonction draw(). Génération de code à l'arrache, m'enfin.

Encore une fois, le script demande 3 argument : start, stop, step (les valeurs qui iront dans le range). Ici on commence par le fichier data/d1_10.py, puis data/d11_20.py, etc. jusqu'à 100.
python demo_make.py 1 100 10 >> demo.py


4. Tranférer le tout sur la calto

Classique, on tranfère le player (demo.py) et les données (data/*.py) : cp demo.py data/* /vers/la/calculatrice


Addendum

Parce que c'est relou à faire, j'ai fait un script pour mon shell (fish), appelé make.fish. En entrée on configure le nombre d'images par blob de données (c) et les images jusqu'où on va (e), il se charge de faire le reste. Ça peut s'adapter en bash, mais je suis plus habitué à fish, donc à vous de faire le port.

Addendum 2

J'oubliais : pensez à mettre au moins une image blanche manuellement en tant que première image pour que la première passe puisse caculer les pixels noirs à afficher.

Bref, le zip est >>> ICI <<< (30 jours seulement, si ça intéresse du monde plus tard je pourrais le mettre ailleurs)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 17786 Défis: 142 Message

Citer : Posté le 09/05/2020 16:07 | #


Merci pour le partage ! Tu as encore la petite vidéo ?
Dark storm Hors ligne Membre d'honneur Points: 11040 Défis: 176 Message

Citer : Posté le 09/05/2020 16:10 | #


Heu… Nope. Si j'en fais une c'est à coup de pygame, mais du coup je garantis pas du tout l'authenticité de la vitesse.

Ajouté le 09/05/2020 à 16:12 :
J'ai modifié le message, y'a ce qu'il faut pour tester dans l'archive.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Dark storm Hors ligne Membre d'honneur Points: 11040 Défis: 176 Message

Citer : Posté le 09/05/2020 20:08 | # | Fichier joint


Bon, avec pygame ça donne ça. On est pas trop loin des perfs overclockées je pense, mais j'ai pas vérifié oncalc.


Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 17786 Défis: 142 Message

Citer : Posté le 09/05/2020 20:38 | #


Merci pour l'animation !

Le concours de démos graphiques est maintenant fini. Je vais faire un résumé, et puis il nous faut un jury. Si je suis tout seul à évaluer, ça sera un peu triste, donc quelqu'un qui n'a pas participé souhaite juger, déclarez-vous

Noter n'est pas très difficile, si on s'organise bien les résultat seront clairs et publiés le week-end prochain.
Tbit Hors ligne Membre Points: 8 Défis: 0 Message

Citer : Posté le 09/05/2020 20:46 | #


Alright, it was a fun competition for sure
Here's the link to my entry, should anybody be interested, it runs on Graph 35+E II as well. Thanks again to Lephe for testing and capturing my entry
Lephenixnoir Hors ligne Administrateur Points: 17786 Défis: 142 Message

Citer : Posté le 09/05/2020 20:50 | #


Voici la liste des participations. Pour les jurés, votre job est de les ordonner de la meilleure à la moins bonne. Prenez en compte au moins les critères suivants dans votre notation :

• Présence d'animation et fluidité de l'animation
• Prouesse technique (repousse un peu les limites de ce que la calto peut faire)
• Aspect classe de la démo

Voici les participations :

Tore en raytracing par Tbit : #175593 (code source)
Cardiogramme par Hackcell : #175625
Matrix par Dark Storm : #175635 (capture animée)
Radar par Dark Storm : #175854

Animations réalisées mais pas classées :

Rotation 4D par Lephenixnoir : #175493
Bad Apple par Dark Storm : #175915 (capture animée, capture vidéo)
Massena Hors ligne Rédacteur Points: 1239 Défis: 6 Message

Citer : Posté le 09/05/2020 21:44 | #


Je ferais partie du jury
Peace was never an option. - Untitled goose game, 2019
Précédente 1, 2, 3, 4, 5, 6, 7 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
Pour coloriser votre code, cliquez ici.
Sinon cliquez sur le bouton ci-dessous.
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 66 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd