CountPilot 需要「螢幕錄製」權限才看得到牌桌。① 按「打開系統設定」,在清單裡把 CountPilot 打開。② 回來按「重新開啟 CountPilot」—— macOS 規定要重開才會生效。
示範中:這是 2026-09-28 真實牌桌錄下來的 6 分鐘,數字是程式當場算的 —— 不是你現在的牌桌。
算牌的開始和停止完全由你控制,程式不會自己決定。
擷取一開始就會自動讀、自動累積,讓你看得出它在工作 ——
但真數要等你按下「▶ 開始算牌」才會出現,
因為半路加入的計數一定是錯的。
看到荷官洗牌 → 按「▶ 開始算牌」,從那一刻起真數才有意義。
要離座、接電話、換房間 → 按「⏸ 停止算牌」,回來後等下一次洗牌再按開始。
中途退出又重進房間(例如快被踢掉時)→ 回來看一眼畫面:
・還在下注、牌還沒發 → 什麼都沒漏,不用管
・已經在發牌或那一手打完了 → 漏了一整輪(約 20 張),按「▶ 開始算牌」重來
程式分不出這兩種(你離開的 20 秒跟正常換局在畫面上一模一樣),
但你回來時一眼就看得出來。
已累積的靴紀錄
還沒有紀錄。
這個解決「不能一邊玩一邊看數據」的問題。
按下去會開一個小視窗,永遠浮在最上層 ——
遊戲照樣全螢幕,數字浮在角落,兩邊都看得到。
這一頁(辨識在這裡跑)可以完全被遮住沒關係,辨識在背景照樣進行。
浮動視窗可以用滑鼠拖到你順手的位置,也可以拉大拉小。
需要 Chrome 116 以上。
要框哪一區
莊家區不用自己拖框了。等莊家的牌發下來、明牌的點數看得見的時候,
按一次「自動找莊家區」就好 —— 程式會自己掃整張畫面把那個圖層找出來,
比用滑鼠在小小的預覽畫面裡拖精準得多。
換局中間圖層根本沒畫出來,那時候按會說「沒找到」,那是正常的,等發牌了再按一次。
這兩區要分開框,而且不能重疊。
莊家的牌同時出現在左上角的介面圖層和牌桌上,如果兩邊都算一次,
整靴的計數會全錯。所以:莊家區只框左上角那個顯示莊家手牌的小圖層,
玩家區只框牌桌下緣那排玩家的牌,中間那片桌面兩邊都不要框。
莊家區建議用上面的「自動找莊家區」,不要自己拖。
原因是後來實測出來的:讀取器判斷牌的位置時,門檻是「相對於框內最亮那一列」算的,
所以框的大小會改變讀取結果。同一批截圖下去測,
四周留 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 檔到你的下載資料夾。
這一靴的計數有沒有參考價值
還沒開始算。
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 不在這個資料夾,按「開始」會切換成
示範模式(隨機資料,不是真的辨識);載入成功的話這行會變成綠色並註明是真實辨識。