Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Quand on me demande quel outil j’utilise pour tout ce qui est récupération de fichiers perdus ou supprimés, j’en recommande 2 que j’aime beaucoup : Disk Drill pour macOS (payant) et Testdisk pour tous les OS (mais en ligne de commande).

Pour Windows, Microsoft pousse également Windows File Recovery qui est également un outil à utiliser en ligne de commande. Mais aujourd’hui, je vous propose un équivalent en termes de fonctionnement qui dispose d’une interface : WinfrGUI.

Capture d'écran de l'interface utilisateur de WinfrGUI montrant la récupération de fichiers supprimés

Ce logiciel gratuit et sans pub pour Windows 10 / 11 propose 2 modes de scans de fichiers perdus et est capable de récupérer tous les types de fichiers (office, zip, images, mp3…etc.). Évidemment, cela fonctionne avec votre disque dur, mais aussi n’importe quelle clé USB ou carte SD peu importe que ce soit en NTFS, FAT, exFAT ou encore ReFS.

Illustration d'un disque dur endommagé avec des fichiers perdus ou supprimés sous Windows

Bref, que vous ayez formaté un support par erreur ou que celui-ci soit endommagé, ça vaut le coup d’essayer avec cet outil téléchargeable ici.


— Article en partenariat avec Twilio —

Dernièrement, vous avez eu le plaisir de découvrir certains des services de Twilio, notamment l’API Verify qui permet de valider des utilisateurs, un super tuto pour envoyer des SMS en Python, ou encore la merveilleuse application de double authentification Authy.

Cela vous a vraiment plu, du coup, je vous propose aujourd’hui de découvrir Lookup par Twilio

Qu’est-ce que Lookup ?

Enfin disponible dans sa version 2, Lookup est un service de Twilio qui se présente sous la forme d’un API et qui permet à ceux qui l’intègrent dans leurs projets de réduire les risques de fraude et de spam. Alors comment ça fonctionne ?

Et bien lorsqu’un utilisateur entre son numéro de téléphone, l’API Lookup est capable de déterminer si ce numéro est valide en identifiant le type de ligne (mobile, fixe, VoIP, numéro temporaire, etc.). Pour cela, Lookup croise les informations données par l’utilisateur avec les informations données par les opérateurs téléphoniques pour vérifier qu’elle concordent. Cela permet d’éviter les fraudes de type SIM Swapping, la création de faux comptes, le vol de comptes ou le spam, notamment en détectant l’usage de numéros virtuels par définition suspects.

Au-delà de cet aspect sécurité très important, le fait de pouvoir valider un numéro de téléphone permet d’éviter les erreurs de distribution de messages ou de payer pour des appels qui n’aboutiront jamais. Et comme cette vérification se fait de manière transparente sans solliciter l’utilisateur avec une validation de numéro de téléphone supplémentaire, les taux de conversion augmentent, car il y a moins de freins pour l’internaute.

Dans sa v1, Lookup fonctionnait uniquement pour des numéros aux États-Unis et au Canada, mais avec cette v2, c’est l’Europe et le monde entier qui sont couverts. Tout est évidemment réalisé dans le respect du RGPD et les données personnelles associées au numéro ne sont pas récupérables via l’API.

Pour cette démo, je vais vous montrer comment intégrer Lookup dans un script Python afin de faire :

  • De la validation simple de numéro
  • Obtenir la version internationalisée du numéro
  • Identifier l’opérateur et le type de ligne
  • Connaître le nom rattaché à un numéro

Comment valider un numéro de téléphone avec Lookup ?

J’ai écrit mes exemples en Python, en m’inspirant de la documentation officielle de Twilio, mais sachez qu’avec les libs disponibles, vous pouvez évidemment coder ce genre de choses dans le langage de votre choix (Ruby, C#, PHP, Java…etc.)

Admettons que vous ayez une page web sur laquelle un internaute doit saisir son numéro de téléphone. Comment savoir si ce numéro est valide au moins pour la France et comment l’avoir dans sa version locale (06 12 13 14 15) et dans sa version internationale ?

Capture d'écran de l'interface web de Twilio Lookup

Et bien pour cela, vous devez vous munir de vos clés API Twilio pour la V2 de Lookup et appeler l’API Lookup comme ceci :

from twilio.rest import Client

account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"

client = Client(account_sid, auth_token)

phone_number = client.lookups.v2.phone_numbers('0612131415').fetch(country_code='FR')

if phone_number.valid is True:
    print('Ce numéro est bien valide en France et sa version internationale est : ' + phone_number.phone_number)
else:
    print('Ce numéro n\'est pas valide en France')

Un bon moyen donc de contrôle que le numéro qui vous est transmis est le bon. D’ailleurs, pour identifier une erreur dans un numéro, vous pouvez également utiliser la propriété « validation_errors » comme ceci, qui vous renverra une de ces valeurs en cas d’erreur : TOO_SHORT, TOO_LONG, INVALID_BUT_POSSIBLE, INVALID_COUNTRY_CODE, INVALID_LENGTH, NOT_A_NUMBER.

from twilio.rest import Client

account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"

client = Client(account_sid, auth_token)

phone_number = client.lookups.v2.phone_numbers('+33451083391').fetch(
    fields='validation')

print(phone_number.validation_errors)

Comment récupérer les différentes versions d’un numéro ?

En fonction du numéro saisi, vous pourriez avoir besoin soit de son code pays, soit du numéro international (code pays + numéro), soit de sa version locale :

from twilio.rest import Client

account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"

client = Client(account_sid, auth_token)

phone_number = client.lookups.v2.phone_numbers(
    '0612131415').fetch(country_code='FR')

print('Le code indicatif : ' + phone_number.calling_country_code)
print('Le code pays : ' + phone_number.country_code)
print('Le numéro au format national : ' + phone_number.national_format)
print('Le numéro au format international :  ' + phone_number.phone_number)

Vous obtiendrez alors le résultat suivant :

Le code indicatif : 33
Le code pays : FR
Le numéro au format national : 06 12 13 14 15
Le numéro au format international :  +33612131415

Savoir identifier l’opérateur et le type de ligne liés à un numéro de téléphone ?

Un truc sympa avec l’API lookup de Twilio, c’est aussi la possibilité d’identifier l’opérateur et le type de ligne associé à un numéro. Ainsi, vous saurez si c’est un mobile, une ligne de fixe, un numéro VoIP…etc.

Pour cela, on va utiliser la propriété « line_type_intelligence comme ceci :

from twilio.rest import Client

account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"

client = Client(account_sid, auth_token)

phone_number = client.lookups.v2.phone_numbers(
    '0612131415').fetch(country_code='FR', fields='line_type_intelligence')

print('Opérateur téléphonique : ' + phone_number.line_type_intelligence["carrier_name"])
print('Type de ligne : ' + phone_number.line_type_intelligence["type"])

Et voici le type de retour que vous obtiendrez :

Opérateur téléphonique : ORANGE FRANCE (01)
Type de ligne : mobile

D’autres fonctionnalités payantes ou encore en beta, permettent également de faire des choses très utiles comme la possibilité de savoir si la carte SIM a été swappé récemment (pour éviter les arnaques) ou tout simplement trouver le nom lié au numéro de téléphone. Mais ces options ne sont pas disponibles dans tous les pays. Je vous invite à consulter cette page pour les simswap.

Comment savoir à qui appartient un numéro ?

Cette possibilité ne fonctionne pas pour la France (Because RGPD), mais uniquement pour certains pays comme les États-Unis ou la Grande-Bretagne et uniquement pour certains numéros. Prenons par exemple ce numéro américain. En utilisant la propriété « caller_name », il est possible de savoir quel est le nom lié à ce numéro et savoir si c’est un numéro d’entreprise ou non.

from twilio.rest import Client

account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"

client = Client(account_sid, auth_token)

phone_number = client.lookups.v2.phone_numbers(
    '+13475026441').fetch(fields='caller_name')

print("Nom : " + phone_number.caller_name["caller_name"])
print("Type de numéro : " +phone_number.caller_name["caller_type"])

Voici ce que j’obtiens, à savoir le nom d’une entreprise de plomberie localisé à New York.

Nom : RITE PLUMBING
Type de numéro : BUSINESS

Vous l’aurez compris, l’intégration de Lookup v2 dans vos applications est assez simple à mettre en œuvre et coûte très peu cher. Cela permet de vous assurer que les coordonnées téléphoniques saisies par un utilisateur sont correctes et qu’il ne s’agit pas d’un faux numéro ou d’un numéro qui fait l’objet d’une fraude notamment dans le cadre d’un SIM Swapping.

Vous éliminerez également des opérations de validation de numéro assez pénibles pour l’utilisateur, ce qui vous permettra d’augmenter vos taux de conversion et surtout de réduire vos coûts d’envoi de messages en cas de numéro invalide. Bref, un must pour tous les projets qui exigent une validation correcte du numéro de téléphone d’utilisateurs.


Je vous ai parlé à de multiples reprises de services en ligne permettant de séparer l’audio instrumental de la piste vocale de n’importe quelle chanson. Des trucs comme Acapella Extractor et Vocalise par exemple ou encore ce genre d’intégration dans Ableton.

Ce sont des outils assez corrects, mais qui ne font pas non plus de miracles.

Mais c’était sans compter sur Ultimate Vocal Remover GUI (UVR), une interface Windows pour un séparateur de piste qui utilise des réseaux neuronaux pour arriver à ses fins. Je l’ai testé et le résultat est vraiment excellent.

Alors UVR est vraiment un gros logiciel de plusieurs gigas qui embarque tout le nécessaire pour fonctionner et qui surtout réclame pas mal de puissance machine. Si vous avez une carte graphique Nvidia avec au moins 8 GB de V-RAM c’est l’idéal.

Illustration montrant un cerveau artificiel utilisé pour supprimer les voix des chansons

En entrée, vous mettez votre fichier audio (MP3) puis vous sélectionnez un répertoire de sortie et surtout un modèle, les meilleurs étant MDX-Net + UVR MDX Net Main ou Ensemble Mode + Multi AI. Vous pouvez également forcer le GPU ou encore augmenter la réduction de bruit.

Capture d'écran du logiciel Ultimate Vocal Remover en train de traiter une chanson

Ainsi, après quelques minutes, vous récupérerez une version instrumentale et une version vocale. Même les ad libs peuvent être extraits ou laissés au choix (modèle karaoké). De quoi faire tous les remix, versions karaoké et samples de vos rêves. C’est magique !

Si ça vous intéresse de tester l’outil, c’est dispo ici sur Github. Il faudra d’abord télécharger le logiciel, l’installer puis appliquer son patch. Lisez bien les instructions sur le site.


Quand j’étais gamin, je m’amusais souvent à faire de petites animations en bas de mes cahiers. L’idée est simple. Un dessin qui évolue légèrement sur chaque page, et lorsqu’on fait défiler rapidement les pages du cahier, on peut voir le dessin s’animer. Oui c’est exactement comme cela qu’on faisait les premiers dessins animés au temps de la préhistoire (pardonnez mon approximation historique ^^).

Quoiqu’il en soit, ce temps est révolu, et maintenant tout est fait sur ordinateur. Toutefois, si vous voulez renouer avec les sensations d’un jeune Walter Disney, voici comment faire !

Le site Eat My Art vous propose différents modèles à imprimer. Plus il y a de cases, plus votre animation sera longue.

Capture d'écran de l'interface graphique du logiciel de dessin animé

Le but du jeu est de dessiner dedans un peu comme ceci…

Illustration d'un personnage animé dessiné à la main

Puis de retourner sur Eat My Art pour uploader un scan de votre page. Le site générera alors une animation GIF à partir de votre oeuvre. Vous pourrez même ajouter des effets pixel art, de rotation, de flou…etc. Ajoutez par exemple « Blur attack » dans le champ effects avant d’uploader votre image et vous aurez un effet de flou. (La liste des effets est en bas de la home du site)

Image montrant une étape de la création de votre dessin animé

Sympa comme rendu non ?

J’ai trouvé ça marrant à faire aussi bien pour les petits que les grands. De quoi démarrer de grandes carrières (ou pas).


Vous aimez les oiseaux ?

Moi j’adore ! J’en ai plein mon jardin et ils me régalent avec leurs chants. Rien que de les voir voler, j’adore. J’ai des mésanges de toutes sortes, des pigeons ramiers, des pies, mais également des pics épeiches, des pics-verts, des pinsons, des loriots ou encore des petits rapaces ou des hérons.

Seulement voilà, même si j’ai des livres, c’est parfois difficile de savoir quels types d’oiseau est présent. Certains sont difficiles à observer et d’autres sont plus matinaux que moi.

Alors que faire ?

Et bien avec le projet BirdNet-Pi, il est possible avec un simple Raspberry Pi et un micro, d’enregistrer 24h/24h l’environnement sonore de votre jardin pour en extraire automatiquement les chants, les piaillements et autres gloussements de nos oiseaux sauvages adorés.

L’outil est ainsi capable de créer des spectrogrammes de chaque bruit d’oiseau capté et de les identifier. Ensuite vous aurez tout un tableau de bord avec des stats, la visualisation des espèces, de leur spectrogramme et évidemment la possibilité de réécouter certains chants.

Schéma de branchement du Raspberry Pi pour la reconnaissance d'oiseaux automatique

Ce qui est encore plus cool avec Brident-Pi, c’est que vous pourrez même partager ces données avec le monde entier via un petit serveur web embarqué (un Caddy). En voici une petite liste pour vous montrer :

Capture d'écran de l'interface utilisateur de la reconnaissance d'oiseaux automatique avec le Raspberry Pi

Je trouve ce projet super cool. Je ne sais pas si j’aurais le temps de mettre ça en place mais si c’est votre cas, je veux bien un petit retour à l’occasion. Peut-être que la LPO s’en saisira pour aider les particuliers à mettre ça facilement en place chez eux afin de récupérer de la données un peu partout en France.

Vous trouverez toutes les infos sur ce projet ici.