Listen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Felix92
User
Beiträge: 133
Registriert: Mittwoch 7. November 2018, 17:57

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
Benutzeravatar
Felix92
User
Beiträge: 133
Registriert: Mittwoch 7. November 2018, 17:57

Hat sich erledigt ist gelöst bei der Hitze fällt das Denken schwer ^^
Antworten