From 51c867afc6f136260e836da9dfac260ad7480057 Mon Sep 17 00:00:00 2001
From: Zack Alonzo <zalonzo2@illinois.edu>
Date: Tue, 2 Apr 2024 21:30:35 -0500
Subject: [PATCH] Trying to implement camera. Saving small changes
---
board_detector.py | 6 +++---
game.py | 28 +++++++++++++++++++++++++++-
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/board_detector.py b/board_detector.py
index ad838f8..00ed44c 100644
--- a/board_detector.py
+++ b/board_detector.py
@@ -85,12 +85,12 @@ def filter_lines(lines, min_distance):
def find_board(img):
vertical_lines, horizontal_lines = find_longest_lines(img)
- print("# of Vertical:",len(vertical_lines))
- print("# of Horizontal:",len(horizontal_lines))
if (len(vertical_lines) != 9 or len(horizontal_lines) != 9):
print("Error: Grid does not match expected 9x9")
- return
+ print("# of Vertical:",len(vertical_lines))
+ print("# of Horizontal:",len(horizontal_lines))
+ return None, None
# create bitmasks for vert and horiz so we can get lines and intersections
height, width, _ = img.shape
diff --git a/game.py b/game.py
index 526e992..48abaf9 100644
--- a/game.py
+++ b/game.py
@@ -9,12 +9,17 @@ import move_translator
import cv2
import os
+import time
+from picamera2 import Picamera2, Preview
+
class ChessGame:
def __init__(self, difficulty, show_cv, test_img = None):
self.board = chess.Board()
self.difficulty = difficulty
self.show_cv = show_cv
self.test_img = test_img
+ self.img_idx = 0
+ self.picam2 = Picamera2()
def start_game(self):
print(f"Starting chess game (difficulty: {self.difficulty})")
@@ -24,11 +29,17 @@ class ChessGame:
init_show_cv(self.show_cv)
+ preview_config = self.picam2.create_preview_configuration(main={"size": (512, 512)})
+ self.picam2.configure(preview_config)
+
+ # self.get_img()
+
if (self.test_img):
img_path = os.path.join('test_images', self.test_img)
orig_img = cv2.imread(img_path)
else:
- orig_img = cv2.imread('test_images/board1.jpg') # TODO - CHANGE TO MAKE IT RECEIVE INPUT FROM CAMERA
+ # orig_img = cv2.imread('test_images/board1.jpg') # TODO - CHANGE TO MAKE IT RECEIVE INPUT FROM CAMERA
+ orig_img = self.get_img()
h,w,c = orig_img.shape
cropped_img = orig_img[0:h, int(w/2 - h/2 - 60):int(w/2 + h/2 + 100)]
img = cv2.resize(cropped_img, (512, 512))
@@ -39,6 +50,10 @@ class ChessGame:
cv2.destroyAllWindows()
warped_img, sorted_warped_points = find_board(img)
+
+ if (warped_img is None):
+ return
+
color_grid = find_pieces(warped_img, sorted_warped_points)
while(1): # game loop
@@ -67,6 +82,17 @@ class ChessGame:
# 4. call move_translator with argument of best move
pass
+ def get_img(self):
+ self.img_idx += 1
+ self.picam2.start_preview(Preview.QTGL)
+ self.picam2.start()
+ time.sleep(2)
+ img_txt = 'board' + str(self.img_idx) + '.jpg'
+ print(img_txt)
+ img_path = os.path.join('game_images', img_txt)
+ metadata = self.picam2.capture_file(img_path)
+ return cv2.imread(img_path)
+
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="AI Chess Robot with Computer Vision")
parser.add_argument("--difficulty", choices=["easy", "medium", "hard"],
--
GitLab