यदि आपके पास फिल्मों, शो या अन्य स्थानीय वीडियो फ़ाइलों का एक समूह है और यह तय नहीं कर पा रहे हैं कि किसे देखना है, तो आप एक बटन के स्पर्श में रास्पबेरी पाई को अपने लिए चुन सकते हैं। निष्पक्ष होने के लिए, स्थानीय फ़ाइलों से या वेब पर यादृच्छिक वीडियो चलाने के आसान तरीके हैं, लेकिन वे इस प्रोजेक्ट की तरह मज़ेदार नहीं हैं। तो पॉपकॉर्न लें और आइए अपने रास्पबेरी पाई रैंडम वीडियो प्लेयर का निर्माण और कोडिंग शुरू करें!
हार्डवेयर
इस परियोजना के लिए सर्किट बनाना सरल है। हमें केवल तीन बटन की आवश्यकता होती है, पिन 2,3,4 पर GPIO से जुड़े होते हैं और इनमें से प्रत्येक बटन को GND से भी कनेक्ट करने की आवश्यकता होती है, इसके लिए हम Pi पर एक GND पिन और एक महिला से पुरुष जम्पर वायर का उपयोग कर सकते हैं। . ब्रेडबोर्ड के – रेल से जुड़े होने का मतलब है कि हमारे पास कई GND कनेक्शन हैं जिन्हें दो पुरुष से पुरुष जम्पर तारों के माध्यम से जोड़ा जा सकता है। अधिक जानकारी के लिए इस प्रोजेक्ट के डाउनलोड में आरेख देखें। जब हार्डवेयर बनाया जाता है, तो अपने पीआई के लिए आवश्यक सभी सहायक उपकरण संलग्न करें और रास्पियन डेस्कटॉप पर बूट करें।
सॉफ्टवेयर
अधिकांश पाई परियोजनाओं की तरह, इससे पहले कि आप कुछ और करें, आपको रास्पबेरी पाई को रास्पियन ऑपरेटिंग सिस्टम की एक वर्तमान प्रति के साथ सेट करना होगा। यदि आप एक समर्पित कीबोर्ड और माउस का उपयोग नहीं करना चाहते हैं, तो आप एक हेडलेस रास्पबेरी पाई बना सकते हैं जिसे आप वीएनसी के माध्यम से दूसरे कंप्यूटर से एक्सेस करते हैं।
इससे पहले कि हम कोई पायथन कोड लिख सकें, हमें दो पुस्तकालय स्थापित करने होंगे जो हमें प्रोजेक्ट बनाने में मदद करेंगे। एक टर्मिनल खोलें, और निम्न टाइप करें, प्रत्येक पंक्ति के अंत में एंटर दबाना याद रखें।
$ sudo pip3 ग्लोब स्थापित करें $ sudo pip3 कीबोर्ड स्थापित करें
हम उनके बारे में बाद में बात करेंगे। अभी के लिए प्रोग्रामिंग मेन्यू में पाए जाने वाले पायथन 3 एडिटर को खोलें और नई ब्लैंक फाइल बनाने के लिए फाइल >> न्यू पर क्लिक करें। तुरंत फ़ाइल >> नई विंडो में सहेजें पर क्लिक करें। कोड को VideoPlayer.py के रूप में सहेजें और अक्सर सहेजना याद रखें!
तो अब हम कोड लिखना शुरू करते हैं, और हमारा पहला कार्य उन पुस्तकालयों को आयात करना है जिनकी हमें आवश्यकता है। पहले तीन पुस्तकालयों का उपयोग बटन प्रेस (जीपीआईओ ज़ीरो) का पता लगाने के लिए किया जाता है, कोड को एक बार चलने से रोकें और बाहर निकलें (रोकें) और एक यादृच्छिक वीडियो (पसंद) चुनने के लिए।
gpiozero आयात बटन से सिग्नल आयात विराम से यादृच्छिक आयात विकल्प से
अंतिम तीन आयात एक पुस्तकालय है जिसका उपयोग हम एक निर्देशिका (ग्लोब) की सामग्री को सूचीबद्ध करने के लिए करेंगे, टर्मिनल कमांड (सबप्रोसेस) चलाएंगे और अंतिम एक कीबोर्ड (कीबोर्ड) का अनुकरण करने के लिए एक पुस्तकालय है।
आयात ग्लोबिमपोर्ट सबप्रोसेसआयात कीबोर्ड
आगे बढ़ते हुए, हम तीन फ़ंक्शन बनाते हैं, कोड के ब्लॉक जिन्हें हम बाद में उनके नाम पर कॉल करके पुन: उपयोग कर सकते हैं। पहले फ़ंक्शन को “play_video” कहा जाता है और यह पहले “वीडियो” नामक एक सूची (डेटा स्टोरेज ऑब्जेक्ट) बनाता है।
def play_video (): वीडियो = []
सूची को जानकारी से भरने के लिए, विशेष रूप से हमारे द्वारा चलाए जा सकने वाले सभी वीडियो की एक सूची, हम लूप के लिए उपयोग करते हैं, जो एक निर्देशिका में प्रत्येक फ़ाइल पर पुनरावृति करेगा, जब तक कि यह एक mp4 वीडियो फ़ाइल है। इसके लिए हम “ग्लोब” का उपयोग निर्देशिका “/ मीडिया / पीआई / वीडियो” तक पहुंचने के लिए करते हैं जो वास्तव में एक यूएसबी स्टिक है जिसे “वीडियो” कहा जाता है जो mp4 फाइलों से भरा होता है। वीडियो से भरी अपनी चुनी हुई निर्देशिका के नाम से मिलान करने के लिए इसे बदलें। जब भी कोई mp4 मिलता है, उसे हमारे द्वारा अभी बनाई गई “वीडियो” सूची में जोड़ दिया जाता है।
glob.glob(“/media/pi/Videos/*.mp4”) में फ़ाइल के लिए: videos.append(file)
तो अब देखते हैं कि सूची की सामग्री को पायथन शेल में प्रिंट करके सूची को फ़ाइल नामों से भर दिया गया है।
प्रिंट (वीडियो)
फिर हम सूची से एक यादृच्छिक वीडियो चुनेंगे और इसे “चुने हुए” नामक एक चर में संग्रहीत करेंगे, फिर से हम इसे पायथन शेल में प्रिंट करते हैं।
फिर हम सूची से एक यादृच्छिक वीडियो चुनेंगे और इसे “चुने हुए” नामक एक चर में संग्रहीत करेंगे, फिर से हम इसे चुने गए पायथन शेल में प्रिंट करेंगे = पसंद (वीडियो) प्रिंट (चुना हुआ) प्रिंट (चुना हुआ)
इस फ़ंक्शन की अंतिम पंक्ति कमांड चलाने के लिए सबप्रोसेस लाइब्रेरी से Popen क्लास का उपयोग करती है जैसे कि हम टर्मिनल पर बैठे थे, और यह कमांड omxplayer मीडिया प्लेयर को खोलने और फिर चुने हुए वीडियो को चलाने के लिए है।
subprocess.Popen ([‘omxplayer’, (चुना हुआ)])
अगले फ़ंक्शन को “stop_video” कहा जाता है और जैसा कि आप अनुमान लगा सकते हैं कि यह वर्तमान में चल रहे वीडियो को रोक देगा। इसके लिए हम कीबोर्ड लाइब्रेरी का उपयोग करते हैं, विशेष रूप से “प्रेस_और_रिलीज” फ़ंक्शन “क्यू” कुंजी दबाकर अनुकरण करने के लिए।
डीईएफ़ स्टॉप_वीडियो (): कीबोर्ड.प्रेस_और_रिलीज़ (‘क्यू’)
अंतिम फ़ंक्शन को “pause_video” कहा जाता है और यह कीबोर्ड पर स्पेस बार को दबाने का अनुकरण करता है, जो कि omxplayer वीडियो को कैसे रोकता है।
def पॉज़_वीडियो (): कीबोर्ड.प्रेस_और_रिलीज़ (‘स्पेस’)
बनाए गए कार्यों के साथ, हमें अगला अपना कोड बताना होगा जहां हमारे बटन जुड़े हुए हैं। हमारे पास तीन बटन जुड़े हुए हैं, रैंडमाइज़र (प्ले), स्टॉप और पॉज़_बटन। ये बटन क्रमशः 2, 3 और 4 पिनों पर GPIO से जुड़े होते हैं।
रैंडमाइज़र = बटन (2) स्टॉप = बटन (3) पॉज़_बटन = बटन (4)
ठीक है तो पिछले भाग पर, और यह वह हिस्सा है जो एक बटन दबाए जाने पर दिखता है, और तदनुसार प्रतिक्रिया करता है। लेकिन पहले हम इस खंड को एक अपवाद हैंडलर में लपेटते हैं। यह कोड को चलाने का प्रयास करेगा, लेकिन यदि उपयोगकर्ता CTRL + C दबाता है तो कोड बाहर निकल जाएगा। तो ट्राई सेक्शन के लिए हमारा कोड पहले शेल में तीन लाइन प्रिंट करेगा, ये यूजर के लिए निर्देश हैं। आप प्रत्येक रंग के बीच “n” देखेंगे। प्रत्येक निर्देश के बीच एक नई लाइन डालने के लिए यह पायथन शॉर्टहैंड है।
कोशिश करें: प्रिंट करें (“शुरू करने के लिए हरा बटन दबाएं, रुकने के लिए लाल को रोकें”)
हमारे तीन बटन दबाए जाने की प्रतीक्षा कर रहे हैं, और जीपीआईओ ज़ीरो लाइब्रेरी का उपयोग करके हम प्रत्येक बटन दबाए जाने का पता लगाने के लिए “जब_प्रेस” कक्षा कहते हैं। जब ऐसा होता है तो संबंधित फ़ंक्शन चलाया जाता है। इसलिए जब हम ग्रीन रैंडमाइज़र (प्ले) बटन दबाते हैं तो यह बेतरतीब ढंग से यूएसबी स्टिक से एक वीडियो चुनता है और उसे चलाता है। आप देखेंगे कि फ़ंक्शन नाम के अंत में फ़ंक्शन में () नहीं है। ऐसा इसलिए है क्योंकि अगर उन्होंने किया, तो कोड अपने आप चलेगा। अभी वे मांग पर चलने को तैयार हैं।
रैंडमाइज़र.कब_प्रेस्ड = प्ले_वीडियो स्टॉप.व्हेन_प्रेस्ड = स्टॉप_वीडियो पॉज़_बटन।जब_प्रेस्ड = पॉज़_वीडियो
इस खंड की अंतिम पंक्ति एक साधारण विराम () है, और इसका उपयोग कोड को चालू रखने के लिए किया जाता है, न कि केवल एक बार चलने के बाद बाहर निकलने के लिए।
विराम ()
लेकिन अगर यूजर CTRL+C दबाता है तो क्या होता है? वैसे यह एक “कीबोर्ड इंटरप्ट” है और अगर ऐसा होता है तो हम बस एक खाली लाइन प्रिंट करेंगे और फिर स्क्रीन पर “एक्जिट” करेंगे।
कीबोर्ड इंटरप्ट को छोड़कर: प्रिंट (“nEXIT”)
तो अब अपना कोड सेव करें, और उस डायरेक्टरी के लिए एक टर्मिनल खोलें जहां आपने कोड को सेव किया है। कोड का उपयोग करने के लिए हमें इसे sudo (रूट पावर) के साथ चलाने की आवश्यकता है क्योंकि प्रोजेक्ट में उपयोग की जाने वाली कीबोर्ड लाइब्रेरी का उपयोग केवल रूट / sudo के रूप में किया जा सकता है।
कोड प्रकार चलाने के लिए:
$ sudo python3 VideoPlayer.py
तैयार होने पर बेतरतीब ढंग से चुने गए वीडियो को चलाने के लिए हरे बटन को दबाएं, रोकने के लिए पीला दबाएं, और रोकने के लिए लाल दबाएं। अपनी शाम का आनंद लें और पॉपकॉर्न न फैलाएं!
आप प्रोजेक्ट को एक सख्त बॉक्स में एम्बेड कर सकते हैं, ताकि छोटे हाथ इलेक्ट्रॉनिक्स को न तोड़ें। आप आर्केड शैली के बटनों का भी उपयोग कर सकते हैं जो कहीं अधिक मजबूत होते हैं और उनके टूटने की संभावना कम होती है।
पूरा कोड
यदि आप सामग्री को VideoPlayer.py फ़ाइल में कॉपी और पेस्ट करना चाहते हैं, तो यह है:
gpiozero से आयात बटन से सिग्नल इंपोर्ट पॉज से रैंडम इंपोर्ट चॉइस इंपोर्ट ग्लोबिमपोर्ट सबप्रोसेस इंपोर्ट कीबोर्डडेफ play_video (): वीडियो = [] ग्लोब में फाइल के लिए। ग्लोब (“/ मीडिया / पीआई / वीडियो / *। एमपी 4”): वीडियो। एपेंड (फाइल) प्रिंट ( वीडियो) चुना = पसंद (वीडियो) प्रिंट (चुना हुआ) प्रिंट (चुना हुआ) सबप्रोसेस। पॉपेन ([‘omxplayer’, (चुना हुआ)]) def stop_video() keyboard.press_and_release (‘q’) def पॉज़_वीडियो () keyboard.press_and_release( ‘स्पेस’) रैंडमाइज़र – बटन (2) स्टॉप = बटन (3) पॉज़_बटन = बटन (4) कोशिश करें: प्रिंट (“रोकने के लिए हरा बटन दबाएं, रोकने के लिए लाल करें”) यादृच्छिक। = पॉज़_वीडियो पॉज़ () कीबोर्डइंटरप्ट को छोड़कर: प्रिंट (“nEXIT”) कीबोर्ड लाइब्रेरी और गोपनीयता
इस प्रोजेक्ट में हमने कीबोर्ड का अनुकरण करने के लिए कीबोर्ड पायथन लाइब्रेरी का उपयोग किया, जो केवल पुश बटन का उपयोग करके वीडियो प्लेबैक को चलाने, रोकने और रोकने को नियंत्रित करता है। कीबोर्ड लाइब्रेरी बल्कि शक्तिशाली है और इसका उपयोग किसी भी कुंजी को दबाने के लिए किया जा सकता है, इसलिए हम एक पुश बटन (विम से बाहर निकलने के लिए आसान) से कई कुंजी प्रेस को स्वचालित कर सकते हैं। लाइब्रेरी का उपयोग स्क्रीन पर टेक्स्ट लिखने के लिए भी किया जा सकता है। द मैट्रिक्स के नियो के “फॉलो द व्हाइट रैबिट” दृश्य के समान। लेकिन इस पुस्तकालय का सबसे खतरनाक कार्य यह है कि इसका उपयोग लक्ष्य मशीन पर प्रत्येक कुंजी प्रेस को रिकॉर्ड करने के लिए किया जा सकता है।
इन कुंजी प्रेस को एक सूची में रिकॉर्ड किया जा सकता है, फिर एक फ़ाइल में सहेजा जा सकता है और फिर नापाक उद्देश्यों के लिए उपयोग किया जा सकता है। तो आइए बच्चों, वयस्कों को स्पष्ट करें। किसी उपयोगकर्ता की कुंजी प्रेस को उनकी सहमति के बिना रिकॉर्ड करना अवैध है और आपको स्कूल / काम / अधिकारियों के साथ बहुत परेशानी में डाल सकता है। तो मत करो! इसके साथ ही, यह डिबगिंग करते समय एक शक्तिशाली उपकरण के रूप में उपयोग किया जा सकता है कि उपयोगकर्ता आपके कोड के साथ कैसे इंटरैक्ट करता है, इसलिए सॉफ़्टवेयर परीक्षण के लिए (आम जनता और घरेलू परीक्षकों के साथ सहमति के तहत) आप देख सकते हैं कि कोड से ठीक पहले वे कौन सी कुंजी दबा रहे थे बंद कर दिया / थर्मोन्यूक्लियर चला गया!
कीबोर्ड लाइब्रेरी लिनक्स और विंडोज के साथ काम करती है और इसके साथ खेलने में बहुत मजा आता है। इस पुस्तकालय के बारे में कुछ और पढ़ने के लिए इस ब्लॉग पोस्ट https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ पर जाएं और इसके कुछ उदाहरण देखें कि इसका उपयोग कैसे किया जा सकता है।
यह आलेख मूल रूप से Linux Format Magazine में प्रकाशित हुआ था।