Une histoire de création d'image

Dernièrement le journal [LE TEMPS](https://www.letemps.ch/) a diffusé son magazine **T** avec la page de couverture  suivante ![couverture](images/T-magazine.jpg)


Avec le titre : **Des algorithmes ont illustré 95% de ce magazine**

Après lecture de celui-ci j'ai donc voulu voir de quoi il était question et tester.

## Pourquoi j'en parle?

L'idée derrière cela étant de comprendre comment fonctionne ce type de logiciel.

Et pour comprendre le mieux après la lecture des documentations, le visionnage de tutoriel vidéo c'est d'expérimenter.

Dans un des articles 4 logiciels sont cités
1. DALLE-E 2
1. Midjourney
4. Disco Diffusion
1. Stable Diffusion

C'est avec ce dernier **stableDiffusion** que je me suis lancé parce qu'Open Source et proposant une documentation d'installation.

Voici deux exemples d'images générés par stablediffusion mise en ligne sur mon site.
* [Venus](https://boizot.ch/photo/venus/)
* [Guerre](https://boizot.ch/photo/manwar/)

Le visionnage de quels tutoriels m'ont amenés à installer le programme de mise à l'échelle, **chaiNNer**


Je vais parler de ces deux applications
* de la documentation
* de leur installation
* de leur utilisation


## stableDiffusion
### les ressources en ligne.

Tout d'abord des liens sur les principaux sites.

* [le github](https://stable-diffusion-ui.github.io/)
* [Explication & demo](https://stablediffusion.fr/)
* [version Web](https://stablediffusionweb.com/)

### Une recommandation.  
 **It can run on most consumer hardware equipped with a decent GPU.**
Mais si votre matériel n'a pas de GPU décent ça marche quand même mais lentement.

### Installation
J'ai installé, cette boite à outils, sur une vieille machine 2012 sous debian 10.13 avec une carte NIVIDIA trop ancienne.

c'est extrèmement simple, il suffit de télécharger l'ensemble de script : stable-diffusion-ui-linux.tar.xz se trouvant [ici](https://stable-diffusion-ui.github.io/docs/installation/) et de suivre les instructions.
1. Extraire les fichiers commande : **tar Jxvf stable-diffusion-ui-linux.tar.xz**
2. se déplacer dans le répertoire : cd **stable-diffusion-ui**
3. Lancer le script : **./start.sh**

cela installe automatique les programmes (python et 8Go de librairies) ainsi que les 6.5 Go de données.    
Une fois l'installation finie une page s'ouvrira dans votre navigateur.
![stableDiffusion_ui](images/StableDiffusionUI.png)

Vous pourrez alors produire votre première image.

### Utilisation
Voici une de mes premières.
Créée à partir du texte (prompt) suivant:
> a photograph of an astronaut riding a horse
![astronaut](images/astro-1.jpeg)

sans option de rendu particulier, j'aborderai en suite ces options.

Celle-ci à été produite avec des options (5).

> "a close-up portrait of a cat" **by pablo picasso**, **vivid**, **abstract art**, **colorful**, **vibrant**.
![cat-picasso-1](images/cat-picasso-1.jpeg)


Ces images ont été produites avec une faible définition 512X512 ou 448X448, elles ne sont pas utilisables pour intégrer un document comme un flyer ou un poster.

Mais sur ma vieille machine 6 à 8 mn sont nécessaires.

Augmenter la taille augmente le temps de création ... c'est pour cela que je vais parler d'un outil qui permets de faire l'expansion des images, **chaiNNer**

### Conclusion
La conclusion de ce premier test est :
* il vaut mieux avoir une machine avec une configuration GPU conséquente.
* une bonne connaissance du graphisme.
* produire beaucoup de petites images
* trier, sélectionner puis la redimensionner.

Hors pour produire beaucoup de petites images il faut un GPU performant.

Une solution, utiliser un environnement Cloud. ( AWS, Google, ScaleWay), j'ai testé et effectivement pour moi c'est **25 à 30** fois plus rapide.

Le site [StableDiffusion en Français](https://www.stable-diffusion-france.fr/) est une bonne source d'information pour comprendre comment ça fonctionne.

## chaiNNer

chaiNNer est un programme de mise à l'échelle avec une interface graphique permettant de créer un flux de traitement d'images.

Non seulement vous avez un contrôle total sur votre pipeline de traitement, mais vous pouvez effectuer des tâches incroyablement complexes en connectant simplement quelques nœuds entre eux.

**exemple**:
![Interface chaiNNer](images/ChaiNNer.png)

### installation
On trouve sur la page [github](https://github.com/chaiNNer-org/chaiNNer) les releases binaires pour les systèmes de paquets Debian, Redhats, MacOS, Windows.

**nota** : un environnement grahique de type Gnome ou Kde est obligatoire.

Il faudra ensuite dans l'application installé les bibliothèques pytorch, ONNX et NCNN lors des premiers lancements.


### Utilisation

ChaiNNer permets de créer graphiquement une chaine de traitement dont voici un exemple :
![chaine de traitement](images/chainner-2.png)
1. on charge un modèle
2. Puis dans une boite d'itération
 1. on charge une image
 2. on applique un changement d'échelle
 3. on sauve le résultat

Lors de l'instalation de ChaiNNer il n'y pas de modèles installés il faut donc les télécharger du site [upscale Wiki](https://upscale.wiki/wiki/Model_Database#Drawings)

Les temps de traitement seront dépendant du modèle
* DigiPaint : ~3mn
* RealESRGAN_4xplus ~4mn
* Resize(Factor) ~6s

Les différences de qualité sont visibles à l'écran entre Resize(Factor) et les deux autres options.

Pour voir suivre ce [lien](https://www.boizot.ch/photo/cat-picasso/)