Réparer un QR Code abîmé

Réparer un QR Code abîmé

tl;dr:
Après avoir perdu une première fois mes comptes Google Authenticator, je les perds une deuxième fois en prenant une photo crado des QR Codes d'export. J'explique comment je les ai réparés en deuxième partie de cet article.

J'ai récemment migré mes comptes Google Authenticator vers un nouveau téléphone.

Une fois les comptes importés sur le nouveau téléphone, j'ai dûment effacé Google Authenticator sur l'ancien téléphone.

Mais curieusement, sur le nouveau téléphone (après un reboot je crois), Google Authenticator était VIDE. Le désert. Plus rien. Mes précieux codes, les accès à mon VPS, mes emails, le NAS, mes comptes pro, etc., tout avait disparu. La galère intersidérale. Et bien sûr, l'ancien téléphone était vide lui aussi.

Que faire ?

Habitué à ce genre de situations, pour assurer mes arrières, j'avais quand même pris une photo des QR Codes d'exportation. Sauvé !

Ou pas ?

Quelques précisions préalables :

  • L'exportation des comptes Google Authenticator passe par la génération d'un QR Code
    • Plus vous avez de comptes dans votre Google Authenticator, plus le QR Code est gros et compliqué
    • Google Authenticator génère même parfois une série de QR Codes
  • Pour importer vos comptes, il faut scanner ces QR Codes avec le Google Authenticator du nouveau téléphone
  • Au lieu de faire des captures d'écran des QR Codes, j'ai simplement pris des photos comme un gros cochon : avec le nouveau téléphone, j'ai photographié l'écran de l'ancien téléphone, tellement confiant dans la fiabilité du système de correction d'erreur des QR Code.

Je n'avais ainsi plus qu'à dégaîner de nouveau le téléphone, et à scanner les QR Code crados contenant mes accès Google Authenticator.

Rien.

Pas de réaction du téléphone au moment de scanner. Il semble que ce dernier fasse un accès de presbytie aigüe. Même après mise au point, en éloignant ou en rapprochant le téléphone, le QR Code n'est absolument pas détecté. Après des dizaines de tentatives, je dois me rendre à l'évidence : j'ai perdu mes comptes, et mon secours ne m'est d'aucun secours.

L'ultime recours, la tentative désespérée : réparer le QR Code qui ne fonctionne pas.

Image Description

L'effet Barrel Distortion, c'est ce qui vous donne un gros nez sur les photos

Voici les obstacles que je dois surmonter :

  • c'est une photo d'écran 🤦‍
  • il y a un moiré sur la photo
  • la photo est prise légèrement de côté (on a donc un problème de perspective)
  • l'objectif photo grossit le sujet en le déformant, on a donc un effet de barrel distortion
  • Sur le bord gauche, les carrés noirs "bavent", on ne sait pas s'ils doivent être interprêtés comme un carré noir ou comme un carré blanc.

Objectif : Reconstituer les petits carrés noirs foireux

Etape 1 : Corriger la perspective

Avec Darktable (DT), on utilise l'outil Rotate and Perspective. Il suffit d'indiquer à DT les horizontales et les verticales.

Votre photo est maintenant bien "de face".

Etape 2 : Corriger le Barrel Distortion

De face, mais "gonflée" avec un barrel distortion.

Toujours avec DT, on utilise cette fois l'outil Lens correction. Plus subtil, cet outil permet justement de corriger ces distorsions disgracieuses provoquées par les différents objectifs (quelque soit leur qualité).

Auparavant, vous voudrez activer les guide lines de DT pour vous rendre compte que la distorsion est très faible, mais bien présente pour nous empêcher d'accomplir l'étape 3 proprement.

QR-code-Barrel_distortion2
Les guide lines de DT nous permettent de constater la distorsion

Sans la référence précise de l'objectif, un thread Stackexchange propose les paramètres suivants :

  • Generic, Crop-factor 1.0 (Full Frame)
  • Generic, Rectilinear 10-1000mm f/1.0
  • Ouverture : j'ai pris 1,7d (mais ça ne change rien je crois)
  • Geometry : fish-eye
  • Mode : distort

QR-code-Barrel_distortion3

Ensuite, essayez différente longueurs focales (Focal Length, en mm), jusqu'à trouver le meilleur compromis.

QR-code-Barrel_distortion4
En ce qui me concerne, 60mm donne un résultat correct.

Etape 3 : remplir les petits carrés

Maintenant que mon carré est bien carré, je vais pouvoir m'adonner à la dernière étape de mon plan de sauvegarde : il faut corriger à la main les imperfections des modules-carrés, les "points" qui constituent notre QR Code :

  • apposer une grille aux dimensions précises
    • la partie la plus sensible
  • remplir la grille aux bons endroits
    • oddly satisfying
  • faire plusieurs grilles si nécessaire pour compenser les décalages (car notre QR Code n'est pas parfaitement carré)
  • supprimer les grilles pour ne garder que les modules-carrés corrigés
  • tester

Pour créer une grille sous GIMP :

  1. Créez un nouveau calque transparent
  2. Zoomez votre image pour voir vos modules-carrés d'assez près
  3. Créez votre grille dans le menu Filtres / Rendu / Motif / Grille
    • Choisissez une couleur différente de noir, ce qui permettra de supprimer facilement votre grille plus tard
      • et une épaisseur de ligne à 1
    • Ajustez la largeur/hauteur de votre grille pour la faire correspondre aux modules-carrés
      • Un écartement de 22 est le meilleur compromis pour mon cas
    • Ajustez ensuite l'offset (le décalage)
    • L'important, c'est que la grille reste alignée sur une bonne longueur de modules-carrés

QR-code-grille1
On constate ici l'étendue des dégâts.

Une fois votre grille ajustée, il est temps de remplir en noir les petits carrés avec l'outil de remplissage.

QR-Code-grille

Supprimez ensuite la grille rouge :

  • Dupliquez votre calque
  • En outilisant l'outil de Sélection par couleur, cliquez sur la grille (ici, rouge)
  • Supprimez en appuyant sur la touche Suppr de votre clavier
  • Désactivez la sélection
  • Désactivez le calque d'origine (en cliquant sur l'oeil)
  • Vous vous retrouvez maintenant avec deux calques :
    • Un calque "modules-carrés + grille"
    • Un calque "modules-carrés sans grille"

QR-code-grille2

Si vous devez compenser un décalage (votre grille ne correspond plus aux modules-carrés), créez un autre calque vierge transparent et effectuez les mêmes étapes sur une autre zone délimitée.

Délimitez bien vos zones pour éviter qu'elles se superposent.

Au bout d'un moment, après avoir rempli quelques zones, j'ai désactivé les calques "modules-carrés + grilles", dézoomé et scanné.

Miracle : le QR Code a fonctionné.