def output_result(ub_data, ub_data_value, characters_find):
    # 結果を出力
    debuff_value = ac.make_ub_value_list(ub_data_value, characters_find)

    # 結果表示
    print("---------- タイムライン ----------\n")
    for index, rec in enumerate(ub_data):
        print(rec)
        if debuff_value is not []:
            print("↓" + debuff_value[index])

    return
Example #2
0
def analyze_movie(movie_path, file_type, self):
    global RESULT_FILE_DIR

    # 動画解析し結果をリストで返す
    start_time = tm.time()

    result_name = datetime.datetime.fromtimestamp(start_time)
    result_name = result_name.strftime('%Y-%m-%d_%H-%M-%S')

    result_file_dir = result_dir + result_name + "/"
    if not os.path.exists(result_file_dir):
        os.mkdir(result_file_dir)

    RESULT_FILE_DIR = result_file_dir
    # 動画の確認
    video_type = movie_check(movie_path)[1]

    video = cv2.VideoCapture(movie_path)

    frame_count = int(video.get(7))  # フレーム数を取得
    frame_rate = int(video.get(5))  # フレームレート(1フレームの時間単位はミリ秒)の取得

    model_init(video_type)
    roi_init(video_type)

    n = 0.34  # n秒ごと*
    ub_interval = 0

    time_min = "1"
    time_sec10 = "3"
    time_sec1 = "0"

    menu_check = False

    min_roi = MIN_ROI
    tensec_roi = TEN_SEC_ROI
    onesec_roi = ONE_SEC_ROI
    ub_roi = UB_ROI
    score_roi = SCORE_ROI
    damage_data_roi = DAMAGE_DATA_ROI
    detail_report_roi = DETAIL_REPORT_ROI
    crown_data_roi = CROWN_DATA_ROI

    ub_data = []
    ub_data_value = []
    time_data = []
    characters_find = []

    tmp_damage = []
    total_damage = False

    cap_interval = int(frame_rate * n)
    skip_frame = 5 * cap_interval

    for i in range(frame_count):  # 動画の秒数を取得し、回す
        ret = video.grab()
        if ret is False:
            break

        # VIEWからのスレッド一時停止
        if ANALYZE_STATUS is ANALYZE_PENDING:
            while True:
                if ANALYZE_STATUS is ANALYZE_PENDING:
                    tm.sleep(0.2)
                else:
                    break

        # VIEWからのスレッド停止
        if ANALYZE_STATUS is ANALYZE_STOP:
            break

        # VIEWからのスレッド途中完了
        if ANALYZE_STATUS is ANALYZE_END:
            break

        if i % cap_interval is 0:
            if ((i - ub_interval) > skip_frame) or (ub_interval == 0):
                ret, original_frame = video.read()

                if ret is False:
                    break
                work_frame = edit_frame(original_frame)

                if menu_check is False:
                    menu_check, menu_loc = analyze_item_frame(work_frame, MENU_DATA, MENU_ROI)
                    if menu_check is True:
                        loc_diff = np.array(MENU_LOC) - np.array(menu_loc)
                        roi_diff = (loc_diff[0], loc_diff[1], loc_diff[0], loc_diff[1])
                        min_roi = np.array(MIN_ROI) - np.array(roi_diff)
                        tensec_roi = np.array(TEN_SEC_ROI) - np.array(roi_diff)
                        onesec_roi = np.array(ONE_SEC_ROI) - np.array(roi_diff)
                        ub_roi = np.array(UB_ROI) - np.array(roi_diff)
                        score_roi = np.array(SCORE_ROI) - np.array(roi_diff)
                        damage_data_roi = np.array(DAMAGE_DATA_ROI) - np.array(roi_diff)
                        detail_report_roi = np.array(DETAIL_REPORT_ROI) - np.array(roi_diff)
                        crown_data_roi = np.array(CROWN_DATA_ROI) - np.array(roi_diff)

                        analyze_anna_icon_frame(work_frame, CHARACTER_ICON_ROI, characters_find)

                        # 検出状況を初期化
                        tmp_damage = []
                        total_damage = False

                    elif total_damage is not False:
                        # ダメージレポート表示中
                        # 王冠の有無を確認
                        ret = analyze_item_frame(work_frame, CROWN_DATA, crown_data_roi)[0]

                        if ret is True:
                            # ダメージレポートの有無を確認
                            ret = analyze_item_frame(work_frame, DETAIL_REPORT_DATA, detail_report_roi)[0]

                            if ret is True:
                                # ダメージレポートが開かれている場合
                                # 検出時の画像をviewに渡す
                                send_capture_frame(original_frame, self)
                                save_capture_frame(original_frame, result_file_dir, "damage_report")

                                # 検出状況を初期化
                                tmp_damage = []
                                total_damage = False

                else:
                    # UB 検出処理
                    # 時間を判定
                    time_min = analyze_timer_frame(work_frame, min_roi, 2, time_min)
                    time_sec10 = analyze_timer_frame(work_frame, tensec_roi, 6, time_sec10)
                    time_sec1 = analyze_timer_frame(work_frame, onesec_roi, 10, time_sec1)

                    # UB文字を判定
                    ub_result = analyze_ub_frame(work_frame, ub_roi, time_min, time_sec10, time_sec1,
                                                 ub_data, ub_data_value, characters_find, self)

                    if ub_result is FOUND:
                        ub_interval = i
                        # 検出時の画像をviewに渡す
                        send_capture_frame(original_frame, self)
                        save_txt(ub_data[-1], result_file_dir)

                    # 総ダメージ検出処理
                    # スコア表示の有無を確認
                    ret = analyze_item_frame(work_frame, SCORE_DATA, score_roi)[0]

                    if ret is True:
                        # 総ダメージ解析
                        ret = analyze_damage_frame(original_frame, damage_data_roi, tmp_damage)

                        if ret is True:
                            # 総ダメージ表示が存在の場合
                            total_damage = "総ダメージ\n" + ''.join(tmp_damage)
                            input_txt_damage = "\n\n" + total_damage + "\n"
                            save_txt(input_txt_damage, result_file_dir)
                            view.set_ub_text(self, input_txt_damage)
                            # 検出時の画像をviewに渡す
                            send_capture_frame(original_frame, self)
                            save_capture_frame(original_frame, result_file_dir, "total_damage")

                            # 検出状況を初期化
                            menu_check = False

    video.release()

    # TLに対する後処理
    debuff_value = ac.make_ub_value_list(ub_data_value, characters_find)

    time_result = tm.time() - start_time
    time_data.append("動画時間 : {:.3f}".format(frame_count / frame_rate) + "  sec")
    time_data.append("処理時間 : {:.3f}".format(time_result) + "  sec")

    # YOUTUBEから取得した動画の場合削除
    if file_type is YOUTUBE:
        clear_path(movie_path)

    # VIEWへの終了通知
    if ANALYZE_STATUS is not ANALYZE_STOP:
        view.set_result_frame(self)

    return ub_data, time_data, total_damage, debuff_value, NO_ERROR
Example #3
0
def analyze_movie(movie_path):
    # 動画解析し結果をリストで返す
    start_time = tm.time()
    video = cv2.VideoCapture(movie_path)

    frame_count = int(video.get(7))  # フレーム数を取得
    frame_rate = int(video.get(5))  # フレームレート(1フレームの時間単位はミリ秒)の取得

    frame_width = int(video.get(3))  # フレームの幅
    frame_height = int(video.get(4))  # フレームの高さ

    try:
        video_type = FRAME_RESOLUTION.index((frame_width, frame_height))
    except ValueError:
        video.release()

        return None, None, None, None, ERROR_NOT_SUPPORTED

    CHARACTERS_DATA, SEC_DATA, MENU_DATA, SCORE_DATA, DAMAGE_DATA, ICON_DATA = model_init(
        video_type)
    UB_ROI, MIN_ROI, TEN_SEC_ROI, ONE_SEC_ROI, MENU_ROI, SCORE_ROI, DAMAGE_DATA_ROI, CHARACTER_ICON_ROI, MENU_LOC, FRAME_THRESH = roi_init(
        video_type)

    n = 0.34  # n秒ごと*
    ub_interval = 0

    time_min = "1"
    time_sec10 = "3"
    time_sec1 = "0"

    menu_check = False

    min_roi = MIN_ROI
    tensec_roi = TEN_SEC_ROI
    onesec_roi = ONE_SEC_ROI
    ub_roi = UB_ROI
    score_roi = SCORE_ROI
    damage_data_roi = DAMAGE_DATA_ROI

    ub_data = []
    ub_data_value = []
    time_data = []
    characters_find = []

    tmp_damage = []
    total_damage = False

    cap_interval = int(frame_rate * n)
    skip_frame = 5 * cap_interval

    if (frame_count / frame_rate) < 600:  # 10分未満の動画しか見ない
        for i in range(frame_count):  # 動画の秒数を取得し、回す
            ret = video.grab()
            if ret is False:
                break

            if i % cap_interval == 0:
                if ((i - ub_interval) > skip_frame) or (ub_interval == 0):
                    ret, original_frame = video.read()

                    if ret is False:
                        break
                    work_frame = edit_frame(original_frame)

                    if menu_check is False:
                        menu_check, menu_loc = analyze_menu_frame(
                            work_frame, MENU_DATA, MENU_ROI)
                        if menu_check is True:
                            loc_diff = np.array(MENU_LOC) - np.array(menu_loc)
                            roi_diff = (loc_diff[0], loc_diff[1], loc_diff[0],
                                        loc_diff[1])
                            min_roi = np.array(MIN_ROI) - np.array(roi_diff)
                            tensec_roi = np.array(TEN_SEC_ROI) - np.array(
                                roi_diff)
                            onesec_roi = np.array(ONE_SEC_ROI) - np.array(
                                roi_diff)
                            ub_roi = np.array(UB_ROI) - np.array(roi_diff)
                            score_roi = np.array(SCORE_ROI) - np.array(
                                roi_diff)
                            damage_data_roi = np.array(
                                DAMAGE_DATA_ROI) - np.array(roi_diff)

                            analyze_anna_icon_frame(work_frame,
                                                    CHARACTER_ICON_ROI,
                                                    characters_find)

                    else:
                        if time_min == "1":
                            time_min = analyze_timer_frame(
                                work_frame, min_roi, 2, time_min)

                        time_sec10 = analyze_timer_frame(
                            work_frame, tensec_roi, 6, time_sec10)
                        time_sec1 = analyze_timer_frame(
                            work_frame, onesec_roi, 10, time_sec1)

                        ub_result = analyze_ub_frame(work_frame, ub_roi,
                                                     time_min, time_sec10,
                                                     time_sec1, ub_data,
                                                     ub_data_value,
                                                     characters_find)

                        if ub_result is FOUND:
                            ub_interval = i

                        # スコア表示の有無を確認
                        ret = analyze_score_frame(work_frame, SCORE_DATA,
                                                  score_roi)

                        if ret is True:
                            # 総ダメージ解析
                            ret = analyze_damage_frame(original_frame,
                                                       damage_data_roi,
                                                       tmp_damage)

                            if ret is True:
                                total_damage = "総ダメージ " + ''.join(tmp_damage)

                            break

    video.release()

    # TLに対する後処理
    debuff_value = ac.make_ub_value_list(ub_data_value, characters_find)

    time_result = tm.time() - start_time
    time_data.append("動画時間 : {:.3f}".format(frame_count / frame_rate) +
                     "  sec")
    time_data.append("処理時間 : {:.3f}".format(time_result) + "  sec")

    return ub_data, time_data, total_damage, debuff_value, NO_ERROR
def analyze_movie(movie_path):
    """analyze movie main

    check movie frames and find ub frame
    check frame: 0.34 sec (20 frames)

    Args
        movie_path (string): movie save path

    Returns
        ub_data (list): found ub data
        ub_data_enemy (list): found ub data with enemy ub
        time_data (list): spend time while analyze
        total_damage (string): total damage
        debuff_value (list): ub timing debuff values
        status (int): analyze status 200 (HD analyze) or 301 (SD analyze)


    """
    start_time = tm.time()
    video = cv2.VideoCapture(movie_path)

    frame_count = int(video.get(7))  # get total frame
    frame_rate = int(video.get(5))  # get frame rate

    frame_width = int(video.get(3))  # get frame width
    frame_height = int(video.get(4))  # get frame height

    try:
        video_type = FRAME_RESOLUTION.index((frame_width, frame_height))
    except ValueError:
        video.release()
        cm.clear_path(movie_path)

        return None, None, None, None, None, state.ERR_BAD_RESOLUTION

    model_init(video_type)
    roi_init(video_type)

    n = 0.34

    time_min = "1"
    time_sec10 = "3"
    time_sec1 = "0"

    menu_check = False

    min_roi = MIN_ROI
    tensec_roi = TEN_SEC_ROI
    onesec_roi = ONE_SEC_ROI
    ub_roi = UB_ROI
    score_roi = SCORE_ROI
    damage_data_roi = DAMAGE_DATA_ROI
    speed_roi = SPEED_ICON_ROI

    ub_data = []
    ub_data_enemy = []
    ub_data_value = []
    time_data = []
    characters_find = []

    tmp_damage = []
    total_damage = False

    cap_interval = int(frame_rate * n)
    past_time = 90
    time_count = 0
    find_id = -1
    find_count = 0

    if (frame_count / frame_rate) < 600:  # only check less than 10 min movie
        for i in range(frame_count):  # cycle check movie per frame
            ret = video.grab()
            if ret is False:
                break

            if i % cap_interval is 0:
                ret, original_frame = video.read()

                if ret is False:
                    break

                if video_type is RESOLUTION_16_9_SD:
                    original_frame = expand_frame(original_frame)

                work_frame = edit_frame(original_frame)

                if menu_check is False:
                    menu_check, menu_loc = analyze_menu_frame(work_frame, MENU_DATA, MENU_ROI)
                    if menu_check is True:
                        loc_diff = np.array(MENU_LOC) - np.array(menu_loc)
                        roi_diff = (loc_diff[0], loc_diff[1], loc_diff[0], loc_diff[1])
                        min_roi = np.array(MIN_ROI) - np.array(roi_diff)
                        tensec_roi = np.array(TEN_SEC_ROI) - np.array(roi_diff)
                        onesec_roi = np.array(ONE_SEC_ROI) - np.array(roi_diff)
                        ub_roi = np.array(UB_ROI) - np.array(roi_diff)
                        score_roi = np.array(SCORE_ROI) - np.array(roi_diff)
                        damage_data_roi = np.array(DAMAGE_DATA_ROI) - np.array(roi_diff)
                        speed_roi = np.array(SPEED_ICON_ROI) - np.array(roi_diff)

                        analyze_anna_icon_frame(work_frame, CHARACTER_ICON_ROI, characters_find)

                else:
                    if time_min is "1":
                        time_min = analyze_timer_frame(work_frame, min_roi, 2, time_min)

                    time_sec10 = analyze_timer_frame(work_frame, tensec_roi, 6, time_sec10)
                    time_sec1 = analyze_timer_frame(work_frame, onesec_roi, 10, time_sec1)

                    find_time = time_min + ":" + time_sec10 + time_sec1
                    now_time, is_same_time = time_check(time_min, time_sec10, time_sec1, past_time)

                    is_normal_speed = analyze_speed(original_frame, speed_roi)

                    if is_same_time:
                        #  count up if normal speed, neither, reset count
                        if is_normal_speed:
                            time_count += 1
                        else:
                            time_count = 0
                    else:
                        time_count = 0
                        past_time = now_time

                    if time_count >= 0:
                        # check friendly ub
                        ub_result, find_id, find_count = analyze_ub_frame(work_frame, ub_roi, time_min, time_sec10,
                                                                          time_sec1,
                                                                          ub_data, ub_data_enemy, ub_data_value,
                                                                          characters_find, find_id, find_count)

                        if ub_result:
                            # update count
                            time_count = update_count(frame_rate, find_id, cap_interval)

                        elif is_normal_speed:
                            # check enemy ub
                            analyze_enemy_ub(time_count, work_frame, find_time, ub_data_enemy)

                    # check score existence
                    ret = analyze_score_frame(work_frame, SCORE_DATA, score_roi)

                    if ret is True:
                        # analyze total damage
                        ret = analyze_damage_frame(original_frame, damage_data_roi, tmp_damage)

                        if ret is True:
                            total_damage = "".join(tmp_damage)

                        break

    video.release()
    cm.clear_path(movie_path)

    # post-processing to timeline
    if len(ub_data_enemy) != 0 and ENEMY_UB in ub_data_enemy[-1]:
        ub_data_enemy.pop()

    debuff_value = ac.make_ub_value_list(ub_data_value, characters_find)

    time_result = tm.time() - start_time
    time_data.append("動画時間 : {:.3f}".format(frame_count / frame_rate) + "  sec")
    time_data.append("処理時間 : {:.3f}".format(time_result) + "  sec")

    status = get_analyze_status(ub_data, video_type)

    if status is not state.DONE:
        ub_data_enemy = False

    return ub_data, ub_data_enemy, time_data, total_damage, debuff_value, status
Example #5
0
def analyze_movie(movie_path):
    """analyze movie main

    check movie frames and find ub frame
    check frame: 0.34 sec (20 frames)

    Args
        movie_path (string): movie save path

    Returns
        ub_data (list): found ub data
        time_data (list): spend time while analyze
        total_damage (string): total damage
        debuff_value (list): ub timing debuff values
        status (int): analyze status 200 (HD analyze) or 301 (SD analyze)


    """
    start_time = tm.time()
    video = cv2.VideoCapture(movie_path)

    frame_count = int(video.get(7))  # get total frame
    frame_rate = int(video.get(5))  # get frame rate

    frame_width = int(video.get(3))  # get frame width
    frame_height = int(video.get(4))  # get frame height

    try:
        video_type = FRAME_RESOLUTION.index((frame_width, frame_height))
    except ValueError:
        video.release()
        cm.clear_path(movie_path)

        return None, None, None, None, el.ERR_BAD_RESOLUTION

    if video_type is RESOLUTION_16_9_SD:
        status = el.TMP_DONE_IN_SD
    else:
        status = el.DONE

    model_init(video_type)
    roi_init(video_type)

    n = 0.34
    ub_interval = 0

    time_min = "1"
    time_sec10 = "3"
    time_sec1 = "0"

    menu_check = False

    min_roi = MIN_ROI
    tensec_roi = TEN_SEC_ROI
    onesec_roi = ONE_SEC_ROI
    ub_roi = UB_ROI
    score_roi = SCORE_ROI
    damage_data_roi = DAMAGE_DATA_ROI

    ub_data = []
    ub_data_value = []
    time_data = []
    characters_find = []

    tmp_damage = []
    total_damage = False

    cap_interval = int(frame_rate * n)
    skip_frame = 5 * cap_interval

    if (frame_count / frame_rate) < 600:  # only check less than 10 min movie
        for i in range(frame_count):  # cycle check movie per frame
            ret = video.grab()
            if ret is False:
                break

            if i % cap_interval is 0:
                if ((i - ub_interval) > skip_frame) or (ub_interval == 0):
                    ret, original_frame = video.read()

                    if ret is False:
                        break

                    if video_type is RESOLUTION_16_9_SD:
                        original_frame = expand_frame(original_frame)

                    work_frame = edit_frame(original_frame)

                    if menu_check is False:
                        menu_check, menu_loc = analyze_menu_frame(
                            work_frame, MENU_DATA, MENU_ROI)
                        if menu_check is True:
                            loc_diff = np.array(MENU_LOC) - np.array(menu_loc)
                            roi_diff = (loc_diff[0], loc_diff[1], loc_diff[0],
                                        loc_diff[1])
                            min_roi = np.array(MIN_ROI) - np.array(roi_diff)
                            tensec_roi = np.array(TEN_SEC_ROI) - np.array(
                                roi_diff)
                            onesec_roi = np.array(ONE_SEC_ROI) - np.array(
                                roi_diff)
                            ub_roi = np.array(UB_ROI) - np.array(roi_diff)
                            score_roi = np.array(SCORE_ROI) - np.array(
                                roi_diff)
                            damage_data_roi = np.array(
                                DAMAGE_DATA_ROI) - np.array(roi_diff)

                            analyze_anna_icon_frame(work_frame,
                                                    CHARACTER_ICON_ROI,
                                                    characters_find)

                    else:
                        if time_min is "1":
                            time_min = analyze_timer_frame(
                                work_frame, min_roi, 2, time_min)

                        time_sec10 = analyze_timer_frame(
                            work_frame, tensec_roi, 6, time_sec10)
                        time_sec1 = analyze_timer_frame(
                            work_frame, onesec_roi, 10, time_sec1)

                        ub_result = analyze_ub_frame(work_frame, ub_roi,
                                                     time_min, time_sec10,
                                                     time_sec1, ub_data,
                                                     ub_data_value,
                                                     characters_find)

                        if ub_result is FOUND:
                            ub_interval = i

                        # check score existence
                        ret = analyze_score_frame(work_frame, SCORE_DATA,
                                                  score_roi)

                        if ret is True:
                            # analyze total damage
                            ret = analyze_damage_frame(original_frame,
                                                       damage_data_roi,
                                                       tmp_damage)

                            if ret is True:
                                total_damage = "".join(tmp_damage)

                            break

    video.release()
    cm.clear_path(movie_path)

    # post-processing to timeline
    debuff_value = ac.make_ub_value_list(ub_data_value, characters_find)

    time_result = tm.time() - start_time
    time_data.append("動画時間 : {:.3f}".format(frame_count / frame_rate) +
                     "  sec")
    time_data.append("処理時間 : {:.3f}".format(time_result) + "  sec")

    return ub_data, time_data, total_damage, debuff_value, status
Example #6
0
def analyze_movie(movie_path):
    # 動画解析し結果をリストで返す
    start_time = tm.time()
    video = cv2.VideoCapture(movie_path)

    frame_count = int(video.get(7))  # フレーム数を取得
    frame_rate = int(video.get(5))  # フレームレート(1フレームの時間単位はミリ秒)の取得

    frame_width = int(video.get(3))  # フレームの幅
    frame_height = int(video.get(4))  # フレームの高さ

    if frame_width != int(FRAME_COLS) or frame_height != int(FRAME_ROWS):
        video.release()
        os.remove(movie_path)

        return None, None, None, None

    n = 0.34  # n秒ごと*
    ub_interval = 0

    time_min = "1"
    time_sec10 = "3"
    time_sec1 = "0"

    menu_check = False

    min_roi = MIN_ROI
    tensec_roi = TEN_SEC_ROI
    onesec_roi = ONE_SEC_ROI
    ub_roi = UB_ROI
    damage_menu_roi = DAMAGE_MENU_ROI
    damage_data_roi = DAMAGE_DATA_ROI

    ub_data = []
    ub_data_value = []
    time_data = []
    characters_find = []

    tmp_damage = ["0", "0", "0", "0", "0", "0", "0"]
    total_damage = False

    cap_interval = int(frame_rate * n)
    skip_frame = 5 * cap_interval

    if (frame_count / frame_rate) < 600:  # 10分未満の動画しか見ない
        for i in range(frame_count):  # 動画の秒数を取得し、回す
            ret = video.grab()
            if ret is False:
                break

            if i % cap_interval is 0:
                if ((i - ub_interval) > skip_frame) or (ub_interval == 0):
                    ret, work_frame = video.read()

                    if ret is False:
                        break
                    work_frame = edit_frame(work_frame)

                    if menu_check is False:
                        menu_check, menu_loc = analyze_menu_frame(
                            work_frame, menu_data, MENU_ROI)
                        if menu_check is True:
                            loc_diff = np.array(MENU_LOC) - np.array(menu_loc)
                            roi_diff = (loc_diff[0], loc_diff[1], loc_diff[0],
                                        loc_diff[1])
                            min_roi = np.array(MIN_ROI) - np.array(roi_diff)
                            tensec_roi = np.array(TEN_SEC_ROI) - np.array(
                                roi_diff)
                            onesec_roi = np.array(ONE_SEC_ROI) - np.array(
                                roi_diff)
                            ub_roi = np.array(UB_ROI) - np.array(roi_diff)
                            damage_menu_roi = np.array(
                                DAMAGE_MENU_ROI) - np.array(roi_diff)
                            damage_data_roi = np.array(
                                DAMAGE_DATA_ROI) - np.array(roi_diff)

                            analyze_anna_icon_frame(work_frame,
                                                    CHARACTER_ICON_ROI,
                                                    characters_find)

                    else:
                        if time_min is "1":
                            time_min = analyze_timer_frame(
                                work_frame, min_roi, 2, time_min)

                        time_sec10 = analyze_timer_frame(
                            work_frame, tensec_roi, 6, time_sec10)
                        time_sec1 = analyze_timer_frame(
                            work_frame, onesec_roi, 10, time_sec1)

                        ub_result = analyze_ub_frame(work_frame, ub_roi,
                                                     time_min, time_sec10,
                                                     time_sec1, ub_data,
                                                     ub_data_value,
                                                     characters_find)

                        if ub_result is FOUND:
                            ub_interval = i

                        ret = analyze_menu_frame(work_frame, damage_menu_data,
                                                 damage_menu_roi)[0]

                        if ret is True:
                            ret, end_frame = video.read()

                            if ret is False:
                                break

                            ret = analyze_damage_frame(end_frame,
                                                       damage_data_roi,
                                                       tmp_damage)
                            if ret is True:
                                total_damage = "総ダメージ " + ''.join(tmp_damage)
                            else:
                                ret = analyze_damage_frame(
                                    end_frame, DAMAGE_DATA_ROI, tmp_damage)
                                if ret is True:
                                    total_damage = "総ダメージ " + ''.join(
                                        tmp_damage)

                            break

    video.release()
    os.remove(movie_path)

    # TLに対する後処理
    debuff_value = ac.make_ub_value_list(ub_data_value, characters_find)

    time_result = tm.time() - start_time
    time_data.append("動画時間 : {:.3f}".format(frame_count / frame_rate) +
                     "  sec")
    time_data.append("処理時間 : {:.3f}".format(time_result) + "  sec")

    return ub_data, time_data, total_damage, debuff_value