CountPilot

模式:尚未啟動
—
—
⚠ 只支援 Playtech、Pragmatic Play、Evolution 的一般桌 —— 不支援 Infinite / One Blackjack / Unlimited 那種全場共用一手牌的桌,也不支援其他供應商。
⚠ 這個工具只支援 Playtech、Pragmatic Play 和 Evolution 的「每人一手牌」一般 21 點桌(要在牌桌設定裡選對供應商)。
不支援其他遊戲供應商(例如 Ezugi、Live Vegas)—— 牌桌的畫面長得不一樣, 我們認不出上面的數字,一張牌都算不到。
也不支援 Evolution 的 Infinite / One Blackjack、Playtech 的 Unlimited Blackjack(無限制二十一點),以及其他所有「全場共用一手牌」的玩法。 那種桌沒有各座位的點數泡泡,玩家的牌完全讀不到,算出來的真數是錯的。
怎麼分辨:看牌桌上每一家的牌上方,有沒有各自一顆數字泡泡(Playtech 灰色圓泡泡、Pragmatic 白色方塊、Evolution 白色藥丸)。
⚠ Evolution 的桌有兩件事看不到:玩家的點數要兩張牌都發完才出現(所以頭兩張是用總點數反推的 —— 大部分總點數只有一種拆法,12~18 照剩餘牌的比例推算),以及玩家爆牌時遊戲不顯示最後的點數。這些牌軟體會用剩餘牌推算,畫面上會寫「推算了 N 手開局」「推算了 N 張爆牌」。
牌桌設定
怎麼看:遊戲畫面裡有 PRAGMATIC PLAY 的浮水印、每一家的點數是白色圓角方塊就選 Pragmatic; 點數是灰色圓泡泡的是 Playtech。
看發牌機裡的牌有多厚,或問客服。這張桌是 8 副。
桌面上就印著:寫 stand on all 17's 就是停牌, 寫 draw to soft 17(或 hit soft 17)就是補牌。 你現在這張桌寫的是 Dealer must draw to 16 and stand on all 17's —— 停牌。
桌面上通常沒寫。看別人玩:有人分牌之後又推了一疊一樣的籌碼上去,就是可以。 影響的只有「一對 2、3、4、6」那幾格。
看發牌時的按鈕列有沒有 Surrender(投降/認輸)。沒有就選「不能」。
看得出來:莊家如果是黑傑克,有偷看就會當場翻牌結算, 沒偷看就要等大家打完才翻。
這張桌已經用實機錄影驗過了:明牌 A 的黑傑克 12.4 秒就結算, 明牌 K 的黑傑克等了 84.7 秒 —— 只有 A 會偷看,所以預設選這個。 這只影響「底牌最可能是什麼」那一塊。
資金管理 還沒填本金
只填你輸光也不會影響生活的錢。 這個數字會直接決定每一手下多少,填大了會算出過大的注。
桌面上寫著(例如 $ 10-2,500 的前面那個數字)。
同上,後面那個數字。不填就當作沒有上限。
預設保守是有理由的:凱利公式假設你知道自己的優勢, 但我們的真數有 ±0.5 的誤差。高估優勢會讓注變大,而下注過大時 賠光的機率是指數上升的。
長期戰績 還沒有紀錄
贏填正的、輸填負的。只有你自己知道,所以要老實填 —— 填假的等於這個功能白做。
用來算「每小時幾手、每小時輸贏」。
打法覆盤 還沒指定你的座位
開始使用
  1. 確認你在一般桌 —— 每一家的牌上方各有一顆數字泡泡。 Unlimited(無限制)那種共用一手牌的桌不支援
  2. 按「開始擷取畫面」 → 選「整個螢幕畫面」→ 分享
  3. 按「開啟浮動視窗」(數字會浮在遊戲上面)
  4. 莊家區定位 —— 這一步不用你做,等莊家發牌就會自動完成
現在該做什麼:載入中…
開發用的東西(辨識畫面、準確率、分布檢查、訓練資料)都收起來了。
算牌的開始和停止完全由你控制,程式不會自己決定。
擷取一開始就會自動讀、自動累積,讓你看得出它在工作 —— 但真數要等你按下「▶ 開始算牌」才會出現, 因為半路加入的計數一定是錯的。
看到荷官洗牌 → 按「▶ 開始算牌」,從那一刻起真數才有意義。
要離座、接電話、換房間 → 按「⏸ 停止算牌」,回來後等下一次洗牌再按開始。
中途退出又重進房間(例如快被踢掉時)→ 回來看一眼畫面:
 ・還在下注、牌還沒發 → 什麼都沒漏,不用管
 ・已經在發牌或那一手打完了 → 漏了一整輪(約 20 張),按「▶ 開始算牌」重來
 程式分不出這兩種(你離開的 20 秒跟正常換局在畫面上一模一樣), 但你回來時一眼就看得出來。
已累積的靴紀錄
還沒有紀錄。
這個解決「不能一邊玩一邊看數據」的問題。 按下去會開一個小視窗,永遠浮在最上層 —— 遊戲照樣全螢幕,數字浮在角落,兩邊都看得到。
這一頁(辨識在這裡跑)可以完全被遮住沒關係,辨識在背景照樣進行。 浮動視窗可以用滑鼠拖到你順手的位置,也可以拉大拉小。
需要 Chrome 116 以上。
模型檔(只有開發模式需要)
如果你是直接雙擊 index.html 打開這一頁,瀏覽器不准網頁自己讀同資料夾的檔案, 所以模型要你手動挑一次:按上面的按鈕,選這個資料夾裡的 model.onnx。 選完就會顯示「模型已載入」,之後再按「開始擷取畫面」。 (如果你是用 http://localhost 開的,模型會自動載入,這一格可以不用管。)
要框哪一區
莊家區不用自己拖框了。等莊家的牌發下來、明牌的點數看得見的時候, 按一次「自動找莊家區」就好 —— 程式會自己掃整張畫面把那個圖層找出來, 比用滑鼠在小小的預覽畫面裡拖精準得多。
換局中間圖層根本沒畫出來,那時候按會說「沒找到」,那是正常的,等發牌了再按一次。
這兩區要分開框,而且不能重疊。 莊家的牌同時出現在左上角的介面圖層和牌桌上,如果兩邊都算一次, 整靴的計數會全錯。所以:莊家區只框左上角那個顯示莊家手牌的小圖層, 玩家區只框牌桌下緣那排玩家的牌,中間那片桌面兩邊都不要框。

莊家區建議用上面的「自動找莊家區」,不要自己拖。 原因是後來實測出來的:讀取器判斷牌的位置時,門檻是「相對於框內最亮那一列」算的, 所以框的大小會改變讀取結果。同一批截圖下去測, 四周留 10~50 像素四張全對,留到 60 像素就有一張的點數讀不出來了 —— 而且那兩張是幾乎一模一樣的畫面,一對一錯。 也就是說手動拖框其實是踩在懸崖邊,差幾個像素就翻船。
自動定位走的是另一條路:用「當初成功找到圖層的那個視窗原尺寸」去讀, 根本沒有「留白多少」這個參數。實測錨點就算偏掉 ±60 像素也還是全對。
(真的要手動拖的話:把整個圖層框進去,四周留 20~40 像素, 上下一定要框完整,不要切到牌的上下緣,也不要框到旁邊的牌靴。)
莊家區:尚未框選
辨識範圍
辨識範圍:整個畫面
在左邊畫面上用滑鼠拖一個框,把發牌那一帶框起來(大概框到莊家的牌和玩家的牌就好)。 框選之外的區域會變暗,那是模型看不到的部分。

為什麼要框:你的螢幕約 2940 像素寬,一張牌只有 77 像素,佔畫面 2.6%; 但模型是用「佔畫面 6~16%」的牌訓練的。整張畫面送進去,牌會被縮到只剩 17 像素、 點數字形只剩 5 像素,根本讀不出來 —— 那是資訊量不夠,調門檻或換大模型都沒用。 框出牌桌之後同一張牌就佔到 6% 左右,正好是模型熟悉的大小,速度也不會變慢。
模型準確率(程式自己出題自己改)
自我測驗:還沒有題目
莊家的牌在畫面上同時有兩份:桌上的實體牌,和左上角的介面圖層。 圖層那一份是遊戲畫上去的,已經驗證到 15/15 全對,所以可以拿來當標準答案。 程式就用它去考模型認不認得桌上那張實體牌 —— 每發一張牌就自動考一題,不需要你標任何答案。
牌被收走之後圖層還會留一下,那種格子模型作答是空的、沒辦法考, 所以另外列出來,不會算成答錯(混在一起算會把 92.6% 誤報成 58%)。
玩家區準確率(用座位上的總點數泡泡當答案)
玩家區考試:還沒有題目
泡泡推算:還沒有資料
泡泡推算是另一條路:不認牌,改用「泡泡數字的變化」算出每一張牌。 13 變成 17 就是拿了一張 4;差 1 一定是 A;差 10 的那一類 Hi-Lo 本來就算同一種, 所以不必分辨是 10 還是 K。
唯一的難處是開局那兩張:泡泡只顯示總和,一個數字兩個未知數。 但泡泡是在第一張牌發下去的時候就出現的,所以只要抓到 「上一刻還沒有泡泡、這一刻有了」那一格,就知道第一張是什麼,第二張再用減法算。 上面那個百分比就是抓到那一刻的比例 —— 這個數字決定這條路能不能取代模型。
現階段只是量測,還沒有餵進計數。
每個有牌的座位上方,遊戲自己會畫一顆寫著總點數的圓圈。 那顆圈圈跟莊家的介面圖層一樣是程式畫上去的,讀出來幾乎不會錯, 所以可以拿它當答案:把模型在那個座位認到的牌加起來,跟圈圈上的數字比。 玩家區一直以來都沒有標準答案可以量,這是第一個能真正量到的數字。
要注意的限制:圈圈只給總和。模型把 4+4 讀成 5+3 時,加起來都是 8, 這種錯誤這裡抓不到 —— 所以這個數字是準確率的上限,真正的只會更低。
泡泡在、但模型一張牌都沒認到(手擋住、牌已收走)另外記成「沒作答」, 不算答錯 —— 混在一起算會低估模型。
自動蒐集訓練資料
已蒐集 0 組真實訓練樣本
這個在你玩的時候自動累積,不用做任何事。 莊家的牌在畫面上同時是「桌上的實體牌」和「左上角的介面圖層」, 而圖層那一份已經驗證 100% 正確 —— 所以每發一張牌, 就自動得到一組「真實牌桌上的照片 + 保證正確的答案」, 完全不需要你標註任何東西。
目前的模型是用合成圖訓練的,跟真實直播畫面有落差(壓縮雜訊、斜角、 陰影、手擋住),這也是信心分數常常只有 60~70% 的原因。 累積幾百組真實樣本之後拿去微調,是讓「認牌」本身變準的治本做法。
條件訂得很嚴,大部分影格會被拒收(張數對不上、分數太低、框超出範圍都不收)。 那是刻意的 —— 錯誤的標籤比沒有標籤更糟,會把模型教壞。
累積到 200 組以上就可以按「匯出」,會下載一個 .json 檔到你的下載資料夾。
單張圖片測試(除錯用)
先用一張牌桌截圖測試辨識,可以確認模型本身有沒有問題,跟畫面擷取分開判斷。
信心門檻:0.45
調低會抓到更多但可能誤判,調高比較保守。除錯時可以調到 0.1 看看模型是不是「有看到但不確定」。
流水計數
0
真數
—
剩餘副數
6.0
這個計數有多可信
還沒算到任何牌。
這一靴的計數有沒有參考價值
還沒開始算。
150 張以前,真數幾乎不可能跑到 +3 —— 不是算不準,是牌還沒偏。 而這張桌 200 多張就洗,所以真正有價值的窗口是「已發 150~200 張」那一段。 在那之前照基本策略打、下底注就好。
策略建議(輪到誰就算誰)
等輪到某一家。
基本策略是「假設剩下的牌跟全新牌盒一樣」算出來的。 算牌的價值一部分在下注,另一部分就在偏離 —— 剩下的牌明顯偏大或偏小時,有些決定會反過來。 最常用到的是 16 對 10:基本策略要牌,但真數 ≥ 0 就該停牌。
建議旁邊如果寫「不確定」,代表真數離門檻的距離比我們的誤差還小 —— 那個建議我們的精度撐不住,照基本策略打就好。
莊家底牌推算
等莊家的明牌發下來。
用「剩下還有哪些牌」算的。最可能是 10/J/Q/K 這件事幾乎永遠成立 (它本來就佔一副牌的 4/13 ≈ 30.8%),有意義的是現在比 30.8% 高還是低。
真正確定的資訊是「莊家偷看過」:明牌是 A 而這一局還在繼續, 代表底牌一定不是 10(不然早就黑傑克結算了)——那些牌會直接從分母拿掉。
下注時真正該看的是「莊家會爆的機率」,那是算牌唯一能改變的數字。
各點數剩餘張數
數字是「還沒發出來的張數」。顏色越紅代表這個點數消耗得比平均快, 越綠代表還剩很多。
10 / J / Q / K 合成一列:玩家的牌是從總點數泡泡的差算出來的, 只知道是「10 點」,分不出是哪一張 —— 硬要分就得亂猜。 Hi-Lo 本來就把它們當成同一類,所以計數不受影響。
分布檢查:還沒算到任何牌。
(分布檢查只看**莊家**的牌 —— 只有那條路知道是 10 還是 K。)
這一行是辨識品質的體檢。 六副牌裡 13 種點數各有 24 張,所以不管怎麼洗,發出去的牌裡 每種點數的數量都該差不多。如果某一種明顯偏多或偏少,那不是運氣, 是辨識把某些牌讀錯成別的點數了 —— 不需要任何額外的辨識技術就能抓到。
這個統計會跨靴累積。按「洗牌 / 新的一靴」時,算牌的數字會歸零 (那是算牌的規則),但辨識品質的統計會繼續往上疊 —— 因為「辨識會不會讀錯」跟賭場有沒有洗牌完全無關。
這很重要:8 副牌只發到 200 多張就洗牌,單靴的資料量根本不夠。 實測單靴只抓得到 25% 的嚴重誤判,累積三靴變 76%,五靴 97%。 所以要玩個三五靴,這一行才真的有判斷力。
(抓不到的情況:兩種點數剛好對稱地互相讀錯,或是每種點數都被平均漏掉。 所以「這行是綠的」不等於「辨識完全正確」。)
已識別的牌(最新在最上面)
    這行會在載入模型後自動更新:如果 model.onnx 不在這個資料夾,按「開始」會切換成 示範模式(隨機資料,不是真的辨識);載入成功的話這行會變成綠色並註明是真實辨識。