dev
This commit is contained in:
parent
95cc51238d
commit
d262251e90
26
analyzer.py
26
analyzer.py
@ -147,17 +147,6 @@ def load_suit_templates():
|
|||||||
_suit_templates[s] = cv2.resize(img, (30, 30))
|
_suit_templates[s] = cv2.resize(img, (30, 30))
|
||||||
return _suit_templates
|
return _suit_templates
|
||||||
|
|
||||||
_rank_shape_templates = None
|
|
||||||
def load_rank_shape_templates():
|
|
||||||
global _rank_shape_templates
|
|
||||||
if _rank_shape_templates is not None: return _rank_shape_templates
|
|
||||||
_rank_shape_templates = {}
|
|
||||||
for r in RANKS:
|
|
||||||
img = cv2.imread(f'{TEMPLATES_DIR}/rank_{r}.png', cv2.IMREAD_GRAYSCALE)
|
|
||||||
if img is not None:
|
|
||||||
_rank_shape_templates[r] = cv2.resize(img, (40, 50))
|
|
||||||
print(f'[+] Loaded {len(_rank_shape_templates)} rank templates')
|
|
||||||
return _rank_shape_templates
|
|
||||||
|
|
||||||
def detect_suit_by_shape(img_bgr):
|
def detect_suit_by_shape(img_bgr):
|
||||||
"""Match suit symbol area against 4 templates from card files."""
|
"""Match suit symbol area against 4 templates from card files."""
|
||||||
@ -175,21 +164,6 @@ def detect_suit_by_shape(img_bgr):
|
|||||||
best_score, best_suit = score, s
|
best_score, best_suit = score, s
|
||||||
return best_suit if best_score > 0.15 else '?'
|
return best_suit if best_score > 0.15 else '?'
|
||||||
|
|
||||||
def match_rank_by_shape(img_bgr, suit=None):
|
|
||||||
"""Match rank — top 50% full width for better coverage of large digits."""
|
|
||||||
tpls = load_rank_shape_templates()
|
|
||||||
if not tpls: return '?'
|
|
||||||
h, w = img_bgr.shape[:2]
|
|
||||||
rank_area = img_bgr[:int(h*0.50), :] # top half, full width
|
|
||||||
gray = cv2.cvtColor(rank_area, cv2.COLOR_BGR2GRAY)
|
|
||||||
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
|
|
||||||
binary_r = cv2.resize(binary, (40, 50))
|
|
||||||
best_rank, best_score = '?', -1.0
|
|
||||||
for r, tpl in tpls.items():
|
|
||||||
score = float(cv2.matchTemplate(binary_r, tpl, cv2.TM_CCOEFF_NORMED).max())
|
|
||||||
if score > best_score:
|
|
||||||
best_score, best_rank = score, r
|
|
||||||
return best_rank if best_score > 0.15 else '?'
|
|
||||||
|
|
||||||
def detect_suit_ggpoker(img_bgr):
|
def detect_suit_ggpoker(img_bgr):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user