コード例 #1
0
def main():
    # TODO pass the configuration, such as sensitivity, etc.
    recorder = Recorder()
    camera = Camera()

    while camera.is_opened():

        frame, movement_area = camera.run()

        recorder.record(frame, movement_area)

    # Release cap resource
    camera.release()
コード例 #2
0
ファイル: recorderTest.py プロジェクト: udion/uAudio
from Recorder import Recorder

rec = Recorder(record_seconds=10, fname='class_testing.wav')
rec.record()
コード例 #3
0
    "um": audio.wavread(wav_directory + 'um.wav')[0],
    "dois": audio.wavread(wav_directory + 'dois.wav')[0],
}
audio_base[3] = {
    "matrix": audio.wavread(wav_directory + 'matrix.wav')[0],
    "braveheart": audio.wavread(wav_directory + 'braveheart.wav')[0],
    "constantine": audio.wavread(wav_directory + 'constantine.wav')[0],
}
audio_base[4] = {
    "dinheiro": audio.wavread(wav_directory + 'dinheiro.wav')[0],
    "cartao": audio.wavread(wav_directory + 'cartao.wav')[0],
}
audio_base[5] = {
    "finalizar_compra":
    audio.wavread(wav_directory + 'finalizar_compra.wav')[0],
    "sair": audio.wavread(wav_directory + 'sair.wav')[0],
}

if __name__ == "__main__":
    for i in range(6):
        recorder = Recorder()
        recognizer = Recognizer()

        recorder.record(time_to_run=2)
        (input_signal1, sampling_rate1, bits1) = audio.wavread('record.wav')
        Recognizer.test_audio(audio_base[i], input_signal1, wav_directory)

    fs = sampling_rate1
    lowcut = 300
    highcut = 3400
コード例 #4
0
            encodings, features_in = encoder(x)
            optimizer_dev.zero_grad()

            scores = dev_net(encodings)
            scores = torch.squeeze(scores)

            outlier_scores = l_reverse * scores
            inlier_scores = l * scores
            Contra_Loss, inlier_loss, outlier_loss = con_criterion(l, scores)

            Contra_Loss.backward()
            optimizer_dev.step()
            recorder.record(loss=Contra_Loss,
                            epoch=int(epoch),
                            num_batches=len(training_dataset_loader),
                            n_batch=epoch,
                            loss_name='dev contrastive loss')
            recorder.record(loss=outlier_scores.mean(),
                            epoch=int(epoch),
                            num_batches=len(training_dataset_loader),
                            n_batch=epoch,
                            loss_name='inlier score')
            recorder.record(loss=inlier_scores.mean(),
                            epoch=int(epoch),
                            num_batches=len(training_dataset_loader),
                            n_batch=epoch,
                            loss_name='outlier score')
        if epoch % 10 == 0:
            path = 'check_points/'
            torch.save(dev_net.state_dict(),
コード例 #5
0
class MyTableWidget(QWidget):
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)

        self.layout = QVBoxLayout(self)

        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()

        # Add tabs
        self.tabs.addTab(self.tab1, "Main")
        self.tabs.addTab(self.tab2, "History")
        self.tabs.addTab(self.tab3, "Info")

        # Create first tab
        self.tab1.layout = QVBoxLayout(self)

        self.label = QLabel('', self)
        self.label.setPixmap(QPixmap("logo2.png"))
        self.label.setAlignment(Qt.AlignCenter)

        self.pushButton1 = QPushButton('', self)
        self.pushButton1.clicked.connect(self.on_start)
        self.pushButton1.setIcon(QIcon('enter.png'))

        self.pushButton1.setIconSize(QSize(200, 100))
        self.pushButton1.setStyleSheet("border:0px")

        self.tab1.layout.addWidget(self.label)
        self.tab1.layout.addWidget(self.pushButton1)
        self.tab1.setLayout(self.tab1.layout)

        # Create third tab

        self.tab3.layout = QVBoxLayout(self)
        self.label2 = QLabel('* dBA -> A-weighted sound levels', self)

        self.table = QTableWidget(self)
        self.table.setRowCount(15)
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(["Level    ", "    Noise Level(dBA)    ", "Maximum Exposure Time per 24 hours"])
        self.table.verticalHeader().setVisible(False)

        self.table.setItem(0, 0, QTableWidgetItem("1"))
        self.table.setItem(0, 1, QTableWidgetItem("85"))
        self.table.setItem(0, 2, QTableWidgetItem("> 8 hours"))
        self.table.setItem(1, 1, QTableWidgetItem("88"))
        self.table.setItem(1, 2, QTableWidgetItem("4 hours"))
        self.table.setItem(2, 1, QTableWidgetItem("91"))
        self.table.setItem(2, 2, QTableWidgetItem("2 hours"))
        self.table.setItem(3, 1, QTableWidgetItem("94"))
        self.table.setItem(3, 2, QTableWidgetItem("1 hour"))

        self.table.setItem(4, 0, QTableWidgetItem("2"))
        self.table.setItem(4, 1, QTableWidgetItem("97"))
        self.table.setItem(4, 2, QTableWidgetItem("30 minutes"))
        self.table.setItem(5, 1, QTableWidgetItem("100"))
        self.table.setItem(5, 2, QTableWidgetItem("15 minutes"))
        self.table.setItem(6, 1, QTableWidgetItem("103"))
        self.table.setItem(6, 2, QTableWidgetItem("7.5 minutes"))

        self.table.setItem(7, 0, QTableWidgetItem("3"))
        self.table.setItem(7, 1, QTableWidgetItem("109"))
        self.table.setItem(7, 2, QTableWidgetItem("112 seconds"))
        self.table.setItem(8, 1, QTableWidgetItem("112"))
        self.table.setItem(8, 2, QTableWidgetItem("56 seconds"))
        self.table.setItem(9, 1, QTableWidgetItem("115"))
        self.table.setItem(9, 2, QTableWidgetItem("28 seconds"))

        self.table.setItem(10, 0, QTableWidgetItem("4"))
        self.table.setItem(10, 1, QTableWidgetItem("121"))
        self.table.setItem(10, 2, QTableWidgetItem("7 seconds"))
        self.table.setItem(11, 1, QTableWidgetItem("124"))
        self.table.setItem(11, 2, QTableWidgetItem("3 seconds"))
        self.table.setItem(12, 1, QTableWidgetItem("127"))
        self.table.setItem(12, 2, QTableWidgetItem("1 second"))

        self.table.setItem(13, 0, QTableWidgetItem("5"))
        self.table.setItem(13, 1, QTableWidgetItem("130"))
        self.table.setItem(13, 2, QTableWidgetItem("< 1 second"))
        self.table.setItem(14, 1, QTableWidgetItem("140"))
        self.table.setItem(14, 2, QTableWidgetItem("NO Exposure"))

        self.table.resizeColumnsToContents()
        self.tab3.layout.addWidget(self.label2)
        self.tab3.layout.addWidget(self.table)
        self.tab3.setLayout(self.tab3.layout)

        # Add tabs to widget
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)

        self.recorder = Recorder()
        # For checking is recording
        self.isRecording = False
        # Saving the last average decibel
        self.avgDecibel = 0
        # Saving the last time used
        self.recordedTime = 0

        # Read History File and update table
        self.initializeHistoryTable()

        self.empty = QIcon('')


    def record(self):
        self.isRecording = True
        start = time.time()

        print("*Recording*")
        while self.isRecording:
            # record sound from two mic
            dB1, dB2 = self.recorder.record(1)
            # Get average decibel
            self.avgDecibel = self.recorder.avg_decibel(dB1, dB2)
            # Show average decibel, Level and record time in the window
            level = self.classify_level(self.avgDecibel)
            exposure = self.classify_hour(self.avgDecibel)
            self.recordedTime = self.convertTime(start,time.time())
            self.dbLabel.setText("{:.2f}".format(self.avgDecibel) + ' db(A)' +
                                 '\nLevel ' + str(level) + " (" + exposure + ")" +
                                 '\n' + self.recordedTime)
            # Show which way the noise louder
            self.clssify_arrow_direction(dB1,dB2)


        print("*Record done*")

    def clssify_arrow_direction(self,db1,db2):
        if(db1 > db2):
            self.show_right()
        else:
            self.show_left()

    def classify_hour(self,decibel):
        if (decibel < 86):
            return "> 8 hours"
        elif (decibel >= 86 and decibel < 88):
            return "4 hours"
        elif (decibel >= 88 and decibel < 91):
            return "2 hours"
        elif (decibel >= 91 and decibel < 94):
            return "1 hour"
        elif (decibel >= 94 and decibel < 97):
            return "30 minutes"
        elif (decibel >= 97 and decibel < 100):
            return "15 minutes"
        elif (decibel >= 100 and decibel < 103):
            return "7.5 minutes"
        elif (decibel >= 103 and decibel < 109):
            return "112 seconds"
        elif (decibel >= 109 and decibel < 112):
            return "56 seconds"
        elif (decibel >= 112 and decibel < 121):
            return "28 seconds"
        elif (decibel >= 121 and decibel < 124):
            return "7 seconds"
        elif (decibel >= 124 and decibel < 127):
            return "3 seconds"
        elif (decibel >= 127 and decibel < 130):
            return "1 second"
        else:
            return "< 1 second"

    def classify_level(self,decibel):
        if(decibel < 97):
            return 1
        elif(decibel >= 97 and decibel <109):
            return 2
        elif (decibel >= 109 and decibel < 121):
            return 3
        elif (decibel >= 121 and decibel < 130):
            return 4
        else:
            return 5

    def convertTime(self,start,stop):
        seconds = int(stop - start)
        m, s = divmod(seconds, 60)
        h, m = divmod(m, 60)
        output = "%d:%02d:%02d" % (h, m, s)

        return output

    @pyqtSlot()
    def on_stop(self):
        # Close recording window
        self.showdb.close()
        self.tab1.show()

        # Reset isRecording
        self.isRecording = False

        # Add to history
        self.writeToHistoryFile()
        # Update the table
        self.updateHistoryTable()

    def writeToHistoryFile(self):
        if self.avgDecibel <= 0:
            return
        time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        historyItem = HistoryItem(time," {:.2f} ".format(self.avgDecibel),self.recordedTime)

        try:
            outfile = open("history.pkl", "ab")
        except FileNotFoundError:
            outfile = open("history.pkl", "wb")

        pickle.dump(historyItem, outfile)
        outfile.close()


    def readFromHistoryFile(self):
        objects = []

        # Check file existance first
        try:
            infile = open("history.pkl", "rb")
            infile.close()
        except FileNotFoundError:
            infile = open("history.pkl", "wb")
            infile.close()

        with (open("history.pkl", "rb")) as openfile:
            while True:
                try:
                    objects.append(pickle.load(openfile))
                except EOFError:
                    break
        return objects

    def initializeHistoryTable(self):
        objects = self.readFromHistoryFile()

        self.tab2.layout = QVBoxLayout(self)


        # create Table
        self.historyTable = QTableWidget(self)
        self.historyTable.setRowCount(len(objects))
        self.historyTable.setColumnCount(3)
        self.historyTable.setHorizontalHeaderLabels(
            ["Time", "    Noise Level(dBA)    ", "Durations    "])
        self.historyTable.resize(500, 500)
        self.historyTable.verticalHeader().setVisible(False)

        for i in range(0,len(objects)):
            objects[i].getTime()
            self.historyTable.setItem(i, 0, QTableWidgetItem(objects[i].getTime()))
            self.historyTable.setItem(i, 1, QTableWidgetItem(objects[i].getdba()))
            self.historyTable.setItem(i, 2, QTableWidgetItem(objects[i].getDuration()))

        self.historyTable.resizeColumnsToContents()
        self.tab2.layout.addWidget(self.historyTable)
        self.tab2.setLayout(self.tab2.layout)

    def updateHistoryTable(self):

        self.historyTable.clearContents()

        objects = self.readFromHistoryFile()
        # create Table
        self.historyTable.setRowCount(len(objects))
        self.historyTable.setColumnCount(3)
        self.historyTable.setHorizontalHeaderLabels(
            ["Time", "    Noise Level(dBA)    ", "Durations    "])
        self.historyTable.resize(500, 500)
        self.historyTable.verticalHeader().setVisible(False)

        for i in range(0, len(objects)):
            objects[i].getTime()
            self.historyTable.setItem(i, 0, QTableWidgetItem(objects[i].getTime()))
            self.historyTable.setItem(i, 1, QTableWidgetItem(objects[i].getdba()))
            self.historyTable.setItem(i, 2, QTableWidgetItem(objects[i].getDuration()))

        self.historyTable.resizeColumnsToContents()
        self.tab2.layout.addWidget(self.historyTable)

    @pyqtSlot()
    def on_start(self):
        # Create new window
        self.otherWindow()

        # Start recording
        _thread.start_new_thread(self.record, ())


    def otherWindow(self):
        self.tab1.hide()

        # Create new window
        self.startLayout = QGridLayout(self)
        self.showdb = QWidget()
        self.showdb.setFixedSize(480, 300)

        self.dbLabel = QLabel('', self)
        self.dbLabel.setAlignment(Qt.AlignCenter)
        self.dbLabel.setFont(QFont("Arail",24,QFont.Bold))
        #self.dbLabel.setFixedSize(450,100)

        self.stopButton = QPushButton('STOP',self)
        self.stopButton.clicked.connect(self.on_stop)
        self.stopButton.setFixedSize(300,50)

        self.Barrow1 = QPushButton('', self)
        self.Barrow2 = QPushButton('', self)
        self.Barrow1.setFixedSize(50, 50)
        self.Barrow2.setFixedSize(50, 50)

        self.Barrow1.clicked.connect(self.show_left)
        self.Barrow2.clicked.connect(self.show_right)

        self.Barrow1.setStyleSheet("border:0px")
        self.Barrow2.setStyleSheet("border:0px")

        self.startLayout.addWidget(self.dbLabel, 0, 1)
        self.startLayout.addWidget(self.stopButton, 1, 1)
        self.startLayout.addWidget(self.Barrow1, 0, 0)
        self.startLayout.addWidget(self.Barrow2, 0, 2)

        self.showdb.setLayout(self.startLayout)

        self.showdb.show()

    def show_right(self):
        self.Rightarrow = QIcon('Rightarrow.png')
        self.Barrow1.setIcon(self.empty)
        self.Barrow2.setIcon(self.Rightarrow)
        self.Barrow2.setIconSize(QSize(40, 40))

    def show_left(self):
        self.Leftarrow = QIcon('Leftarrow.png')
        self.Barrow2.setIcon(self.empty)
        self.Barrow1.setIcon(self.Leftarrow)
        self.Barrow1.setIconSize(QSize(40, 40))
コード例 #6
0
audio_base[2] = {
    "um": audio.wavread(wav_directory + 'um.wav')[0],
    "dois": audio.wavread(wav_directory + 'dois.wav')[0],
}
audio_base[3] = {
    "matrix": audio.wavread(wav_directory + 'matrix.wav')[0],
    "braveheart": audio.wavread(wav_directory + 'braveheart.wav')[0],
    "constantine": audio.wavread(wav_directory + 'constantine.wav')[0],
}
audio_base[4] = {
    "dinheiro": audio.wavread(wav_directory + 'dinheiro.wav')[0],
    "cartao": audio.wavread(wav_directory + 'cartao.wav')[0],
}
audio_base[5] = {
    "finalizar_compra": audio.wavread(wav_directory + 'finalizar_compra.wav')[0],
    "sair": audio.wavread(wav_directory + 'sair.wav')[0],
}

if __name__ == "__main__":
    for i in range(6):
        recorder = Recorder()
        recognizer = Recognizer()

        recorder.record(time_to_run=2)
        (input_signal1, sampling_rate1, bits1) = audio.wavread('record.wav')
        Recognizer.test_audio(audio_base[i], input_signal1, wav_directory)

    fs = sampling_rate1
    lowcut = 300
    highcut = 3400
コード例 #7
0
ファイル: meetBot.py プロジェクト: Gerardo115pp/StudentBot
class ScheduleHandler:
    
    time_matrix = np.array([86400,3600, 60, 1])
    
    def __init__(self, user,  schedule_file: str=SCHEDULE_JSON):
        assert os.path.exists(SCHEDULE_JSON), f"schedule"
        self.schedule = self.__loadScheduleFile(schedule_file)
        self.student_bot = StudentBot(user)
        self.__recorder = Recorder()
        self.__is_shutdown_set = False
        
    def __loadScheduleFile(self, schedule_file: str) -> dict:
        with open(schedule_file, 'r')as f:
            return json.load(f)
    
    def parseSchedule(self, event_string: str) -> tuple:
        """
        parses a event string with format wd1,wd2,...,wdn:hh:mm
        
        wd is short for weekday, it can be a value between 0 and 6 where 0 means MONDAY and 6 means SUNDAY
        hh: is the hour where the event starts
        minute: is the minute of hh where the event starts

        Parameters
        ----------
        event_string : str
            a string decribing the time where the event most be executed    

        Returns
        -------
        tuple
            ((wdn), hh, mm)
        """
        event_time = event_string.split(":")
        assert len(event_time) == 3, f"recived an event string '{event_string}' which is invalid"
        event_time[0] = tuple(map(lambda x: int(x), event_time[0].split(",")))
        event_time[1], event_time[2] = int(event_time[1]), int(event_time[2])
        return tuple(event_time)
    
    def isEventStarted(self, current_time: datetime, event_data: tuple, event_string: str) -> bool:
        return current_time.weekday() in event_data[0] and current_time.hour == event_data[1] and (current_time.minute >= event_data[2] and abs(event_data[2] - current_time.minute) < self.schedule[event_string]['stay'])
    
    def parse24Hstring(self, time24h: str) -> datetime:
        assert re.match(r"^\d\d:\d\d$", time24h)
        time24h = tuple(map(lambda x: int(x), time24h.split(':')))
        current_time = datetime.now()

        parsed_time = datetime(current_time.year, current_time.month, current_time.day, time24h[0], time24h[1])
        if parsed_time < current_time:
            parsed_time += timedelta(days=1)
        
        return parsed_time  
    
    def shutdownAt(self, shutdown_time: str):
        """
        shutsdown the computer at a defined hour

        Parameters
        ----------
        shutdown_time : str
            a string representing the shutdown hour in 24h format 'hh:mm'
    
        """
        shutdown_time = self.parse24Hstring(shutdown_time)
        seconds = int((shutdown_time - datetime.now()).total_seconds())
        self.__setShutdown(seconds)

    def shutdownIn(self, days=0, hours=0, minutes=0, seconds=0):
        shutdown_time  = np.array([days, hours, minutes, seconds])
        return self.__setShutdown(np.dot(shutdown_time, ScheduleHandler.time_matrix))
    
    def __abortShutdown(self):
        self.__is_shutdown_set = False
        os.system("shutdown -a")

    def __setShutdown(self, seconds: int):
        if self.__is_shutdown_set:
            self.__abortShutdown()
        
        self.__is_shutdown_set = True
        os.system(f"shutdown -s -f -t {seconds}")
    
    @final    
    def awaitEvent(self,multiple=False):
        """
        awaits for an event to start and logs into the corresponding videoconference

        Parameters
        ----------
        multiple : bool, optional
            [description], by default False
        """
        while True:
            current_time = datetime.now()
            monitoring_thread = Thread(target=self.student_bot.startMonitorClass)
            for scheduled_event in self.schedule.keys():
                parsed_event = self.parseSchedule(scheduled_event) # tuple returned ((wd1,..,wdn),hh,mm)
                if self.isEventStarted(current_time, parsed_event ,scheduled_event):
                    print(f"Event {scheduled_event} started!")
                    self.__recorder.record(f'{self.schedule[scheduled_event]["class_name"]}-{current_time.strftime("%H-%M")}')
                    self.student_bot.joinMeet(self.schedule[scheduled_event]['class_name'])
                    print(f"staying in class {self.schedule[scheduled_event]['class_name']} for {self.schedule[scheduled_event]['stay']} minutes")
                    
                    monitoring_thread.start()
                    
                    minutes_elapsed = 0
                    while self.schedule[scheduled_event]['stay'] != minutes_elapsed and self.student_bot.OnClass:
                        minutes_elapsed += 1
                        sleep(60)
                    
                    print("getting out of class")
                    self.student_bot.logoutClass()
                    monitoring_thread.join(30)
                    self.__recorder.stopRecording('.')
                    if not multiple:
                        return
                    
            sleep(60)