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

更新於 發佈於 閱讀時間約 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
1會員
8內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
傑劉的沙龍 的其他內容
分享在撲克桌況辨識project中,從OCR文字辨識到程式碼重構的過程,以及如何在技術實作中尋找平衡點的心得。
記錄了在開發撲克機器人時,在選擇使用傳統的template matching方法還是新的機器學習技術間的掙扎,最終決定採用雙軌並行的開發策略。
這篇文章簡要分享我在 Coursera 完成 Google Prompt Essentials 的學習心得,並解釋如何運用「Task、Context、Reference、Evaluate、Iterate」五大步驟來優化與 AI 的互動。
一位程式小白開發撲克機器人的過程,從選擇Python語言、使用ADB和OpenCV處理手機截圖和畫面識別,到探討更穩健的撲克牌辨識方法(例如,使用fast.ai學習過的圖像辨識),以及策略核心開發的挑戰。文章也提到開發流程的規劃,以及選擇Python語言以降低入門門檻的考量。
分享在撲克桌況辨識project中,從OCR文字辨識到程式碼重構的過程,以及如何在技術實作中尋找平衡點的心得。
記錄了在開發撲克機器人時,在選擇使用傳統的template matching方法還是新的機器學習技術間的掙扎,最終決定採用雙軌並行的開發策略。
這篇文章簡要分享我在 Coursera 完成 Google Prompt Essentials 的學習心得,並解釋如何運用「Task、Context、Reference、Evaluate、Iterate」五大步驟來優化與 AI 的互動。
一位程式小白開發撲克機器人的過程,從選擇Python語言、使用ADB和OpenCV處理手機截圖和畫面識別,到探討更穩健的撲克牌辨識方法(例如,使用fast.ai學習過的圖像辨識),以及策略核心開發的挑戰。文章也提到開發流程的規劃,以及選擇Python語言以降低入門門檻的考量。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
程式設計與技術能力 在現代社會中的重要性越來越明顯,尤其是在人工智能(AI)和自動化技術迅速發展的背景下。理解編程語言,如Python、R等,以及熟悉相關技術架構和工具,能夠幫助個人在這樣的環境中更好地工作。這種能力不僅對技術專業人士至關重要,也對非技術領域的人士日益重要,因為基礎的程式設計知識已
Thumbnail
反省就是重寫自己的演算法吧? 假設我就是人工智慧,或心智的可以被看作爲人工智慧的編輯器,那我的程式碼是什麼樣的? 從懵懂無知到一無所知,從自以為是到自我消逝,心智只是執行它的內容,我也需要不斷優化。 最好的優化就是簡化。 最能創造財富的演算法就是關於如何除錯與減少任何風險。
Thumbnail
因為 AI 領域的技術不斷地迭代更新,無法避免的是需要一直去追新的技術 並且需要在一個有限的時間學會,或是實作應用導入到專案之中。 那我覺得在學習新技術可通過以下步驟: 1. 找一個讀得懂的教學資源 現在網路上的教學資源很多,或是書籍的資源也很豐富, 同時也有像是 chatgpt 的 AI
Thumbnail
AI繪圖要廣泛用於商用還有一大段路,還需要依賴人類的經驗判斷、調整,為什麼呢?
Thumbnail
最新的AI趨勢讓人眼花撩亂,不知要如何開始學習?本文介紹了作者對AI的使用和體驗,以及各類AI工具以及推薦的選擇。最後強調了AI是一個很好用的工具,可以幫助人們節省時間並提高效率。鼓勵人們保持好奇心,不停止學習,並提出了對健康生活和開心生活的祝福。
Thumbnail
如何運用A I這個工具,以人為本,不是讓AI主導你的人生。
Thumbnail
本篇文章分享了對創意和靈感來源的深入思考,以及如何將其轉化為實際的成果或解決方案的過程。透過學習、資料收集、練習、創新等方法,提出了將創意落實的思路和技巧。同時介紹了AI在外顯知識的自動化應用,以及對其潛在發展方向的討論。最後探討了傳統機器學習技術在模擬中的應用案例和對AI世界的影響。
Thumbnail
這篇文章介紹瞭如何利用生成式AI(GenAI)來提高學習效率,包括文章重點整理、完善知識體系、客製化學習回饋、提供多元觀點等方法。同時提醒使用者應注意內容的信效度,保持學術誠信,適當運用GenAI能大幅提升工作效率。
Thumbnail
未來,針對圖片生成的 prompt engineering 可能會越來越不重要。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
程式設計與技術能力 在現代社會中的重要性越來越明顯,尤其是在人工智能(AI)和自動化技術迅速發展的背景下。理解編程語言,如Python、R等,以及熟悉相關技術架構和工具,能夠幫助個人在這樣的環境中更好地工作。這種能力不僅對技術專業人士至關重要,也對非技術領域的人士日益重要,因為基礎的程式設計知識已
Thumbnail
反省就是重寫自己的演算法吧? 假設我就是人工智慧,或心智的可以被看作爲人工智慧的編輯器,那我的程式碼是什麼樣的? 從懵懂無知到一無所知,從自以為是到自我消逝,心智只是執行它的內容,我也需要不斷優化。 最好的優化就是簡化。 最能創造財富的演算法就是關於如何除錯與減少任何風險。
Thumbnail
因為 AI 領域的技術不斷地迭代更新,無法避免的是需要一直去追新的技術 並且需要在一個有限的時間學會,或是實作應用導入到專案之中。 那我覺得在學習新技術可通過以下步驟: 1. 找一個讀得懂的教學資源 現在網路上的教學資源很多,或是書籍的資源也很豐富, 同時也有像是 chatgpt 的 AI
Thumbnail
AI繪圖要廣泛用於商用還有一大段路,還需要依賴人類的經驗判斷、調整,為什麼呢?
Thumbnail
最新的AI趨勢讓人眼花撩亂,不知要如何開始學習?本文介紹了作者對AI的使用和體驗,以及各類AI工具以及推薦的選擇。最後強調了AI是一個很好用的工具,可以幫助人們節省時間並提高效率。鼓勵人們保持好奇心,不停止學習,並提出了對健康生活和開心生活的祝福。
Thumbnail
如何運用A I這個工具,以人為本,不是讓AI主導你的人生。
Thumbnail
本篇文章分享了對創意和靈感來源的深入思考,以及如何將其轉化為實際的成果或解決方案的過程。透過學習、資料收集、練習、創新等方法,提出了將創意落實的思路和技巧。同時介紹了AI在外顯知識的自動化應用,以及對其潛在發展方向的討論。最後探討了傳統機器學習技術在模擬中的應用案例和對AI世界的影響。
Thumbnail
這篇文章介紹瞭如何利用生成式AI(GenAI)來提高學習效率,包括文章重點整理、完善知識體系、客製化學習回饋、提供多元觀點等方法。同時提醒使用者應注意內容的信效度,保持學術誠信,適當運用GenAI能大幅提升工作效率。
Thumbnail
未來,針對圖片生成的 prompt engineering 可能會越來越不重要。