重啟撲克機器人之路 -4 :當簡單反而是答案

更新 發佈閱讀 8 分鐘
raw-image

今天在開發撲克牌辨識系統時,遇到了一個有趣的轉折。原本信心滿滿地以為數字辨識已經相當穩定,可以進入下一階段的開發,結果實際測試時卻發現數字7經常被誤判,有時候stack size的數值還會莫名其妙變成"00"。

面對這個問題,我第一時間選擇向AI尋求解方。它們提供了各種看似專業的建議:調整OCR配置、使用白名單限制數字、加強圖片預處理...甚至還建議同時使用三種不同的辨識方法來取平均值。每個建議聽起來都很有道理,AI們也都以相當確切的口吻表達,這反而讓我陷入一個誤區 - 不斷嘗試新的解決方案,卻忽略了最基本的問題排查。

經過一整天的嘗試與挫折,我終於意識到應該先寫個簡單的debug程序,看看圖片在預處理前後的變化。諷刺的是,我發現原始圖片的辨識效果反而最好,所有的預處理反而讓圖片變得更模糊。這個發現讓我哭笑不得,卻也帶來重要的啟示:有時候最簡單的方法可能才是最好的解答,而過度依賴AI的建議反而會讓我們忽略了最基本的問題排查流程。

def detect_text(self, roi: np.ndarray) -> str:

#processed = ImagePreprocessor.preprocess_for_ocr(roi)

return pytesseract.image_to_string(roi, config='--psm 7 digits')
# My godish...

另外今天也在Git上遇到了一些困擾,不小心進入了detached head狀態,折騰了好一陣子才解決。這讓我意識到雖然平時只使用基本的Git功能,但確實需要花些時間深入學習這個工具。然而在Project開發正緊鑼密鼓的當下,要在「專注開發」和「學習新知」之間找到平衡確實不容易。

這一天的經歷讓我重新思考了對AI的依賴程度。它們的建議固然看似精確且充滿自信,但有時這種自信反而會誤導我們。相較之下,與真人討論時的不確定性反而更能激發我思考和探索。即便在AI時代,保持獨立思考和基本的問題排查能力依然至關重要。

拯救我的debug:

import os

import sys

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

import cv2

import numpy as np

from src.utils.device_connector import DeviceConnector

from src.utils.image_preprocessing import ImagePreprocessor

from src.detector.text_detector import TextDetector

from src.config.regions import STACK_REGIONS, BET_REGIONS, POT_REGION


class OCRDebugger:

def __init__(self):

self.device = DeviceConnector.connect_device()

self.text_detector = TextDetector()


def capture_screen(self):

screenshot_data = self.device.screencap()

nparr = np.frombuffer(screenshot_data, np.uint8)

return cv2.imdecode(nparr, cv2.IMREAD_COLOR)


def debug_region(self, screen, region, name):

# Extract region

roi = screen[region['y1']:region['y2'], region['x1']:region['x2']]

# Save original ROI

cv2.imwrite(f"debug_images/{name}_original.png", roi)

# Get preprocessed image

preprocessed = ImagePreprocessor.preprocess_for_ocr(roi)

cv2.imwrite(f"debug_images/{name}_preprocessed.png", preprocessed)

# Get OCR result

text = self.text_detector.detect_text(roi)

value = self.text_detector.extract_number(text)

return {

'text': text,

'value': value,

'roi': roi,

'preprocessed': preprocessed

}


def run_debug(self):

# Create debug_images directory if it doesn't exist

os.makedirs("debug_images", exist_ok=True)

# Capture screen

screen = self.capture_screen()

cv2.imwrite("debug_images/full_screen.png", screen)

# Debug each region

regions_to_check = {

'hero_stack': STACK_REGIONS['hero'],

'villain_stack': STACK_REGIONS['villain'],

'hero_bet': BET_REGIONS['hero'],

'villain_bet': BET_REGIONS['villain'],

'pot': POT_REGION

}

results = {}

for name, region in regions_to_check.items():

results[name] = self.debug_region(screen, region, name)

# Print results

print("\n=== OCR Debug Results ===")

for name, result in results.items():

print(f"\n{name.upper()}:")

print(f"Raw OCR text: '{result['text']}'")

print(f"Extracted value: {result['value']}")

print("\nDebug images have been saved to the 'debug_images' directory")

print("Check the images to see the exact regions being captured and their preprocessing")



def main():

debugger = OCRDebugger()

debugger.run_debug()



if __name__ == "__main__":

main()


留言
avatar-img
留言分享你的想法!
avatar-img
傑劉的沙龍
3會員
18內容數
傑劉的沙龍的其他內容
2025/03/16
記錄了對撲克數據庫程式碼的深入理解,以及如何通過精確的查詢獲得準確的分析結果。通過重新組織action type的分類,讓後續的數據分析變得更加高效。這個數據庫將是撲克機器人專案的重要組成部分,用於建立更精確的對手模型。
Thumbnail
2025/03/16
記錄了對撲克數據庫程式碼的深入理解,以及如何通過精確的查詢獲得準確的分析結果。通過重新組織action type的分類,讓後續的數據分析變得更加高效。這個數據庫將是撲克機器人專案的重要組成部分,用於建立更精確的對手模型。
Thumbnail
2025/03/14
記錄了在建構撲克數據庫過程中遇到的挑戰和收穫。探討了自建系統與現成工具的差異,以及如何確保數據準確性。同時反思了精確表達查詢需求的重要性,以及自建系統潛在的長期價值。
Thumbnail
2025/03/14
記錄了在建構撲克數據庫過程中遇到的挑戰和收穫。探討了自建系統與現成工具的差異,以及如何確保數據準確性。同時反思了精確表達查詢需求的重要性,以及自建系統潛在的長期價值。
Thumbnail
2025/03/13
記錄了在撲克機器人開發中從機器學習模型轉向建立自定義數據庫的過程,以及這個策略轉變背後的思考。通過分析真實玩家的行動分布,希望能訓練出更有效的撲克機器人。
Thumbnail
2025/03/13
記錄了在撲克機器人開發中從機器學習模型轉向建立自定義數據庫的過程,以及這個策略轉變背後的思考。通過分析真實玩家的行動分布,希望能訓練出更有效的撲克機器人。
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
這篇文章討論了資訊查證與過濾情報的重要性,並分享了作者在使用 ChatGPT 和 Perplexity 查證的經驗,提供瞭如何找到可靠資訊來源的建議,並強調了對資訊可信度的敏感度。
Thumbnail
這篇文章討論了資訊查證與過濾情報的重要性,並分享了作者在使用 ChatGPT 和 Perplexity 查證的經驗,提供瞭如何找到可靠資訊來源的建議,並強調了對資訊可信度的敏感度。
Thumbnail
反省就是重寫自己的演算法吧? 假設我就是人工智慧,或心智的可以被看作爲人工智慧的編輯器,那我的程式碼是什麼樣的? 從懵懂無知到一無所知,從自以為是到自我消逝,心智只是執行它的內容,我也需要不斷優化。 最好的優化就是簡化。 最能創造財富的演算法就是關於如何除錯與減少任何風險。
Thumbnail
反省就是重寫自己的演算法吧? 假設我就是人工智慧,或心智的可以被看作爲人工智慧的編輯器,那我的程式碼是什麼樣的? 從懵懂無知到一無所知,從自以為是到自我消逝,心智只是執行它的內容,我也需要不斷優化。 最好的優化就是簡化。 最能創造財富的演算法就是關於如何除錯與減少任何風險。
Thumbnail
AlphaGo 的開發,讓人工智慧在圍棋的研究讓更多人被看到,也看到它成熟的結果。現代的圍棋教學和棋手訓練,也或多或少會借鏡各類的AI系統做學習。然而,教學的歷程,過度追求AI的棋步和棋法,有時會讓小朋友難以理解。一步登天的方式,有時反而會讓同學走得更坎坷。
Thumbnail
AlphaGo 的開發,讓人工智慧在圍棋的研究讓更多人被看到,也看到它成熟的結果。現代的圍棋教學和棋手訓練,也或多或少會借鏡各類的AI系統做學習。然而,教學的歷程,過度追求AI的棋步和棋法,有時會讓小朋友難以理解。一步登天的方式,有時反而會讓同學走得更坎坷。
Thumbnail
不知道大家會不會有這種感覺,在使用現今的一些預訓練模型時,雖然好用,但是實際在場域部屬時總感覺殺雞焉用牛刀,實際使用下去後續又沒有時間讓你去優化它,只好將錯就錯反正能用的想法持續使用,現在有個不錯的方法讓你在一開始就可以用相對低廉的成本去優化這個模型,讓後續使用不再懊悔。
Thumbnail
不知道大家會不會有這種感覺,在使用現今的一些預訓練模型時,雖然好用,但是實際在場域部屬時總感覺殺雞焉用牛刀,實際使用下去後續又沒有時間讓你去優化它,只好將錯就錯反正能用的想法持續使用,現在有個不錯的方法讓你在一開始就可以用相對低廉的成本去優化這個模型,讓後續使用不再懊悔。
Thumbnail
我知道這些ai開發者想做什麼了!? 我不知道這個是好事,還是壞事,總之好的方面,這是給予我們更大的方便。 事情是這樣,我剛好處理著一份民宿的工作。所以會有大量的房間記錄,以及大量不定的任務。所以我就想,讓ai(模型我就不介紹了,是給開發者用的。)然後它完成的任務不夠完美,所以我就讓他finetu
Thumbnail
我知道這些ai開發者想做什麼了!? 我不知道這個是好事,還是壞事,總之好的方面,這是給予我們更大的方便。 事情是這樣,我剛好處理著一份民宿的工作。所以會有大量的房間記錄,以及大量不定的任務。所以我就想,讓ai(模型我就不介紹了,是給開發者用的。)然後它完成的任務不夠完美,所以我就讓他finetu
Thumbnail
我問AI,結果得到的兩個完全相反的結果,老師在教學影片中說的是Claude的版本.... 在AI時代自學,除了要懂得下咒語(prompt,網路上到處在教如何下正確的prompt,使AI更好用),還是要有一定的基礎能力(例如查核能力),不要太相信AI給的答案,多問幾家總是好的。
Thumbnail
我問AI,結果得到的兩個完全相反的結果,老師在教學影片中說的是Claude的版本.... 在AI時代自學,除了要懂得下咒語(prompt,網路上到處在教如何下正確的prompt,使AI更好用),還是要有一定的基礎能力(例如查核能力),不要太相信AI給的答案,多問幾家總是好的。
Thumbnail
不確定有多少格友跟我一樣,喜歡文字、喜歡寫寫東西,偏偏沒什麼圖像創作天分。前陣子意外發現,即使是我這樣一個純新手,如果需求只是要製作「符合文章意境的縮圖」,真的只要輸入幾個關鍵字,就能得到堪算滿意的成果。而且套用在工作上,製作簡報和圖文說明時,都能快速提供堪用的成品,或至少能對圖像呈現形式有點想像。
Thumbnail
不確定有多少格友跟我一樣,喜歡文字、喜歡寫寫東西,偏偏沒什麼圖像創作天分。前陣子意外發現,即使是我這樣一個純新手,如果需求只是要製作「符合文章意境的縮圖」,真的只要輸入幾個關鍵字,就能得到堪算滿意的成果。而且套用在工作上,製作簡報和圖文說明時,都能快速提供堪用的成品,或至少能對圖像呈現形式有點想像。
Thumbnail
雖然AI在許多領域展現出驚人的能力,如圖像生成、語言理解、棋藝、駕駛等,但從更深層次看,AI的核心仍是模式匹配和數據組合。AI不能真正理解語意,也缺乏人類的創造力。 進一步分析了GPT等語言模型的技術原理,認為其實質上是從大量文本中學習Words組合規則,而非真正理解文本意思。這導致AI展現出諸如
Thumbnail
雖然AI在許多領域展現出驚人的能力,如圖像生成、語言理解、棋藝、駕駛等,但從更深層次看,AI的核心仍是模式匹配和數據組合。AI不能真正理解語意,也缺乏人類的創造力。 進一步分析了GPT等語言模型的技術原理,認為其實質上是從大量文本中學習Words組合規則,而非真正理解文本意思。這導致AI展現出諸如
Thumbnail
不是摸魚,是因為前幾天上班超認真,處理了一堆事,今天突然就沒事了,運氣真好,希望不要被主管發現我現在沒事做在聽歌~~~ https://youtu.be/8MG--WuNW1Y?t=37
Thumbnail
不是摸魚,是因為前幾天上班超認真,處理了一堆事,今天突然就沒事了,運氣真好,希望不要被主管發現我現在沒事做在聽歌~~~ https://youtu.be/8MG--WuNW1Y?t=37
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News