Files
@ 0cb3fbe06b5d
Branch filter:
Location: OneEye/readme.md - annotation
0cb3fbe06b5d
1.6 KiB
text/markdown
Go, Engine: some tests and numerous bugfixes
1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 41c2b255ea2a ab6a05aec0f8 ab6a05aec0f8 ab6a05aec0f8 ab6a05aec0f8 1d4ca86c9193 fc8be31ce773 2ee338a32bcf 2ee338a32bcf ec97d7dc6601 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 1d4ca86c9193 41c2b255ea2a ab6a05aec0f8 ab6a05aec0f8 ab6a05aec0f8 ab6a05aec0f8 ab6a05aec0f8 ab6a05aec0f8 ab6a05aec0f8 ab6a05aec0f8 | OneEye
======
Program to extract moves of a go game from a video and save them to SGF or broadcast them online.
Modules:
* Video: grabbing still frames from a video file / stream. Planning to use FFmpeg.
* Graphic: extracting game position from an image. Using Pillow.
* Watcher: interpreting sequence of game positions as a sequence of moves.
* Broadcaster: interfacing with a go server.
Written for Python 3.5.0. Dependencies: Pillow 2.7.0, NumPy 1.10.0. Start gui.py to run.
Licensed under GNU GPL v2.0 or later. See license.txt. Relicensing possible, don't hesitate to ask.
Graphic
-------
Interpolating the board grid from specified corner points.
Determining the point status based on majority voting of pixels in its neighbourhood (deciding by HSI intensity). Could be improved by considering saturation. Other methods could be better. Opened to research.
Autodetection of the board?
Watcher
-------
Base case: we have two correctly recognized positions differing by a single move (single added stone). Easy.
Issues:
* illegal positions -> ignorable
* positions unreachable from the previous state
* reachable from any past state. (Incorrect states inbetween). How to pick the correct leaf of such a tree?
* reachable by more than one move. Issues with branching factor.
* board shifts -> repaired manually (or automatically), further positions have to be reevaluated
* stone shifts
* stone stops being recognized -> fixable manually and even ignorable
* stone is recognized at an empty intersection. It can be occupied later for real. What do?
|