Yay!
This commit is contained in:
parent
822497e857
commit
0f702640a3
22
README.md
Normal file
22
README.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
## Test Adapter:
|
||||
```bash
|
||||
base64 --wrap=0 < whole_boards/board_118_1554110522.620303_.png| python3 adapter.py
|
||||
```
|
||||
|
||||
## Build OpenCV
|
||||
```bash
|
||||
mkdir opencv && curl -L https://github.com/opencv/opencv/archive/4.1.0.tar.gz | tar -xzv --directory=opencv_contrib --strip-components=1
|
||||
mkdir opencv_contrib && curl -L https://github.com/opencv/opencv_contrib/archive/4.1.0.tar.gz | tar -xzv --directory=opencv_contrib --strip-components=1
|
||||
|
||||
mkdir -p opencv/build
|
||||
cd opencv/build
|
||||
|
||||
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/ -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_ENABLE_NONFREE=ON -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF ..
|
||||
make -j $(nproc)
|
||||
|
||||
sudo make install
|
||||
sudo ldconfig
|
||||
|
||||
python3 -c "import cv2; print(cv2.__version__)"
|
||||
```
|
||||
|
|
@ -5,7 +5,7 @@ import sys
|
|||
import cv2
|
||||
import numpy as np
|
||||
|
||||
from runner import find_keypoints
|
||||
from runner import find_homography
|
||||
|
||||
# Load base64 encoded image from stdin
|
||||
stdin = sys.stdin.readline()
|
||||
|
@ -15,12 +15,11 @@ camera_img = cv2.imdecode(img_array, flags=cv2.COLOR_BGR2RGB)
|
|||
camera_img = cv2.cvtColor(camera_img, cv2.COLOR_BGR2RGB)
|
||||
|
||||
# Find keypoints in image and pass them back to unity
|
||||
src_points, dst_points = find_keypoints(camera_img)
|
||||
homography = find_homography(camera_img)
|
||||
|
||||
# Finally, output to stdout for unity to read
|
||||
result = {
|
||||
"src_points": [p.tolist() for p in src_points],
|
||||
"dst_points": [p.tolist() for p in dst_points],
|
||||
"homography": homography.tolist(),
|
||||
}
|
||||
|
||||
print(json.dumps(result))
|
||||
|
|
21
runner.py
21
runner.py
|
@ -133,9 +133,7 @@ def train_pieces_svm_canny() -> None:
|
|||
joblib.dump(classifier, f"classifiers/classifier_empty/white_piece_on_{square_color}_square.pkl")
|
||||
|
||||
|
||||
def find_keypoints(camera_image: np.ndarray,
|
||||
baseline: np.ndarray = cv2.imread(str(here.joinpath("new_baseline_board.png"))),
|
||||
debug=False) -> Tuple[np.ndarray, np.ndarray]:
|
||||
def find_keypoints(camera_image: np.ndarray, baseline: np.ndarray, debug=False) -> Tuple[np.ndarray, np.ndarray]:
|
||||
"""
|
||||
Find keypoints in raw camera image of board.
|
||||
|
||||
|
@ -200,14 +198,21 @@ def find_keypoints(camera_image: np.ndarray,
|
|||
return src_points, dst_points
|
||||
|
||||
|
||||
def warp_board(camera_image: np.ndarray, debug=False) -> np.ndarray:
|
||||
baseline = cv2.imread(str(here.joinpath("new_baseline_board.png")))
|
||||
def find_homography(camera_image: np.ndarray,
|
||||
baseline: np.ndarray = cv2.imread(str(here.joinpath("new_baseline_board.png"))),
|
||||
debug=False) -> np.ndarray:
|
||||
src_points, dst_points = find_keypoints(camera_image, baseline, debug=debug)
|
||||
|
||||
h, mask = cv2.findHomography(src_points, dst_points, cv2.RANSAC)
|
||||
height, width, channels = baseline.shape
|
||||
|
||||
return cv2.warpPerspective(camera_image, h, (width, height))
|
||||
return h
|
||||
|
||||
|
||||
def warp_board(camera_image: np.ndarray, homography: np.ndarray = None, debug=False) -> np.ndarray:
|
||||
baseline = cv2.imread(str(here.joinpath("new_baseline_board.png")))
|
||||
homography = homography or find_homography(camera_image, baseline, debug=debug)
|
||||
|
||||
height, width, channels = baseline.shape
|
||||
return cv2.warpPerspective(camera_image, homography, (width, height))
|
||||
|
||||
|
||||
def get_square(warped_board: np.ndarray, position: POSITION) -> np.ndarray:
|
||||
|
|
Loading…
Reference in New Issue
Block a user