コード例 #1
0
 def __init__(self):
     # TODO: having inconsistencies detecting faces with given classifier
     self.face_cascade = cv2.CascadeClassifier(
         'haarcascade_frontalface_default.xml')
     self.cap = cv2.VideoCapture(0)
     self.cap.set(3, 1028)
     self.cap.set(4, 720)
     self.player = MediaPlayer()
     self.state = True
コード例 #2
0
 def __init__(self, root):
     super(VideoFrame, self).__init__(root)
     self.grid()
     self.root = root
     self.root.title("CV Media Controller")
     self.root.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(file='icon.png'))
     self.root.configure(bg='red')
     self.root.resizable(False, False)
     self.mode = tk.IntVar()
     self.mode.set(1)
     self.state_message = tk.StringVar()
     self.state_message.set("Enter a YouTube URL and press start to begin!")
     self.last_input_message = tk.StringVar()
     self.last_input_message.set("")
     self.player_time = tk.StringVar()
     self.player_time.set("")
     self.center_window()
     self.frame = tk.Frame(self, width=1200, height=700, bd=5)
     self.frame.configure(bg="black")
     self.frame.grid(row=0, column=0, columnspan=10, padx=8, pady=8)
     self.progress = ttk.Progressbar(self, orient="horizontal", length="900", mode="indeterminate")
     self.progress.grid(row=1, column=0, pady=10,  columnspan=9, sticky="E")
     self.player_time_label = tk.Label(self, height=1, width=30, textvariable=self.player_time)
     self.player_time_label.grid(row=1, column=9, columnspan=1, padx=8, sticky='W')
     self.url_label = tk.Label(self, text="YouTube URL:")
     self.url_label.grid(row=2, column=0, columnspan=1, padx=35)
     self.url_input = tk.Text(self, height=1, width=50)
     self.url_input.grid(row=2, column=1, columnspan=1, padx=8, sticky='W')
     self.start_button = tk.Button(self, text='Start', command=self.initialize_player)
     self.start_button.grid(row=2, column=2, columnspan=2, padx=8)
     self.mode_label = tk.Label(self, text="Mode:")
     self.mode_label.grid(row=3, column=0, columnspan=1, padx=10, pady=8, sticky="S")
     self.face_select = tk.Radiobutton(self, text="Facial Recognition", variable=self.mode, value=1)
     self.face_select.grid(row=3, column=1, columnspan=1, padx=8, sticky='SW')
     self.gesture_select = tk.Radiobutton(self, text="Gesture Recognition", variable=self.mode, value=2)
     self.gesture_select.grid(row=4, column=1, columnspan=1, padx=8, pady=8, sticky='NW')
     self.state_label = tk.Label(self, textvariable=self.state_message)
     self.state_label.grid(row=3, column=9, columnspan=1, padx=8, sticky="SE")
     self.last_input_message_label = tk.Label(self, textvariable=self.last_input_message)
     self.last_input_message_label.grid(row=4, column=9, columnspan=1, pady=8, padx=8, sticky='NE')
     self.player = MediaPlayer()
     self.player.player.set_hwnd(self.frame.winfo_id())
コード例 #3
0
from MediaModule import MediaPlayer
from CVModule import FaceDetector
import tkinter as tk
import tkinter.simpledialog

root = tk.Tk()
root.withdraw()
url = tk.simpledialog.askstring("Computer Vision Media Controller",
                                "Please Enter a valid YouTube URL")
player = MediaPlayer()
player.initialize(url)
face_detector = FaceDetector()
# These states dictate the direction of the main loop.  State[0] indicates what mode the program should be operating in
# (state[0] == True iff face mode, state[0] == False iff gesture mode) while state[1] indicates if the program shou=ld
# continue to run or not (state[1] == True if we want to quit).
state = [True, False]

while not state[1]:
    if state[0]:
        state = face_detector.detect(player)
    else:
        print("gesture mode")
コード例 #4
0
class VideoFrame(tk.Frame):

    def __init__(self, root):
        super(VideoFrame, self).__init__(root)
        self.grid()
        self.root = root
        self.root.title("CV Media Controller")
        self.root.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(file='icon.png'))
        self.root.configure(bg='red')
        self.root.resizable(False, False)
        self.mode = tk.IntVar()
        self.mode.set(1)
        self.state_message = tk.StringVar()
        self.state_message.set("Enter a YouTube URL and press start to begin!")
        self.last_input_message = tk.StringVar()
        self.last_input_message.set("")
        self.player_time = tk.StringVar()
        self.player_time.set("")
        self.center_window()
        self.frame = tk.Frame(self, width=1200, height=700, bd=5)
        self.frame.configure(bg="black")
        self.frame.grid(row=0, column=0, columnspan=10, padx=8, pady=8)
        self.progress = ttk.Progressbar(self, orient="horizontal", length="900", mode="indeterminate")
        self.progress.grid(row=1, column=0, pady=10,  columnspan=9, sticky="E")
        self.player_time_label = tk.Label(self, height=1, width=30, textvariable=self.player_time)
        self.player_time_label.grid(row=1, column=9, columnspan=1, padx=8, sticky='W')
        self.url_label = tk.Label(self, text="YouTube URL:")
        self.url_label.grid(row=2, column=0, columnspan=1, padx=35)
        self.url_input = tk.Text(self, height=1, width=50)
        self.url_input.grid(row=2, column=1, columnspan=1, padx=8, sticky='W')
        self.start_button = tk.Button(self, text='Start', command=self.initialize_player)
        self.start_button.grid(row=2, column=2, columnspan=2, padx=8)
        self.mode_label = tk.Label(self, text="Mode:")
        self.mode_label.grid(row=3, column=0, columnspan=1, padx=10, pady=8, sticky="S")
        self.face_select = tk.Radiobutton(self, text="Facial Recognition", variable=self.mode, value=1)
        self.face_select.grid(row=3, column=1, columnspan=1, padx=8, sticky='SW')
        self.gesture_select = tk.Radiobutton(self, text="Gesture Recognition", variable=self.mode, value=2)
        self.gesture_select.grid(row=4, column=1, columnspan=1, padx=8, pady=8, sticky='NW')
        self.state_label = tk.Label(self, textvariable=self.state_message)
        self.state_label.grid(row=3, column=9, columnspan=1, padx=8, sticky="SE")
        self.last_input_message_label = tk.Label(self, textvariable=self.last_input_message)
        self.last_input_message_label.grid(row=4, column=9, columnspan=1, pady=8, padx=8, sticky='NE')
        self.player = MediaPlayer()
        self.player.player.set_hwnd(self.frame.winfo_id())

    def center_window(self):
        w = 1200
        h = 700
        ws = self.root.winfo_screenwidth()  # width of the screen
        hs = self.root.winfo_screenheight()  # height of the screen
        # calculate x and y coordinates for the Tk root window
        x = (ws / 2) - (w / 2)
        y = (hs / 2) - (h / 2) - 100
        self.root.geometry('+%d+%d' % (x, y))

    def initialize_player(self):
        url = self.url_input.get("1.0", "end-1c")
        while not self.player.validate_url(url):
            self.update_status("Invalid URL")
        self.player.initialize(url)

    def current_mode(self):
        return self.mode.get()

    def update_state_status(self, message):
        self.state_message.set(message)

    def update_last_call(self, call):
        if call == 0:
            message = "Last Input Received: play"
            self.last_input_message.set(message)

        elif call == 1:
            message = "Last Input Received: pause"
            self.last_input_message.set(message)

        elif call == 2:
            message = "Last Input Received: jump forward"
            self.last_input_message.set(message)

        elif call == 3:
            message = "Last Input Received: jump back"
            self.last_input_message.set(message)

        elif call == 4:
            message = "Last Input Received: volume up ( " + str(self.player.get_volume()) + " )"
            self.last_input_message.set(message)

        elif call == 5:
            message = "Last Input Received: volume down ( " + str(self.player.get_volume()) + " )"
            self.last_input_message.set(message)

    def update_time(self):
        time = self.player.get_time()
        percent_complete = 0
        if time[1] != 0:
            percent_complete = (time[0]/time[1]) * 100
        self.progress["value"] = percent_complete
        minute = int(int(time[0]/1000) / 60)
        second = int(time[0]/1000) % 60
        if second < 10:
            formatted_time = str(minute) + ":0" + str(second)
        else:
            formatted_time = str(minute) + ":" + str(second)
        self.player_time.set(formatted_time)
 def setUp(self):
     self.media_player = MediaPlayer()
class TestMediaPlayer(TestCase):
    def setUp(self):
        self.media_player = MediaPlayer()

    def test_play(self):
        self.media_player.play()
        assert (self.media_player.state == 0)

    def test_pause(self):
        self.media_player.pause()
        assert (self.media_player.state == 1)

    def test_increase_volume(self):
        # test with volume below 100
        starting_volume = 50
        self.media_player.volume = starting_volume
        self.media_player.increase_volume()
        assert (self.media_player.volume == starting_volume + 2)

        # test with volume already at max
        starting_volume = 100
        self.media_player.volume = starting_volume
        self.media_player.increase_volume()
        assert (self.media_player.volume == starting_volume)

    def test_decrease_volume(self):
        # test with volume above 0
        starting_volume = 50
        self.media_player.volume = starting_volume
        self.media_player.decrease_volume()
        assert (self.media_player.volume == starting_volume - 2)

        # test with volume already at min
        starting_volume = 0
        self.media_player.volume = starting_volume
        self.media_player.decrease_volume()
        assert (self.media_player.volume == starting_volume)

    def test_get_volume(self):
        assert (self.media_player.volume == self.media_player.get_volume())

    def test_get_state(self):
        assert (self.media_player.state == self.media_player.get_state())
#   jump forward: press 4,
#   jump backward: press 5
#
#
##############################################################################################
import keyboard
import tkinter as tk
import tkinter.simpledialog
import time
from MediaModule import VideoFrame, MediaPlayer

root = tk.Tk()
root.title = "Computer Vision Media Controller"
#  url = tk.simpledialog.askstring("Computer Vision Media Controller", "Please Enter a valid YouTube URL")
url = "https://www.youtube.com/watch?v=LXb3EKWsInQ"
player = MediaPlayer()
frame = VideoFrame(root, player)
player.initialize(url)

while True:
    root.update()
    # quit application
    if keyboard.is_pressed('q'):
        print("quit")
        break

    # play
    if keyboard.is_pressed('0'):
        player.play()

    # pause