10:22 <debnet> Tiens j'ai une question d'optimisation à vous soumettre.
10:22 <debnet> Je dois remplacer un très grand nombre de couleurs dans une image particulièrement large.
10:22 <debnet> Je me suis naïvement dit "faisons ça avec numpy, ça sera efficace !"
10:23 <debnet> Et en fait pas tant que ça, il faut environ 30 mn pour remplacer toutes les couleurs dont j'ai besoin dans le fichier.
10:23 <debnet> Est-ce que vous croyez qu'il y a moyen d'optimiser ça ?
11:08 <asyd> debnet: je suis pas sur de comprendre, une imaeg, au sens png tout ca ?
11:08 <debnet> Yep!
11:13 <misc> cad, remplacer les couleurs ?
11:14 <asyd> debnet: https://docs.wand-py.org/en/0.6.12/guide/fx.html#fx ?
11:14 <debnet> @misc En gros tous les pixels (120, 130, 70) je veux les transformer en pixels (30, 40, 60) par exemple.
11:14 <debnet> Et cela avec environ un milliers de couleurs différentes.
11:15 <debnet> Plutôt 8 milliers actuellement.
11:16 <entwanne> tu parles de grosse image, ça vaut peut-être le coup de tenter de la découper pour paralléliser ?
11:17 <debnet> Ah ouais pas con, faire un puzzle.
11:25 <asyd> elle fait quelle taille l'imagine d'origine ?
11:26 <debnet> 9216 x 6144 actuellement.
11:28 <entwanne> Y a peut-être quelque chose à faire au niveau du format d'image, genre utiliser des couleurs indexées pour éviter d'avoir à parcourir tous les pixels ?
11:29 <debnet> Peut être mais là ça dépasse ma connaissance des librairies d'images.
11:29 <discord_afpy> <dancergraham> Si rien d'autre ne change il est peut-etre plus rapide et simple de lire un fichier et écrire l'autre directemen t - c'est quel format ?
11:29 <debnet> C'est du Bitmap.
11:31 <discord_afpy> <dancergraham> J'ai recemment fait ca avec PIL
11:31 <discord_afpy> <dancergraham>
11:31 <discord_afpy> <dancergraham> ```python
11:31 <discord_afpy> <dancergraham> from PIL import Image
11:31 <discord_afpy> <dancergraham>
11:31 <discord_afpy> <dancergraham>
11:31 <discord_afpy> <dancergraham> def make_background_transparent(png_filename):
11:31 <discord_afpy> <dancergraham> """Open a png file and make the background transparent.
11:31 <discord_afpy> <dancergraham> save it with a new name.
11:31 <discord_afpy> <dancergraham> """
11:31 <discord_afpy> <dancergraham> image = Image.open(png_filename)
11:31 <discord_afpy> <dancergraham> image = image.convert("RGBA")
11:31 <debnet> Oulà évite.
11:31 <debnet> Ca spamme IRC.
11:31 <discord_afpy> <dancergraham> aiie sorry
11:31 <debnet> Donne un pastebin à la place.
11:31 <entwanne> et y a pas le code complet
11:31 <discord_afpy> <dancergraham> hang on ...
11:32 <discord_afpy> <dancergraham> https://gist.github.com/dancergraham/0fe1e129cc1a0c91a819d5ae663529a1
11:40 <discord_afpy> <dancergraham> Construire peut-etre un arbre (nested dict) `new_color = color_mapping[old_red][old_green][old_blue]` pour éviter de parcourir plusieurs fois l'image - ca doit pouvoir se faire avec des masks numpy aussi un peu de la meme maniere ..?
11:41 <entwanne> Je pense pas que son algo initial parcourait plusieurs fois l'image, j'imagine qu'il a une sorte de dictionnaire ancienne couleur → nouvelle couleur et qu'il l'applique à chaque pixel
11:42 <debnet> Pour être honnête, voici ce que je fais.
11:44 <debnet> https://wyz.fr/7Z-CA
11:44 <debnet> Pour information, il y a environ 1800 comtés contenant chacune entre 3 et 12 baronnies.
11:45 <debnet> (Oui c'est un coloriage de carte)
11:45 <debnet> Sur une machine un peu ancienne, ça prend environ 30 mn.
11:46 <discord_afpy> <dancergraham> C'est peut-etre plus rapide de construire une fois l'ensemble du mapping dict, ensuite parcourir une fois tous les pixels en les mappant
11:47 <entwanne> comté ♥
11:47 <debnet> @entwanne Administrativement, pas le fromage malheureusement. :P
11:47 <entwanne> roh
12:09 <discord_afpy> <chadys> J'avais résolu ce type de problème il y a quelques années, avec ce qui s'appelle des LUT, un format de fichier dédié à la conversion de couleur. Ça tournait suffisamment bien pour faire de la conversion temps réel en 8K sur un flux vidéo. Mais je l'ai fait en C++ (puis en rust, pour le kiff, qui m'a donné de meilleures perf)
12:10 <debnet> Ton lien va vers une 404.
13:16 <discord_afpy> <dancergraham> Autre option - ecrire ca proprement en Python et demander a un LLM de le traduire en Rust / C / autre...
14:23 <discord_afpy> <chadys> mouais, sachant que "proprement" en python ne va pas du tout utiliser les mêmes paradigmes qu'un langage bas-niveau ou tu manipules explicitement de la mémoire, je suis vraiment pas convaincus de la pertinence d'un IA là-dedans
14:24 <misc> faut faire plusieurs sed
14:28 <asyd> debnet: ce sont des couleurs exactes que tu veux remplacer ? parce que normalement chaque pixel est associé a un index dans une palette (pour la faire courte) d
14:28 <asyd> donc normalement il suffirait de changer la couleur de cet index
14:42 <asyd> hmm ah ben ça dépends comment est générer le png, sacrebleu
15:11 <misc> mais il a un bitmap, pas un png, non ?
15:19 <asyd> ah oui
15:24 <asyd> enfin si chaque pixel a sa propre couleur je crois pas que ça soit très optimum
16:07 <discord_afpy> <Andy K (boss dreamer ou pas)> salut
16:08 <discord_afpy> <Andy K (boss dreamer ou pas)> petite question en gitlab ci et ci en général
16:08 <mdk> o/
16:08 <discord_afpy> <Andy K (boss dreamer ou pas)> Salut MDK
16:09 <entwanne> il manque la question ?
16:10 <mdk> il faut la deviner !
16:10 <discord_afpy> <dancergraham> As-tu essayé? Pour le cas présent tu serais peut-etre surpris 😉
16:10 <discord_afpy> <Andy K (boss dreamer ou pas)> désolé, une amie était en train de m'envoyer un texto
16:10 <entwanne> mdk: alors je dis que la réponse est oui !
16:10 <discord_afpy> <Andy K (boss dreamer ou pas)> Imaginez que vous ayez une commande en CI qui ne peut s'exécuter que sur le répertoire local
16:10 <discord_afpy> <Andy K (boss dreamer ou pas)> j'ai mis cela en place
16:10 <mdk> Boom, tu m'as perdu.
16:11 <mdk> "répertoire local" tu veux vriament dire "qui ne peut s'exécuter qur sur le laptop du développeur" ?
16:11 <discord_afpy> <Andy K (boss dreamer ou pas)> ```yaml
16:11 <discord_afpy> <Andy K (boss dreamer ou pas)> script:
16:11 <discord_afpy> <Andy K (boss dreamer ou pas)>
16:11 <discord_afpy> <Andy K (boss dreamer ou pas)> - cd "${CI_PROJECT_DIR}" | FOSSA_API_KEY=$FOSSA_API_KEY fossa analyze
16:11 <discord_afpy> <Andy K (boss dreamer ou pas)> ```
16:12 <discord_afpy> <Andy K (boss dreamer ou pas)> mdk, oui, il ne s'éxécute que dans le répertoire dans lequel on l'appelle
16:13 <discord_afpy> <Andy K (boss dreamer ou pas)> genre si je veux l'éxécuter pour voir ce qu'il y"a dans le répertoire /tmp/toto, je dois être dans /tmp/toto et éxécuter fossa analyze
16:13 <discord_afpy> <Andy K (boss dreamer ou pas)> ça fonctionne bien quand je suis dans mon pc
16:13 <mdk> Remplace juste ton | par un ; ça doit le faire ?
16:13 <discord_afpy> <Andy K (boss dreamer ou pas)> mais quand je veux le lancer dans une CI, c'est plus galère
16:13 <discord_afpy> <Andy K (boss dreamer ou pas)> roohh je teste
16:14 <mdk> teste sur ta machine d'abord pour te familiariser
16:14 <mdk> avec | et avec ;
16:17 <discord_afpy> <Andy K (boss dreamer ou pas)> quelle est la différence ?
16:17 <discord_afpy> <Andy K (boss dreamer ou pas)> le pipe permet d'avoir le résultat de la commande
16:17 <discord_afpy> <Andy K (boss dreamer ou pas)> mais le ; ... ?
16:18 <mdk> Le but de `|` est d'envoyer le résultat (le texte écrit sur stdout) de la commande précédente à la commande suivante, ce qui n'implique **pas** de prendre en compte les changements d'environnements faits par la commande précédente (quasiment la seule chose faite par `cd`: changer PWD, mais cd n'affiche rien);
16:18 <mdk> Le but de `;` est d'exécuter les commandes séquentiellement, comme avec des retours à la ligne : en faire une, puis une autre, puis une uatre.
16:19 <mdk> Donc dans le cas de `|` les deux commandes peuvent être démarrées simultanément, puis la sortie de l'une branchée à l'entrée de l'autre, et hop ça déroule. Alors que dans le cas du `;` il faut attendre la fin de la première avant de démarrer la seconde.
16:19 <mdk> La première étant un `cd` je pense que tu veux vraiment attendre qu'il fai fini de s'exécuter avant de démarrer la seconde
16:20 <discord_afpy> <Andy K (boss dreamer ou pas)> Super mdk, tu es trop fort ❤️
16:44 <discord_afpy> <Andy K (boss dreamer ou pas)> voilà
17:00 <discord_afpy> <chadys> Honnêtement je ne vois autour de moi que des gens perdre beaucoup de temps à vérifier/corriger les bêtises de l'IA et je n'ai jamais pu constater le moindre supposé gain de temps. Mon impression reste jusqu'à présent que je vais beaucoup plus vite en faisant directement moi-même. Idem quand j'en vois poser des questions à chatgpt au lieu de chercher directement dans la doc (j'ai systématiquement ma réponse avant eux, et j'ai pl
17:00 <discord_afpy> <chadys> Je garde un usage de l'IA très restreint, exclusivement pour me faire gagner un peu de temps en traduction et reformulation de texte, comme je n'ai pas d'expertise là-dedans et que c'est moi qui fourni le contenu. Pour tout ce qui concerne le dev, je désactive toujours ce qui est IA.
17:00 <discord_afpy> <chadys> Mais bon, à chacun ses préférences, même si j'avoue avoir du mal avec l'engouement actuel (c'est peut-être ça de devenir un VieuxCon™)
17:00 <discord_afpy> <chadys> Et puis apprendre le Rust c'est fun, ça vaut le coup d'y passer un peu de temps
17:04 <asyd> rust <#
17:04 <asyd> <3
17:05 <discord_afpy> <dancergraham> C'est sur qu'on peut facilement perdre plus de temps avec les IA que ce qu'on gagne. Personellement je trouve ca fun quand meme mais c'est un peu comme le GPS dans la voiture - il faut pas oulier comment se repérer dans l'espace simplement parsque le GPS peux te le faire
17:05 <discord_afpy> <saturn7694> ça me rappelle un truc 🤔
17:06 <discord_afpy> <saturn7694> oui c'est juste qu'ils ne s'en sont pas encore rendu compte
17:06 <discord_afpy> <dancergraham> Et Python --> Rust ca marche souvent bien, peut-etre parce que Rust peut etre assez haut-niveau malgré sa performance
17:08 <discord_afpy> <chadys> Oui mais est-ce que ça donnera quelque chose qui aurait été écrit par un dev rust ? J'avais testé un convertisseur de langage en ligne il y a un moment de cela et ça ne m'avais pas convaincue, mais depuis il doit surement y en avoir des meilleurs
17:14 <discord_afpy> <dancergraham> Ma méthode c'est: 1. Écrire proprement en Python. 2.Refactor pour simplifier et clarifier. 3.Traduire avec LLM 4
17:16 <discord_afpy> <dancergraham> Ma méthode c'est 1. écrire en Python 2. Refactor pour simplifier et clarifier 3.Traduire avec LLM 4. Jeter si c'est nul 5.(si c'est important et si possible) demander a quelqu'un qui s'y connait de relire attentivement
17:17 <discord_afpy> <dancergraham> 5bis. Lire moi-meme en détail et essayer d'apprendre 1 ou 2 trucs nouveaux
17:19 <discord_afpy> <dancergraham> Testé avec Python -> Typescript, Python -> Rust et langage naturel -> SVG . J'apprends souvent quelque chose de nouveau. Avec les essais j'identifie mieux ce qui pourrait marcher et ce qui ne pourra probablement pas.
18:08 <entwanne> des choses que tu n'apprendrais pas en lisant un cours sur le rust ?
19:19 <discord_afpy> <dancergraham> Il me semble que le Rust book ne traite pas la crate image par exemple donc dans l'occurence oui mais ce que je veux dire c'est que je trouve cette approche complémentaire avec de l'apprentissage structuré et avec de l'apprentissage par projet / tuto. Le risque selon moi c'est de se servir de l'outil sans réflexion et esprit critique. On peut facilement tomber dans le piège d'écrire du code qu'on ne comprend pas.
19:20 <discord_afpy> <dancergraham> C'est une approche que je teste pour des POC jetables, des projets perso, des outils one-shot et de l'exploration des idées.
19:21 <discord_afpy> <dancergraham> Je déconseillerai cette approche pour du code de production, au moins dans la majeur partie du contexte dans lequel je travaille (équipe de 5 personnes en startup).
19:45 <discord_afpy> <dancergraham> Il y a des équipes qui industrialisent l'approche pour migrer de grands codebases - ils travaillent de manière systématique avec un commit régulier des prompts afin d'améliorer progressivement la qualité des traductions IA et réduire le travail manuel de correction derrière.
19:46 <discord_afpy> <dancergraham> Ceci a l'échelle de plusieurs mois de travail d'une équipe.
20:21 <misc> ouais, alors la conversion de csharp vers java via un outil, mon employeur l'avait fait avec une interface de gestion d'hyperviseur y a 15 ans, on a quand même galeré pendant 2 ans
20:24 <misc> perso, je pense que ça peut servir pour écrire des petits bouts, voir comment ça se fait, mais je suis sur que ça donne le même resultat que de dire à un dev C de faire du python, ça reste assez souvent typique du language de base dans la structure
20:24 <discord_afpy> <saturn7694> oui mais il y avait pas l'ia a cette époque
20:27 <asyd> je suis en plein projet rust, et je vais pas mentir que claude-sonnet m'aide pas mal
20:42 <asyd> je suis vraiment TRES impressionné par tokio
20:56 <misc> à quel nivaeu ?
20:56 <misc> (parce que le fait de devoir tout mettre en async me gratte toujours un peu :/ )
21:12 <discord_afpy> <dancergraham> Vous m'avez motivé pour finir cet article 🙂 https://grahamknapp.com/blog/ai-coding-patterns-language-bridging/
21:18 <misc> ça illustre quand même pas mal les avantages des LLM, c'est un truc intéressant, mais je vois pas clairement le chemin d'un business profitable, à part pour nvidia
21:21 <entwanne> +1
21:24 <misc> en fait, je mettrais ça dans la même case qu'un programme pour faire des dispos des différentes suites bureautiques online (gchat, teams). Faut l'avoir si les concurents ont ça, mais clairement, y a sans doute pas grand monde qui va payer spécifiquement et juste pour ça
21:34 <discord_afpy> <denislecodeur13> a part les grosses boites
21:44 <misc> les grosses boites sont pas devenus grosses en signant des cheques :p
21:53 <discord_afpy> <denislecodeur13> en fait j'ai pas tout suivi
21:53 <discord_afpy> <denislecodeur13> mais les ia, c les grosses boites qui en sont friantes
23:01 <artspy> asyd, opencv pour python permettrait-il d'apporter une solution acceptable au problème de la substitution de couleurs ? (Je n'ai pas la réponse)
23:15 <artspy> asyd, peut-être une piste de réflexion : https://forum.opencv.org/t/can-i-use-opencv-python-with-gpu/8947
23:22 <debnet> J'ai trouvé une solution (relativement) rapide en utilisant les structures de Python.
23:22 <debnet> Et PIL est bizarrement plus performant que je le pensais.
23:27 <artspy> avec numpy ?
23:58 <debnet> J'avais essayé avec numpy si tu regardes mon code.
23:59 <debnet> Mais ce n'était pas si rapide.