많은 영화, 프로그램 또는 기타 로컬 비디오 파일이 있고 어떤 것을 볼지 결정할 수 없는 경우 버튼을 터치하여 Raspberry Pi가 자동으로 선택하도록 할 수 있습니다. 공정하게 말하면 로컬 파일이나 웹에서 임의의 비디오를 재생하는 더 쉬운 방법이 있지만 이 프로젝트만큼 재미있지는 않습니다. 그러니 팝콘을 들고 우리만의 라즈베리 파이 랜덤 비디오 플레이어를 만들고 코딩해 봅시다!
하드웨어
이 프로젝트의 회로를 만드는 것은 간단합니다. 핀 2,3,4에서 GPIO에 연결된 세 개의 버튼만 필요하며 이 각 버튼도 GND에 연결해야 합니다. 이를 위해 Pi의 단일 GND 핀과 암-수 점퍼 와이어를 사용할 수 있습니다. . 브레드보드의 – 레일에 연결되었다는 것은 두 개의 수-수 점퍼 와이어를 통해 연결할 수 있는 여러 개의 GND 연결이 있음을 의미합니다. 자세한 내용은 이 프로젝트의 다운로드에 있는 다이어그램을 참조하십시오. 하드웨어가 구축되면 Pi에 필요한 모든 액세서리를 연결하고 Raspbian 데스크탑으로 부팅합니다.
소프트웨어
대부분의 Pi 프로젝트와 마찬가지로 다른 작업을 수행하기 전에 Raspbian 운영 체제의 현재 복사본으로 Raspberry Pi를 설정해야 합니다. 전용 키보드와 마우스를 사용하지 않으려면 VNC를 통해 다른 컴퓨터에서 액세스하는 헤드리스 Raspberry Pi를 만들 수 있습니다.
Python 코드를 작성하기 전에 프로젝트를 생성하는 데 도움이 되는 두 개의 라이브러리를 설치해야 합니다. 터미널을 열고 다음을 입력합니다. 각 줄 끝에서 Enter 키를 누르는 것을 잊지 마십시오.
$ sudo pip3 설치 glob$ sudo pip3 설치 키보드
우리는 나중에 그들에 대해 더 이야기 할 것입니다. 지금은 프로그래밍 메뉴에 있는 Python 3 편집기를 열고 파일 >> 새로 만들기를 클릭하여 새 빈 파일을 만듭니다. 즉시 새 창에서 파일 >> 저장을 클릭하십시오. 코드를 VideoPlayer.py로 저장하고 자주 저장하는 것을 잊지 마십시오!
이제 코드 작성을 시작하고 첫 번째 작업은 필요한 라이브러리를 가져오는 것입니다. 처음 세 개의 라이브러리는 버튼 누름(GPIO Zero)을 감지하고 코드가 한 번 실행되고 종료되는 것을 중지(일시 중지)하고 임의의 비디오를 선택(선택)하는 데 사용됩니다.
gpiozero에서 가져오기 버튼에서 신호 가져오기 일시 중지에서 임의 가져오기 선택에서
마지막 세 개의 가져오기는 디렉토리(glob)의 내용을 나열하고 터미널 명령(하위 프로세스)을 실행하는 데 사용할 라이브러리이고 마지막은 키보드(키보드)를 에뮬레이트하는 라이브러리입니다.
import globimport 하위 프로세스가져오기 키보드
계속해서 3개의 함수, 즉 나중에 이름을 호출하여 재사용할 수 있는 코드 블록을 만듭니다. 첫 번째 함수는 “play_video”라고 하며 먼저 “videos”라는 목록(데이터 저장 개체)을 만듭니다.
def play_video():동영상 = []
목록을 정보, 특히 재생할 수 있는 모든 비디오 목록으로 채우기 위해 for 루프를 사용합니다. 이 루프는 mp4 비디오 파일인 한 디렉토리의 모든 파일을 반복합니다. 이를 위해 “glob”을 사용하여 mp4 파일로 가득 찬 “Videos”라는 USB 스틱인 “/media/pi/Videos” 디렉토리에 액세스합니다. 비디오로 가득 찬 선택한 디렉토리의 이름과 일치하도록 이것을 변경하십시오. mp4가 발견될 때마다 방금 만든 “동영상” 목록에 추가됩니다.
glob.glob(“/media/pi/Videos/*.mp4”)의 파일: videos.append(파일)
이제 목록의 내용을 Python 셸에 인쇄하여 목록에 파일 이름이 채워졌는지 확인하겠습니다.
인쇄(동영상)
그런 다음 목록에서 임의의 비디오를 선택하고 “chosen”이라는 변수에 저장합니다. 다시 이것을 Python 셸에 인쇄합니다.
그런 다음 목록에서 임의의 비디오를 선택하고 “chosen”이라는 변수에 저장합니다. 다시 이것을 Python 셸에 인쇄합니다. selected = choice(videos) print(chosen) print(chosen)
이 함수의 마지막 줄은 하위 프로세스 라이브러리의 Popen 클래스를 사용하여 마치 터미널에 앉아 있는 것처럼 명령을 실행하고 이 명령은 omxplayer 미디어 플레이어를 열고 선택한 비디오를 재생하는 것입니다.
subprocess.Popen([‘omxplayer’,(선택)])
다음 함수는 “stop_video”라고 하며 추측할 수 있듯이 현재 재생 중인 비디오를 중지합니다. 이를 위해 키보드 라이브러리, 특히 “press_and_release” 기능을 사용하여 “q” 키를 누르는 것을 시뮬레이션합니다.
def stop_video(): keyboard.press_and_release(‘q’)
마지막 기능은 “pause_video”라고 하며 omxplayer가 비디오를 일시 중지하는 방법인 키보드의 스페이스바를 누르는 것을 에뮬레이트합니다.
def pause_video(): keyboard.press_and_release(‘공백’)
함수가 생성되면 다음으로 버튼이 연결된 위치를 코드에 알려야 합니다. 3개의 버튼, randomizer(재생), stop 및 pause_button이 연결되어 있습니다. 이 버튼은 각각 핀 2, 3, 4에서 GPIO에 연결됩니다.
랜더마이저 = 버튼(2) 정지 = 버튼(3)pause_button = 버튼(4)
자, 마지막 부분으로 넘어가겠습니다. 버튼이 눌렸을 때 찾고 그에 따라 반응하는 부분입니다. 그러나 먼저 이 섹션을 예외 처리기에서 래핑합니다. 코드 실행을 시도하지만 사용자가 CTRL + C를 누르면 코드가 종료됩니다. 따라서 try 섹션의 경우 코드는 먼저 셸에 세 줄을 인쇄합니다. 이것이 사용자에 대한 지침입니다. 각 색상 사이에 “n”이 표시됩니다. 이것은 각 명령 사이에 새 줄을 삽입하는 Python 약식입니다.
try: print(“시작하려면 녹색 버튼을 누르세요.n일시 중지하려면 노란색 버튼을 눌러 중지하세요.”)
세 개의 버튼이 눌려지기를 기다리고 있으며 GPIO Zero 라이브러리를 사용하여 “when_pressed” 클래스를 호출하여 각 버튼이 눌려지는 시점을 감지합니다. 이 경우 해당 기능이 실행됩니다. 따라서 Green randomizer(재생) 버튼을 누르면 USB 스틱에서 무작위로 비디오를 선택하여 재생합니다. 함수 이름 끝에 ()가 없는 것을 알 수 있습니다. 그렇게 하면 코드가 자동으로 실행되기 때문입니다. 바로 지금 그들은 온디맨드로 실행할 준비가 되어 있습니다.
randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video
이 섹션의 마지막 줄은 간단한 pause()이며 한 번 실행한 후 종료되는 것이 아니라 코드를 계속 실행하는 데 사용됩니다.
정지시키다()
그러나 사용자가 CTRL + C를 누르면 어떻게 될까요? 이것은 “Keyboard Interrupt”입니다. 그런 일이 발생하면 단순히 빈 줄을 인쇄한 다음 화면에 “Exit”를 출력합니다.
KeyboardInterrupt 제외: print(“nEXIT”)
이제 코드를 저장하고 코드를 저장한 디렉토리로 터미널을 엽니다. 프로젝트에서 사용되는 키보드 라이브러리는 root/sudo로만 사용할 수 있으므로 코드를 사용하려면 sudo(루트 권한)로 코드를 실행해야 합니다.
코드 유형을 실행하려면:
$ sudo python3 VideoPlayer.py
준비가 되면 녹색 버튼을 눌러 무작위로 선택한 비디오를 재생하고 일시 중지하려면 노란색을 누르고 중지하려면 빨간색을 누릅니다. 팝콘 흘리지 마시고 즐거운 저녁 보내세요!
작은 손이 전자 제품을 부러뜨리지 않도록 견고한 상자에 프로젝트를 포함할 수 있습니다. 훨씬 더 견고하고 파손될 가능성이 적은 아케이드 스타일 버튼을 사용할 수도 있습니다.
완전한 코드
내용을 복사하여 VideoPlayer.py 파일에 붙여넣으려면 다음과 같습니다.
gpiozero에서 가져오기 버튼에서 신호 가져오기 일시 중지에서 임의 가져오기 선택 가져오기 globimport 하위 프로세스 가져오기 keyboarddef play_video(): 동영상 = [] for file in glob.glob(“/media/pi/Videos/*.mp4”): videos.append(file)print( 동영상)선택 = 선택(동영상) 인쇄(선택) 인쇄(선택)subprocess.Popen([‘omxplayer’,(선택)]) 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(“정지하려면 녹색 버튼을 눌러 nYELLOW를 눌러 중지하십시오.RED를 일시 중지하려면”)randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause()제외 KeyboardInterrupt: print(“nEXIT”)키보드 라이브러리 및 개인 정보
이 프로젝트에서 우리는 키보드 Python 라이브러리를 사용하여 비디오 재생, 재생, 일시 중지 및 중지를 제어하는 푸시 버튼만 사용하여 키보드를 에뮬레이트했습니다. 키보드 라이브러리는 다소 강력하고 아무 키나 누르는 데 사용할 수 있으므로 하나의 푸시 버튼으로 여러 키 누름을 모두 자동화할 수 있습니다(vim을 종료할 때 유용함). 라이브러리는 또한 화면에 텍스트를 쓰는 데 사용할 수 있습니다. 매트릭스에서 네오의 “하얀 토끼를 따라라” 장면과 유사한 방식입니다. 그러나 이 라이브러리의 가장 위험한 기능은 대상 시스템에서 모든 키 누름을 기록하는 데 사용할 수 있다는 것입니다.
이러한 키 누름은 목록에 기록된 다음 파일에 저장한 다음 악의적인 목적으로 사용할 수 있습니다. 그러니 아이들, 어른들을 분명히 합시다. 사용자의 동의 없이 키 누름을 녹음하는 것은 불법이며 학교/직장/당국에 많은 문제를 일으킬 수 있습니다. 그러니 하지마! 즉, 사용자가 코드와 상호 작용하는 방식을 디버깅할 때 강력한 도구로 사용할 수 있으므로 소프트웨어 테스트(일반 대중 및 사내 테스터의 동의하에)를 위해 코드 직전에 어떤 키를 눌렀는지 확인할 수 있습니다. 갇혔다 / 열핵이 되었다!
키보드 라이브러리는 Linux 및 Windows와 함께 작동하며 재미있게 플레이할 수 있습니다. 이 라이브러리에 대해 조금 더 읽으려면 이 블로그 게시물 https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/로 이동하여 사용 방법에 대한 몇 가지 예를 확인하십시오.
이 기사는 원래 Linux Format Magazine에 실렸습니다.