Une intelligence artificielle qui regarde la télé ? Pourquoi faire ?

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 entrainé 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 pleins 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 chaines 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émo que j’avais vu semblaient prometteur. 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 entrainer le modèle. Au début j’avais créé une classe par chaine 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, je le posterai sans doute sur Github mais globalement il m’aura fallu gérer 2 problématiques :

  • 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 connaitre des techno 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 proto de cette vidéo.

Le but n’était donc pas d’en faire un produit même si je me rend 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 inclus 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

38 réflexions au sujet de « Une intelligence artificielle qui regarde la télé ? Pourquoi faire ? »

    1. Bonjour à tous.
      Sujet qui me passionne depuis de nombreuses années…
      Projet mis en place il y a une 10zaine d’années et déjà bien avancé au-delà de la notion du publicité : Catégorisation des émissions et actions à déclencher suivant la catégorie visionnée…
      Je suis certain qu’il y a quelque chose à faire de très concret.
      Je vous ai envoyé un mail aujourd’hui (dimanche 19 janvier) à ce sujet.
      Au plaisir d’avoir une réponse.
      Jean-Marie

    1. Pour le moment, le logo est présent sur tous les films et programmes que j’ai pu voir sauf sur certaines chaines comme Arte. Dans ce cas je mets en pause le dispositif.

  1. sinon fait passer le flux TV par le raspberry en fonction de l’heure et de la chaîne on connaît le format des pubs ( a 18h les pubs durent 10min) du coup on ralenti l’émission en cours de 10 min (au prorata du temps regardé )et la transition pub est invisible ou diminuer si on a pris l’émission en cour.
    sinon effectivement le son des pubs est plus fort du coup on peut aussi se basé la dessus. je me rappelle plus tres bien comment ils vont en jouant sur les fréquences propre … un truc du genre.

  2. Mon sauveur ! je déteste les pub, moi a chaque pub je coupe le son avec ma télécommande , votre système est vraiment super, vous pourriez facilement faire de très bonne vente avec un tel produit ! je serai votre premier acheteur ! 🙂
    Merci.

      1. En terme de différenciation instinctivement je chercherai a évaluer la piste screening sur stream, y aurait moyen en plus de se passer de l’hardware en s’intercalant entre ton input et output d’apps « télécommande » (si API Free, Orange…).

  3. Pas mal ! L’idéal serait de choper le signal vidéo en HDMI et de couper le son en HDMI-CEC pour éviter la camera et l’infrarouge, mais ça comporte d’autres inconvénients…

    1. C’était mon idée initiale mais impossible d’obtenir la TNT facilement et légalement.
      Je crois que chez certains opérateurs un flux rtsp est dispo mais pas chez orange 🙁

  4. Bonjour et bravo,
    Mais qu’en est il des pubs non comptabilisées pubs qu’on nous balance entre les vraies pubs et le film?
    Vous savez les pubs qui commencent toujours par « passez une bonne soirée avec mon produitsXXX ou passez un bon film avec mon produit y?
    Une mise à jour?

  5. Il devrait y avoir moyen de faire en sorte de se passer de la caméra et du câble infrarouge.

    J’utilise un RPi en guise de récepteur TNT avec la carte « TV HAT ».
    Côté logiciel, j’ai installé Kodi et TVHeadend pour pouvoir recevoir les flux DVB-T des chaînes TNT et jouer les chaînes à l’écran.

    Kodi permet de développer ses propres plugins et TVHeadend permet de streamer les flux TV sur le réseau local (via RTSP entre autres).
    Passer un plugin/script comme le tien permettrait d’analyser une zone spécifique du flux pour automatiser le niveau du volume.

    Ce sont des idées en vrac mais je pense que ça fait de bonnes pistes de départ pour envisager de passer au bloqueur de pub « tout logiciel ».

    1. Je suis assez d’accord avec toi ! Il faudrait se passer de la caméra. La technique serait d’analyser le flux télé et de détecter les marqueurs de publicité.
      En tout cas très bon prototype mais souvent décrié par les géants de la télé qui mènent leur business sur la publicité. C’est pour cela que l’on ne trouve pas ce genre de chose pour le grand public.

  6. très bonne réussite. Bravo. Pour ma part, j’avais pensé à cette idée avec uniquement le son du « jingle » que possède chaque chaine. Mais je me suis arrêté à une « idée ». Il faut en revanche que le rasp ait toujours accès au son lorsque celui de la télé est coupé. (donc utiliser une des sorties de la télé).

    Félicitation pour ce beau projet. J’attends les scripts avec impatience sur github 🙂

  7. Un grand merci à toi qui va certainement sauver les soirées de mon père 🙂
    J’aimerai beaucoup en savoir + et mettre en place tout ceci chez moi.
    Contacte moi par mail si tu en as le temps, ce serait très sympa.
    En te remerciant 😉
    ps: je ne connaissais pas ton site qui vient d’être ajouté à mes flus rss

  8. Marre de cette pub française, inintelligente, moche…
    Merci pour cette fabuleuse « invention » qui présage de belles et bonnes choses que vous, les jeunes, êtes à même de produire.

  9. Une autre option que la caméra, est l’acquisition vidéo en analogique. L’idée est de dupliquer le signal HDMI, le convertir en signal composite (câble jaune) et il y a des dongles USB qui récupère le signal.
    Sur certaines box, il y a deux sorties, l’une HDMI et l’autre composite, donc il ne manque que la clef USB d’acquisition.

  10. Bravo ! Super !
    Pour ma part, j’avais pensé à cette idée avec
    un système connecté et communautaire. Pas besoin de reconnaissance automatisée, quand une pub passe l’utilisateur indique d’une façon ou d’une autre au système le début de la pub, et la fin de la pub. Avec suffisamment de signalements, le système coupe le son des pubs identifiées. C’est un peu similaire aux signalements du type Waze.
    Mais c’est juste une théorie.
    Bravo encore pour votre système fonctionnel.
    Mais quid si une chaine met le logo constamment dans tout le flux ?

  11. Salut Michael
    Je visite régulièrement cette page en espérant un jour voir un lien vers github pour pouvoir télécharger le code. Est ce toujours d’actualité ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *