Afin de palier un problème de compression abusive des images de bande dessinées (e-books) mises en vente sur les plateformes de e-commerce, j'ai pour projet de réaliser une interface web permettant de gérer des scripts bash. Ces scripts interagissent avec un modèle d'intelligence artificielle pour rendre les images plus agréables à lire pour le lecteur, et ce sur divers modèles de tablettes e-ink. L'interface web finale doit rendre accessible ce travail d'optimisation et de traitement d'image, chronophage par nature.
Compétences mises en oeuvre
AC32.01 | Anticiper les résultats de diverses métriques (temps d'exécution, montée en charge)
AC32.03 | Choisir et utiliser les bibliothèques et méthodes dédiées au domaine d'application (imagerie, intelligence artificielle)
Existant IA - Cas d'image Black&White avec halftones
Un modèle d'intelligence artificielle (eula digimanga bw v2 nc1) permet de modifier l'image que l'on lui passe en argument. À titre d'exemple, on observe une nette amélioration du confort de lecture sur une télévision OLED 4K à l'issue du processus. Les traits sont nets, les contrastes améliorés et les halftones conservés.
Ce modèle ne fonctionne qu'avec le logiciel ChaiNNer, qui dispose d'une interface en ligne de commande. ChaiNNer peux traiter un lot d'images.
Besoins
- Automatiser le processus pour une série de fichiers e-book (.cbz)
- Vérifier l'image après chaque export durant le processus avec ImageMagick (pour éviter les images vides, résultant d'une erreur dans le processus d'upscaling)
- Réaliser une interface textuelle avec avancée et estimation horaire de fin du processus
- Réaliser un front-end en React/Next.js
- Déployer l'application sur un service de tailnet
- Rechercher un calcul mathématique permettant d'obtenir les mêmes résultats sur une autre tablette (disposant d'une autre résolution)
Une recherche d'optimisation de la taille de sortie des images pourrait être faite avec ffmpeg.
Interragir avec ChaiNNer
Complétion d'un template JSON, qui sera passé en argument de la chaine à exécuter :
// Preparing the input/output for chainner
inputs_json=$(cat ~/relax_tools/scripts/upscale_esr_library_14022024_inputs.json)
updated_json=$(echo "$inputs_json" | jq --arg source_pics_dir "${PWD}" '.inputs["#7b571afb-67e4-47f3-a412-4209c77ee8db:0"] = $source_pics_dir')
final_json=$(echo "$updated_json" | jq --arg output_subdir "${PWD##*/}" '.inputs["#f7235232-fc28-4eae-aa73-b4425e2d4b9b:2"] = $output_subdir')
echo $final_json > ~/relax_tools/scripts/upscale_esr_library_14022024_inputs_latest.json
Optimisations nécessaires
Il est nécessaire d'optimiser la résolution des images pour limiter le Moiré effect, résultant d'une différence entre la densité de pixels d'une image et de l'écran qui l'affiche. L'enraillement de ce phénomène indésirable nécessite un réglage particulier pour chaque résolution.
La réduction de la résolution de l'image primo-upscale permet de une normalisation du taux de Moiré que l'on peut attendre à l'issue d'un processus. Cette normalisation permet également une uniformisation de la durée du processus et d'optimiser la température émise de l'ordinateur. Crucial en période estivale... Cette réduction doit être calculée pour chaque résolution de tablette.
Résultats
Une interface textuelle complète a été réalisée :
Un calcul mathématique basé sur les premiers bons résultats permet d'obtenir des résultats similaires sur une autre tablette de même taille (mais ayant une résolution différente):
# Second RESIZE TO SIDE element note :
# We should multiply 1814 by the following dividing (old screen height/new screen height)
# The result then should be multiplied by 4.