On connait tous l’extension Adblock qui enlève les publicités envahissantes et rend plus agréable la navigation sur le web.
Mais quand on regarde la télé, on doit subir inlassablement les pubs pour des journaux Altaya, des forfaits mobiles ou encore des régimes « comme j’aime »
Voulant tester Tensorflow (un outil open source d’apprentissage automatique développé par Google), j’ai fabriqué un prototype qui coupe le son de la télé durant la pub puis remet le son quand elle se termine rendant ainsi ces coupures moins pénibles.
Pour arriver à cela j’ai entraîné une intelligence artificielle à différencier un programme d’une publicité et je lui ai aussi appris a reproduire le signal du bouton mute de la télécommande.
L’apprentissage
Il existe plein de façons de détecter automatiquement une publicité télévisée mais aucune de vraiment simple. Or vous l’avez sans doute déjà remarqué, les chaînes insèrent leurs logos dans les programmes mais jamais dans les publicités. Il suffirait donc de regarder si un logo est présent ou non.
Il y a encore quelques années cette tâche aurait été quasi impossible car les logos semi-transparents se fondent dans les programmes et sont alors difficilement détectables.

Mais début novembre 2019, Google a annoncé une nouvelle version de Teachable Machine et les démos que j’avais vues semblaient prometteuses. Ce site permet de créer et tester de manière très intuitive un modèle de données avec Tensorflow. Et en plus d’être simple, le modèle généré est utilisable gratuitement et 100% hors connexion. Parfait pour tester rapidement une idée.
Plus d’infos : https://www.blog.google/technology/ai/teachable-machine/

Il suffit de créer des classes et uploader des images pour entraîner le modèle. Au début j’avais créé une classe par chaîne mais je me suis rendu compte que ce n’était pas nécessaire. Avec juste 2 classes la précision du modèle est même encore meilleure.

On peut ensuite exporter le modèle au format Tensorflow Lite. Cette version light permet de fonctionner sur des petites configurations telles que des Raspberry Pi (micro ordinateur à moins de 40€). Avec cette configuration, l’analyse d’une photo se fera au final en 300 ms environ.
Le script
Je ne vais pas m’étendre sur le script. Celui-ci est disponible sur Github https://github.com/katze/adblock-tv mais globalement il m’aura fallu gérer 2 problématiques :
- Faire tourner le modèle TensorFlow light. Heureusement, j’ai eu beaucoup de chance de trouver un exemple sur le Github de TensorFlow : https://github.com/tensorflow/examples/tree/master/lite/examples/image_classification/raspberry_pi
- Simuler le bouton mute de la télécommande. Depuis des années, le projet lirc permet de gérer l’infrarouge. Une fois installé et configuré, la simple commande irsend SEND_ONCE TV KEY_MUTE -#2 permet de mettre ma télé en MUTE
Le matériel
- Raspberry pi 2
- Caméra v2 8MP + support imprimé en 3D
- led infrarouge récupérée dans une vielle télécommande
Verdict ?
La mise en place de genre de solution est vraiment très simple et la détection fonctionne avec peu de données. Pour la construction du modèle j’aurais utilisé une cinquantaine d’images de logos des principales chaines Françaises dont 8 à peine avec le logo de France 3.
Il y aurait moyen d’améliorer pas mal de choses, mais pour un proto vite fait je suis ravi.
Addendum
Je voudrais commencer par vous remercier d’avoir pris le temps de regarder cette vidéo et lire cet article. Vos retours sur Reddit, Koreus, Creapills Facebook et Youtube me laissent sans voix.
J’étais loin d’imaginer d’avoir une telle audience avec ce projet.
Je développe depuis des années et j’ai pris l’habitude de réaliser des prototypes pour mieux connaître des technos avant de potentiellement les utiliser dans des projets professionnels. Dans le cas actuel, je voulais tester TensorFlow qui est un outil d’apprentissage automatique développé par Google et Teachable Machine qui est une surcouche web permettant de créer des modèles de données très rapidement.
C’est donc avec cette techno en tête que j’ai cherché un cas d’usage simple, pertinent et rapide à mettre en place. L’idée du bloqueur de pubs TV m’est alors venue. J’ai testé plusieurs approches, rencontré des problèmes, trouvé des alternatives et je suis enfin arrivé avec le prototype de cette vidéo.
Le but n’était donc pas d’en faire un produit même si je me rends compte qu’au final le concept en intéresse plus d’un. Je partagerai donc très probablement le code source dans les semaines à venir.
Enfin venons-en au terme d’Intelligence Artificielle. Il est question d’IA car il y a eu une première phase « d’apprentissage » avec Tensorflow qui permet de créer un modèle de données. Dans mon cas il s’agit d’un apprentissage supervisé, je lui dit quoi tester et le résultat que j’en attends. Tant que le résultat n’est pas bon, je continue de l’alimenter avec de nouvelle données jusqu’a la machine finisse par répondre correctement. Il existe d’autres méthodes d’apprentissage non supervisées mais pourquoi compliquer les choses ? Ce modèle est ensuite amélioré au cours du temps avec de nouvelles données augmentant la pertinence de détection.
Ensuite, le terme d’intelligence artificielle est utilisé en développement lorsqu’on inclut des fonctionnalités cognitives à un programme. Ici c’est la vue et la reconnaissance de données mais aussi la déduction ex : « Je pense à 83% que cette image est le logo de France 2 »
Pour ceux qui ne sont pas convaincus : https://youtu.be/1z3DeOFbZvw?t=27

Vous souhaitez continuer à en parler ou entrer dans les détails ? Laissez un commentaire ou envoyez-moi un mail : adblocktv at lichat.net
Michael