Aller au contenu

Comment créer un lecteur vidéo aléatoire Raspberry Pi

    1647909603

    Si vous avez un tas de films, d’émissions ou d’autres fichiers vidéo locaux et que vous ne pouvez pas décider lequel regarder, vous pouvez faire choisir Raspberry Pi pour vous, d’une simple pression sur un bouton. Pour être juste, il existe des moyens plus simples de lire une vidéo aléatoire, à partir de fichiers locaux ou sur le Web, mais ils ne sont pas aussi amusants que ce projet. Alors attrapez le pop-corn et commençons à construire et à coder notre propre lecteur vidéo aléatoire Raspberry Pi !

    Matériel

    Construire le circuit pour ce projet est simple. Nous n’avons besoin que de trois boutons, connectés au GPIO aux broches 2,3,4 et chacun de ces boutons doit également être connecté à GND, pour cela, nous pouvons utiliser une seule broche GND sur le Pi, et un fil de connexion femelle à mâle . Connecté au rail – d’une planche à pain signifie que nous avons plusieurs connexions GND qui peuvent être connectées via les deux fils de raccordement mâle à mâle. Voir le diagramme dans le téléchargement de ce projet pour plus d’informations. Lorsque le matériel est construit, attachez tous les accessoires requis pour votre Pi et démarrez sur le bureau Raspbian.

    Logiciel

    Comme pour la plupart des projets Pi, avant de faire quoi que ce soit d’autre, vous devrez configurer votre Raspberry Pi avec une copie actuelle du système d’exploitation Raspbian. Si vous ne souhaitez pas utiliser un clavier et une souris dédiés, vous pouvez créer un Raspberry Pi sans tête auquel vous accédez depuis un autre ordinateur via VNC.

    Avant de pouvoir écrire du code Python, nous devons installer deux bibliothèques qui nous aideront à créer le projet. Ouvrez un terminal et tapez ce qui suit, n’oubliez pas d’appuyer sur Entrée à la fin de chaque ligne.

    $ sudo pip3 install glob$ sudo pip3 install keyboard

    Nous en reparlerons plus tard. Pour l’instant ouvrez l’éditeur Python 3, qui se trouve dans le menu Programmation et cliquez sur Fichier >> Nouveau pour créer un nouveau fichier vierge. Cliquez immédiatement sur Fichier >> Enregistrer dans la nouvelle fenêtre. Enregistrez le code sous VideoPlayer.py et n’oubliez pas de sauvegarder souvent !

    Alors maintenant, nous commençons à écrire le code, et notre premier acte est d’importer les bibliothèques dont nous avons besoin. Les trois premières bibliothèques sont utilisées pour détecter les pressions sur les boutons (GPIO Zero), empêcher le code de s’exécuter une fois et de sortir (pause) et de choisir une vidéo aléatoire (choix.)

    à partir du bouton d’importation gpiozero à partir de la pause d’importation du signal à partir du choix d’importation aléatoire

    Les trois dernières importations sont une bibliothèque que nous utiliserons pour lister le contenu d’un répertoire (glob), exécuter des commandes de terminal (sous-processus) et la dernière est une bibliothèque pour émuler un clavier (keyboard.)

    import globimport subprocessimport clavier

    Ensuite, nous créons trois fonctions, des blocs de code que nous pouvons réutiliser plus tard en appelant leur nom. La première fonction s’appelle « play_video » et crée d’abord une liste (un objet de stockage de données) appelée « vidéos ».

    def play_video():videos = []

    Pour remplir la liste d’informations, en particulier une liste de toutes les vidéos que nous pouvons lire, nous utilisons une boucle for, qui itérera sur chaque fichier d’un répertoire, tant qu’il s’agit d’un fichier vidéo mp4. Pour cela on utilise « glob » pour accéder au répertoire « /media/pi/Videos » qui est en réalité une clé USB appelée « Videos » pleine de fichiers mp4. Modifiez-le pour qu’il corresponde au nom du répertoire choisi rempli de vidéos. Chaque fois qu’un mp4 est trouvé, il est ajouté à la liste des « vidéos » que nous venons de créer.

    pour le fichier dans glob.glob(« /media/pi/Videos/*.mp4 ») : videos.append(file)

    Alors maintenant, vérifions que la liste a été remplie avec des noms de fichiers en imprimant le contenu de la liste dans le shell Python.

    imprimer (vidéos)

    Ensuite, nous choisirons une vidéo aléatoire dans la liste et la stockerons dans une variable appelée « choisi », encore une fois nous l’imprimerons dans le shell Python.

    Ensuite, nous choisirons une vidéo au hasard dans la liste et la stockerons dans une variable appelée « choisi », encore une fois nous l’imprimerons sur le shell Python choisi = choix(vidéos) impression(choisi) impression(choisi)

    La dernière ligne de cette fonction utilise la classe Popen de la bibliothèque de sous-processus pour exécuter une commande comme si nous étions assis devant le terminal, et cette commande consiste à ouvrir le lecteur multimédia omxplayer, puis à lire la vidéo choisie.

    subprocess.Popen([‘omxplayer’,(choisi)])

    La fonction suivante s’appelle « stop_video » et comme vous pouvez le deviner, elle arrêtera la vidéo en cours de lecture. Pour cela, nous utilisons la bibliothèque du clavier, en particulier la fonction « press_and_release » pour simuler l’appui sur la touche « q ».

    def stop_video() : keyboard.press_and_release(‘q’)

    La dernière fonction s’appelle « pause_video » et émule la pression de la barre d’espace sur le clavier, c’est ainsi que omxplayer met la vidéo en pause.

    def pause_video() : keyboard.press_and_release(‘space’)

    Avec les fonctions créées, nous devons ensuite indiquer à notre code où nos boutons sont connectés. Nous avons trois boutons connectés, randomiser (play), stop et pause_button. Ces boutons sont connectés au GPIO aux broches 2, 3 et 4 respectivement.

    randomiser = Button(2)stop = Button(3)pause_button = Button(4)

    Ok, ainsi de suite jusqu’à la dernière partie, et c’est la partie qui recherche lorsqu’un bouton est enfoncé et réagit en conséquence. Mais d’abord, nous encapsulons cette section dans un gestionnaire d’exceptions. Il essaiera d’exécuter le code, mais si l’utilisateur appuie sur CTRL + C, le code se terminera. Donc, pour la section try, notre code imprimera d’abord trois lignes dans le shell, ce sont les instructions à l’utilisateur. Vous remarquerez « n » entre chaque couleur. C’est un raccourci Python pour insérer une nouvelle ligne entre chacune des instructions.

    essayez : print(« Appuyez sur le bouton VERT pour démarrernJAUNE pour faire une pausenROUGE pour arrêter »)

    Nos trois boutons attendent d’être pressés, et en utilisant la bibliothèque GPIO Zero, nous appelons la classe « when_pressed » pour détecter quand chacun des boutons est pressé. Lorsque cela se produit, la fonction correspondante est exécutée. Ainsi, lorsque nous appuyons sur le bouton vert de randomisation (lecture), il choisit au hasard une vidéo de la clé USB et la lit. Vous remarquerez que les fonctions n’ont pas de () à la fin du nom de la fonction. En effet, s’ils le faisaient, le code s’exécuterait automatiquement. À l’heure actuelle, ils sont prêts à fonctionner à la demande.

    randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video

    La dernière ligne de cette section est une simple pause(), et elle est utilisée pour maintenir le code en cours d’exécution, et pas seulement pour quitter après avoir été exécuté une fois.

    pause()

    Mais que se passe-t-il si l’utilisateur appuie sur CTRL + C ? Eh bien, il s’agit d’une « interruption du clavier » et si cela se produit, nous imprimerons simplement une ligne vide, puis « Quitter » sur l’écran.

    sauf KeyboardInterrupt: print(« nEXIT »)

    Alors maintenant, enregistrez votre code et ouvrez un terminal dans le répertoire où vous avez enregistré le code. Pour utiliser le code, nous devons l’exécuter avec sudo (pouvoirs root) car la bibliothèque de clavier utilisée dans le projet ne peut être utilisée qu’en tant que root / sudo.

    Pour exécuter le type de code :

    $ sudo python3 VideoPlayer.py

    Lorsque vous êtes prêt, appuyez sur le bouton vert pour lire la vidéo choisie au hasard, pour faire une pause, appuyez sur jaune et pour arrêter, appuyez sur rouge. Profitez de votre soirée et ne renversez pas le pop-corn !

    Vous pouvez intégrer le projet dans une boîte solide, afin que les petites mains ne cassent pas l’électronique. Vous pouvez également utiliser des boutons de style arcade qui sont beaucoup plus robustes et moins susceptibles d’être cassés.

    Le code complet

    Si vous souhaitez simplement copier et coller le contenu dans le fichier VideoPlayer.py, le voici :

    from gpiozero import Buttonfrom signal import pausefrom random import choiceimport globimport subprocessimport keyboarddef play_video(): videos = [] for file in glob.glob(« /media/pi/Videos/*.mp4 »): videos.append(file)print( videos)chosen = choix(vidéos) print(choisi) print(choisi)subprocess.Popen([‘omxplayer’,(choisi)]) def stop_video()keyboard.press_and_release(‘q’)def pause_video()keyboard.press_and_release( ‘space’)randomiser – Button(2)stop = Button(3)pause_button = Button(4)try:print(« Appuyez sur le bouton VERT pour démarrernJAUNE pour faire une pausenRED pour arrêter »)randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause()except KeyboardInterrupt : print(« nEXIT »)Bibliothèque de clavier et confidentialité

    Dans ce projet, nous avons utilisé la bibliothèque Keyboard Python pour émuler un clavier en utilisant uniquement les boutons-poussoirs qui contrôlaient la lecture, la pause et l’arrêt de la lecture vidéo. La bibliothèque de clavier est assez puissante et peut être utilisée pour appuyer sur n’importe quelle touche, nous pouvons donc automatiser plusieurs pressions de touches à partir d’un seul bouton (pratique pour quitter vim.) La bibliothèque peut également être utilisée pour écrire du texte à l’écran, dans un manière similaire à la scène « suivez le lapin blanc » de Neo dans The Matrix. Mais la fonction la plus dangereuse de cette bibliothèque est qu’elle peut être utilisée pour enregistrer chaque pression de touche sur la machine cible.

    Ces pressions sur les touches peuvent être enregistrées dans une liste, puis enregistrées dans un fichier, puis utilisées à des fins néfastes. Alors soyons clairs enfants, adultes. L’enregistrement des pressions sur les touches d’un utilisateur, sans son consentement, est illégal et peut vous causer de nombreux ennuis avec l’école/le travail/les autorités. Alors ne le faites pas! Cela dit, il peut être utilisé comme un outil puissant lors du débogage de la façon dont un utilisateur interagit avec votre code, donc pour les tests de logiciels (avec le consentement du grand public et des testeurs internes), vous pouvez voir sur quelles touches ils appuyaient juste avant le code enfermé / est devenu thermonucléaire !

    La bibliothèque de clavier fonctionne avec Linux et Windows et c’est très amusant de jouer avec. Pour en savoir un peu plus sur cette bibliothèque, rendez-vous sur ce billet de blog https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ et voyez quelques exemples d’utilisation.

    Cet article a été initialement publié dans Linux Format Magazine.

    0 0 votes
    Rating post
    S’abonner
    Notification pour
    guest
    0 comments
    Commentaires en ligne
    Afficher tous les commentaires
    0
    Nous aimerions avoir votre avis, veuillez laisser un commentaire.x