Pour faire suite au billet précédent, je viens d'apprendre qu'Adobe a aussi maintenant son "IA générative". Et ils l'ont appelée... Firefly !!
Parlez d'une coïncidence...
Ce blog se veut un endroit pour centraliser les rapports sur quelques-unes de mes activités en modélisme (figurines ou autres) et en jeux de stratégie. Ainsi que des avis sur des sujets en relation (ou non, selon l'humeur du moment).
Pour faire suite au billet précédent, je viens d'apprendre qu'Adobe a aussi maintenant son "IA générative". Et ils l'ont appelée... Firefly !!
Parlez d'une coïncidence...
Pour faire suite au billet précédent, voici quelques images supplémentaires :
|
|
Les amateurs reconnaîtront l'inspiration ;-)
Mais bon, me direz-vous, comment ça marche ?
Alors, pour faire simple, vous pouvez vous rendre sur ce site qui permet de faire des essais simplement et gratuitement.
NB: le moteur complet peut être installé en local sur votre PC, ce qui vous donnera accès à une multitude de paramètres supplémentaires, mais ce n'est pas le but ici.
Par exemple, pour obtenir la première image ci-dessus (Inara), j'avais introduit les paramètres suivants :
Describe your image :
beautiful drawing of morena baccarin, wearing an indian saari, elegant, long hair:0.9, cleavage:0.7, in a dark indian decorated spaceship room, hangings, drapings:1.2, soft lighting, warm colors, intricate, shallow depth of field, science-fiction
Negative prompt :
distorted anatomy, distorted hands, cropped, distorted face:1.3, bad art
Avec 512x768 comme taille.
Pour la deuxième image (Kaylee), ceux-ci :
beautiful drawing of Jewel Staite as Kaylee, light brown hair, wearing a khaki overall, over a sleeveless shirt:1.2, chubby:1.0, in a spaceship engine room, intricate, science-fiction, shallow depth of field:1.2, cinematic, Kaylee: 1.4
Et
multiple limbs, distorted anatomy, distorted hands, cropped:1.2, distorted face:1.3, bad art, signature, text, logo, bare legs:1.2
Le premier champ décrit ce que vous voulez, le deuxième ce que vous ne voulez pas. Les entités sont séparées par des virgules, et on peut leur donner un poids (une valeur numérique indiquée après un caractère ':'). Par exemple, une valeur de 1.2 correspond à 120% pour augmenter l'effet ou la probabilité qu'il se produise. Un effet inférieur à 1 indique que vous ne voulez pas supprimer totalement l'effet, mais en diminuer l'importance. Dans l'exemple d'Inara, "cleavage: 0.7" dit que "je suis ok avec le décolleté, mais pas trop, s'il-te-plaît".
L'effet est néanmoins aléatoire. En introduisant exactement les mêmes paramètres que moi, la probabilité est très faible que vous obteniez la même image que moi.
Le principe est que le système génère du bruit aléatoire basé sur un "seed" (qui est la variable d'initialisation d'un générateur de nombre aléatoires) qui est lui-même aléatoire. Ensuite, l'IA (je répugne à appeler ces systèmes comme ça, mais c'est la mode) effectue des passes successives pour essayer d'identifier un truc qui correspond à ce que vous avez décrit. Ca commence par donner un truc très basique. On remet une couche de bruit (moins que dans l'itération précédente) et on repart pour un tour. Petit à petit, le système construit une image qui correspond plus ou moins à ce que vous avez demandé. Ou du moins à ce qu'il a interprété de votre demande.
Avec les mêmes paramètres et/ou quelques variations, on peut obtenir des images différentes jusqu'à trouver son bonheur, avec un peu de chance. Comme ci-dessous.
|
|
|
|
|
|
Lesquelles préférez-vous ?
J'ai récemment joué avec de la "génération d'images par IA".
Alors, si ça marche bien pour des trucs simples, dès qu'on veut faire des scènes un peu plus complexes, l'interprétation du texte fourni atteint vite ses limites.
Vous voulez le portrait d'une jolie barbare ? Pas de problème...
(encore que, si vous essayez de lui coller une épée, une lance ou une hache, ça se corse déjà)
Récemment, en faisant des fouilles dans mes archives, j'ai retrouvé le jeu "La Guerre des Ducs", un petit wargame qui avait été publié en encart du tout premier numéro de Jeux & Stratégie en 1980.
Je dis régulièrement que c'était le jeu idéal pour introduire de nouveaux joueurs au wargame (il a été conçu pour ça, après tout). Il n'y a que deux pages de règles (même si c'est un peu court, elles laissent la place à quelques ambiguités) et deux autres pages de conseils tactiques.
Ca permet au nouveau joueur de se familiariser avec trois symbôles OTAN, les zones de contrôle, une table d'effets de terrains sur les mouvements et les combats, une table de résolution de combat classique, etc... Avant de passer à quelque chose d'un peu plus costaud.
Comme c'est à peu près introuvable, j'ai conçu un petit module Vassal pour le jeu en question. Il est disponible sur mon Google Drive. L'auteur du jeu est François Marcela-Froideval. Je n'ai pas cherché à le contacter pour lui demander une quelconque permission (pure fainéantise de ma part, j'avoue). J'espère qu'il ne me fera pas un procès :-)
Ce module est un truc tout à fait amateur. Ca vient sans aucune garantie. J'espère qu'il donnera un peu de plaisir à quelques nostalgiques ou permettra à l'un ou l'autre curieux de se lancer dans la discipline.
Et si vous avez besoin d'une introduction à Vassal, Marco Poutré a une playslist YouTube sur le sujet. C'est long, donc, si vous voulez faire plus court, voir principalement celle sur l'utilisation du logiciel et éventuellement celle sur l'utilisation des logs.
Bon amusement ;-)
Pour les nikonistes équipés d'un D850 (mais peut-être que ça colle pour d'autres boîtiers aussi) qui font de la photo de studio en mode "tethered", çàd en envoyant les photos directement sur le PC via un logiciel comme CaptureOne ou LightRoom ou peut-être DarkTable (jamais essayé ce dernier), j'ai conçu un petit sabot qu'on visse sous le boîtier et qui permet de protèger le connecteur USB de l'appareil des accidents (genre marcher sur le câble). Ca compte sur la friction. Le canal où passe le câble est prévu pour un câble orange de chez TetherTools.
Comme ce machin est prévu pour être imprimé en 3D, il faut soit avoir une imprimante, soit avoir un pote qui en a une.
Ca se trouve sur le site de Prusa. Il y a un preview 3D de la pièce visible là-bas.
Je viens de lire une énorme connerie sur "LesNumériques.com", qui est un site à grande fréquentation.
Sur cette page, on peut en effet lire :
"Le Mavic 2 Pro est prêt à voler tout aussi rapidement que ses prédécesseurs. Il suffit de retirer la bulle de protection de sa caméra, de déplier ses quatre bras et de l'allumer. On allume ensuite la radiocommande[...]."
Alors là, STOP ! NON ! Une règle de base en aéromodélisme, quand on veut garder ses phalanges, la tête des copains, son assurance et sa licence de vol quand on en a une, c'est qu'ON ALLUME TOUJOURS LA RADIO-COMMANDE D'ABORD ! (et on s'assure que le modèle qu'on va piloter est bien celui qui est sélectionné quand c'est une commande qui en contrôle plusieurs).
C'est tout aussi vrai pour un drône grand public. Ca l'est d'autant plus que ces machins, même s'ils sont stabilisés, etc... sont équipés, pour la majorité d'entre eux, de quatre hélices, qui, à plein régime, peuvent trancher profondément dans la chair. Et que ces engins n'ont pas la moindre portance et sont généralement équipés d'une batterie bien lourde. Bref, quand ça tombe, c'est comme un pavé. Il vaut mieux qu'il n'y ait rien dessous.
|
![]() |
--[[
telem lua for getting dlg launch height
but ignoring launch switch and thermal climbs
and then averaging by adding together and divide by number of launches.
will use v.speed and alt to determine a launch
NB: 206 = alt; 224 = vspeed
--]]
local LIMIT = 30
local launchNum = 0
local lastLaunchNum = 0
local average = 0
local altTotal = 0
local numOverLimit = 0
local bestTime1 = 0
local bestTime2 = 0
local bestTime3 = 0
local lastTime = 0
local function init()
local limit = model.getGlobalVariable(8, 8)
if limit > 0 then
LIMIT = limit
end
end
local function background()
-- decide if launch has happened and increment launchNum
if lastLaunchNum == launchNum then
if getValue(206) < 10 then
if getValue(224) > 5 then
launchNum = launchNum + 1
lastTime = 0
end
end
-- if launch has happened look for drop/level in alt and average it
elseif launchNum > lastLaunchNum then
local alt = getValue(206)
if lastTime > alt then
altTotal = altTotal + alt
average = altTotal / launchNum
lastLaunchNum = launchNum
-- save best launches
if alt > bestTime3 then
if alt > bestTime2 then
bestTime3 = bestTime2
if alt > bestTime1 then
bestTime2 = bestTime1
bestTime1 = alt
else
bestTime2 = alt
end
else
bestTime3 = alt
end
end
-- launches over LIMIT
if alt >= LIMIT then
numOverLimit = numOverLimit + 1
end
-- vocal announcement
playNumber( alt, 6, 0 ) -- should be UNIT_DIST of TelemetryUnit (myeeprom.h) which is 5 ???
end
lastTime = alt
end
end
-- draw result
local function run()
background()
lcd.drawChannel(20, 4, 206, MIDSIZE+PREC1+LEFT)
lcd.drawChannel(100, 4, 224, MIDSIZE+PREC1+LEFT)
lcd.drawText( lcd.getLastPos(), 4, "m/s", 0)
lcd.drawLine(0, 20, 158, 20, SOLID, 0)
lcd.drawPoint(0, 20)
lcd.drawText(20, 26, "Throws:", 0)
lcd.drawNumber(70, 26, launchNum, LEFT)
lcd.drawText(20, 38, "Average:", 0)
lcd.drawNumber(70, 38, average, LEFT)
lcd.drawText( lcd.getLastPos(), 37, "m", 0 )
-- set LIMIT with throttle if switch G is down
if getValue(98) == 1024 then
LIMIT = math.floor( (getValue(77) + 1024) / 29 )
model.setGlobalVariable(8, 8, LIMIT)
numOverLimit = 0
end
lcd.drawText(20, 50, "Over " .. tostring( LIMIT ) .. "m:", 0)
lcd.drawNumber(70, 50, numOverLimit, LEFT)
lcd.drawLine( 159, 0, 159, 63, SOLID, 2 )
lcd.drawPoint( 159, 0 )
lcd.drawFilledRectangle( 160, 0, 52, 11, 0 )
lcd.drawText(178, 2, "Best", INVERS)
lcd.drawNumber(180, 13, bestTime1, LEFT)
lcd.drawText(lcd.getLastPos(), 12, "m", 0)
lcd.drawNumber(180, 23, bestTime2, LEFT)
lcd.drawText(lcd.getLastPos(), 22, "m", 0)
lcd.drawNumber(180, 33, bestTime3, LEFT)
lcd.drawText(lcd.getLastPos(), 32, "m", 0)
lcd.drawFilledRectangle( 160, 43, 52, 11, 0 )
lcd.drawText(178, 45, "Last", INVERS)
lcd.drawNumber(180, 56, lastTime, LEFT)
lcd.drawText(lcd.getLastPos(), 56, "m", 0)
end
return { init=init, background=background, run=run }
![]() |
| Screenshot dans l'émulateur de "Companion" |