Seite 1 von 1

Listen

Verfasst: Sonntag 30. Juni 2019, 11:46
von Felix92
Huhu und zwar habe ich eine Klasse BoardVideo in welcher in self.board_subvideos Teilvideos für eine Timeline abgespeichert werden. Das klappt auch super allerdings brauche ich in der Klasse SpeakerVideo genau die "entgegengesetzten" Zeiten. Das funktioniert leider nicht mit der Analyse bzw. ist zu ungenau. Bsp. self.board_subvideos: [200,950,1000,2500,...] in self.speaker_subvideos bräuchte ich dann [0,199,201,949,..] um diese Subvideos in der Timeline einzufügen wie stelle ich das am klügsten an ? :roll:

Code: Alles auswählen

class BoardVideo(MediaFile):
    """
    This class contains the board video and a method to analyse the video
    """

    def __init__(self, file_path):
        self.__file_path = str(file_path)
        self.board_subvideos = list()

    def get(self):
        return self.__file_path

    def check_board_area(self, progress):
        """
        a method that analyse the video frame per frame and save the Clips (Board) in a list
        """
        video = cv2.VideoCapture(self.__file_path)
        maxframes = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
        try:
            times = list()
            for frame_number in count():
                if frame_number % 30 == 0:
                    progress(frame_number/maxframes*100)
                is_ok, frame = video.read()

                if not is_ok:
                    if times:
                        self.board_subvideos.append((times[0], times[-1]))
                    break

                frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                (thresh, frame) = cv2.threshold(frame, 60, 255, cv2.THRESH_BINARY)
                average = cv2.mean(frame)

                #summe = average[0] + average[1] + average[2]
                #percentage_red = (100 * average[0]) / summe
                #percentage_green = (100 * average[1]) / summe
                #percentage_blue = (100 * average[2]) / summe

                if average[0] > 250:
                    times.append(video.get(cv2.CAP_PROP_POS_MSEC) / 1000)
                elif times:
                    self.board_subvideos.append((times[0], times[-1]))
                    times.clear()
        finally:
            video.release()

Code: Alles auswählen

class SpeakerVideo(MediaFile):
    """
    This class contains the video
    """

    def __init__(self, file_path):
        self.__file_path = str(file_path)
        self.speaker_subvideos = list()

    def get(self):
        return self.__file_path

    def check_speaker(self, progress):
        """
        a method that analyse the video frame per frame and save the Clips (Speaker) in a list
        """
        video = cv2.VideoCapture(self.__file_path)
        maxframes = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
        try:
            times = list()
            for frame_number in count():
                if frame_number % 30 == 0:
                    progress(frame_number/maxframes*100)
                is_ok, frame = video.read()

                if not is_ok:
                    if times:
                        self.speaker_subvideos.append((times[0], times[-1]))

                    break

                frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                (thresh, frame) = cv2.threshold(frame, 60, 255, cv2.THRESH_BINARY)
                average = cv2.mean(frame)

                if average[0] < 250:
                    times.append(video.get(cv2.CAP_PROP_POS_MSEC) / 1000)
                elif times:
                    self.speaker_subvideos.append((times[0], times[-1]))
                    times.clear()
        finally:
            video.release()
MfG Felix

Re: Listen

Verfasst: Sonntag 30. Juni 2019, 14:53
von Felix92
Hat sich erledigt ist gelöst bei der Hitze fällt das Denken schwer ^^