Esempio n. 1
0
def judgeStartGachi(frame):
    ''' ガチルール試合開始の判定 '''
    # 「4:59」との一致率算出
    val = iip.getMatchValue(bin_459, frame, TL_tim, BR_tim)
    # 閾値以上ならば試合開始
    judge = True if val > thd_val else False

    return judge
Esempio n. 2
0
def judgeRule(frame):
    ''' ルール表示フレームの判定 '''
    # 「ル」一致率算出
    val = iip.getMatchValue(bin_ru, frame, TL_ru, BR_ru)
    # 閾値以上ならばルール表示
    judge = True if val > thd_val else False

    return judge
Esempio n. 3
0
def judgeEnd(frame):
    ''' 試合終了の判定 '''
    # 「FINISH」との一致率算出 ※基準色は黒
    val = iip.getMatchValue(bin_fin, frame, TL_fin, BR_fin, 'blk')
    # 閾値以上ならば試合終了
    judge = True if val > thd_val else False

    return judge
Esempio n. 4
0
def judgeStartTurf(frame):
    ''' ナワバリ試合開始の判定 '''
    # 「2:59」との一致率算出
    val = iip.getMatchValue(bin_259, frame, TL_tim, BR_tim)
    # 閾値以上ならば試合開始
    judge = True if val > thd_val else False

    return judge
Esempio n. 5
0
def judgeResult(frame):
    ''' リザルト画面の判定 '''
    # winとの一致率を算出 ※基準色は黒
    val = iip.getMatchValue(bin_win, frame, TL_win, BR_win, 'blk')
    # 一致率が閾値より大きければリザルト画面
    judge = True if val > thd_val else False

    return judge
Esempio n. 6
0
def judgeJudge(frame):
    ''' ジャッジ画面の判定 '''
    # win, lose両方の一致率を算出
    val_win = iip.getMatchValue(bin_win, frame, TL_wol, BR_wol)
    val_los = iip.getMatchValue(bin_los, frame, TL_wol, BR_wol)

    # 勝敗の一致率を比較
    if val_win > val_los:
        val = val_win
        wol = 'win'
    else:
        val = val_los
        wol = 'lose'

    # 一致率が閾値より大きければジャッジ画面
    if val > thd_val:
        return True, wol
    else:
        return False, None
Esempio n. 7
0
def judgeNice(frame):
    ''' ナイス表示の判別 '''
    # 「ナイス」との一致率算出
    val = iip.getMatchValue(bin_nice,
                            frame,
                            TL_nice,
                            BR_nice,
                            threshold=thd_rgb['sgn'],
                            mask='mask')
    # 閾値以上ならばナイス表示
    judge = True if val > thd_val else False

    return judge, val
Esempio n. 8
0
def getStatusMap(frame, team_color):
    '''
    主観視点マップ画面からプレイヤー状態を取得
    ※自分の状態は判別できない
    '''
    # 記録リスト 0:dead  1:alive  2:sp
    status_list = ['nodata' for i in range(7)]

    # 7プレイヤー分
    for i in range(7):
        # サイズなどのインデックスはiが2以下は0、3以上は1
        idx = 0 if i<=2 else 1
        # イカランプ座標
        TL = TL_map[i]
        BR = BR_map[i]
        # バツ印の一致率を算出
        val_crs = iip.getMatchValue(bin_crs[idx], frame, TL, BR,
                                    team_color[idx], 'hsv', 'mask')

        # 一致率が閾値以上ならたおされている
        if val_crs > thd_val:
            status = 0

        # 通常かスペシャル状態か
        else:
            # スペシャル状態で2値化
            val_spw = iip.getMatchValue(bin_spw[idx], frame, TL, BR,
                                        'spw', 'hsv', 'mask')
            # 閾値はちょっとゆるめに設定
            if val_spw > thd_val * 0.7:
                status = 2
            else:
                status = 1
        # 記録
        status_list[i] = status

    return status_list
Esempio n. 9
0
def getJudge(frame, rule):
    ''' ジャッジ数字取得 '''
    # ナワバリバトル
    if rule == 'turf':
        # 単位「%」画像
        bin_per = cv2.imread('.\\pbm\\judge_percent.pbm', -1)
        # 単位「p」画像
        bin_pnt = cv2.imread('.\\pbm\\judge_point_p.pbm', -1)

        # 数字画像読み込み
        num_per = []
        num_pnt = []
        for num in range(10):
            # パーセント
            bin_num = cv2.imread('.\\pbm\\judge_count_' + str(num) + '.pbm',
                                 -1)
            num_per.append(bin_num)
            # ポイント
            bin_num = cv2.imread('.\\pbm\\judge_point_' + str(num) + '.pbm',
                                 -1)
            num_pnt.append(bin_num)

        # 出力リスト
        list_top = [
            'percent_alfa', 'percent_bravo', 'point_alfa', 'point_bravo'
        ]
        judge_list = [list_top, [0, 0, 0, 0]]

        # アルファとブラボー
        for i in range(2):
            # パーセントの取得
            TL = TL_cnt[i]
            BR = BR_cnt[i]
            percent = iip.getNumber(frame, TL, BR, num_per, image_unit=bin_per)
            # コンピュータの誤差対策に0.1をかけたら丸める
            percent = round(percent * 0.1, 1)

            # ポイントの取得
            TL = TL_pnt[i]
            BR = BR_pnt[i]
            point = iip.getNumber(frame, TL, BR, num_pnt, image_unit=bin_pnt)

            # リストに記録
            judge_list[1][i] = percent
            judge_list[1][i + 2] = point

    # ガチルール
    else:
        # 「ノックアウト」画像
        bin_ko = cv2.imread('.\\pbm\\judge_ko.pbm', -1)
        # 「カウント」画像
        bin_cnt = cv2.imread('.\\pbm\\judge_count.pbm', -1)

        # 数字画像読み込み
        num_cnt = []
        for num in range(10):
            bin_num = cv2.imread('.\\pbm\\judge_count_' + str(num) + '.pbm',
                                 -1)
            num_cnt.append(bin_num)

        # 出力リスト
        list_top = ['count_alfa', 'count_bravo', 'point_alfa', 'point_bravo']
        judge_list = [list_top, [0, 0, 0, 0]]

        # アルファとブラボー
        for i in range(2):
            # 「ノックアウト」との一致率を算出
            TL = TL_cnt[i]
            BR = BR_cnt[i]
            val_ko = iip.getMatchValue(bin_ko, frame, TL, BR)

            # 閾値以上ならばノックアウト
            if val_ko > thd_val:
                count = 'ko'
                point = 500
            else:
                # カウントの取得
                TL = TL_cnt[i]
                BR = BR_cnt[i]
                count = iip.getNumber(frame,
                                      TL,
                                      BR,
                                      num_cnt,
                                      image_unit=bin_cnt)

                if count >= 0:
                    point = count * 5
                else:
                    point = 0

            # リストに記録
            judge_list[1][i] = count
            judge_list[1][i + 2] = point

    return judge_list