Skip to content

MVP Version#1

Merged
roboloop merged 48 commits intomainfrom
feature/mvp
Mar 16, 2025
Merged

MVP Version#1
roboloop merged 48 commits intomainfrom
feature/mvp

Conversation

@roboloop
Copy link
Copy Markdown
Owner

  • Winner detection via cv2, math model, and program optimization
  • Lot name parsing via Tesseract
  • Draft voting system implementation
  • Visualization mode for better development
  • Shell commands for easy execution
  • Some tests and CI/CD integration
  • Significant manual work to collect assets and test the program

…nd visoalizatiovisualization managmentent from CLI
@roboloop roboloop requested a review from Copilot March 16, 2025 07:21
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements the MVP version of the Winner Finder, adding core features such as winner detection via computer vision and math modeling, lot name parsing using Tesseract, a draft voting system, and improved developer visualization. Key changes include:

  • Introduction of a new stream reader with frame processing and spin detection functionality.
  • Implementation of a new CircleSectors class for vote aggregations and lot name handling.
  • Addition of tests, CI/CD workflow, and updated documentation for setup and usage.

Reviewed Changes

Copilot reviewed 183 out of 183 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
stream/reader.py Introduces frame reading routines and spin detection with potential index risks.
README.md Adds installation, run instructions, and tool description.
.github/workflows/ci.yml New CI configuration for testing and formatting checks.
tests/stream/test_length.py Adds tests for frame length detection.
tests/stream/test_sectors.py Adds tests for sector extraction from frames.
stream/sectors.py Defines the CircleSectors class for managing votes and lot names.
config/logger_config.py Sets up logging with time delta filters and dynamic adapters.
stream/segment.py Implements winner detection logic, length detection, and lot name assignments.
config/init.py and config/config.py Defines configuration constants and imports logger functions.
stream/init.py and pyproject.toml Module organization and code formatting settings.
Comments suppressed due to low confidence (3)

stream/segment.py:97

  • [nitpick] Modifying the third element of self._init_frame.wheel without a clear rationale may lead to unintended side effects. Please add a comment or clarification to explain the purpose of this operation.
self._init_frame.wheel[2] -= 1

stream/segment.py:340

  • [nitpick] The loop variable 'length' shadows the outer variable 'length' used earlier, which can be confusing. Consider renaming the loop variable to something like 'candidate_length' to improve clarity.
for length in length_candidates:

stream/segment.py:258

  • [nitpick] The type annotation 'List[(int, float)]' is nonstandard; consider using 'List[Tuple[int, float]]' for consistency with typing conventions.
def _calc_mean_angle(self, length: int, angles_window: List[(int, float)]) -> Optional[float]:

last_frame = buffer[-1]
if last_frame.is_spin_frame():
# Take a frame before the previous one, to avoid a case when two serial frames are the same frames.
prev_frame = buffer[-3]
Copy link

Copilot AI Mar 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accessing buffer[-3] may lead to an IndexError if the buffer has fewer than three frames. Consider adding a check for the buffer length before accessing this index.

Copilot uses AI. Check for mistakes.
@roboloop roboloop requested a review from Copilot March 16, 2025 07:28
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements the MVP version of the Winner Finder tool with major new features and optimizations. Key changes include:

  • New frame reading logic and spin detection in stream/reader.py.
  • Addition of CI workflow, tests for sectors and length detection, and updated documentation.
  • A comprehensive implementation of winner detection logic and sector voting in stream/segment.py along with supporting configuration updates.

Reviewed Changes

Copilot reviewed 183 out of 183 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
stream/reader.py Implements frame reading, spin detection, and skipping logic.
.github/workflows/ci.yml Introduces a CI workflow for linting and testing.
tests/stream/test_sectors.py Adds tests to verify the sector extraction functionality.
tests/stream/test_length.py Provides tests for detecting frame lengths.
README.md Updates documentation with installation, usage instructions, and feature overview.
stream/sectors.py Implements the CircleSectors class for vote and lot name handling.
stream/init.py Exposes key classes for the stream module.
config/logger_config.py Establishes logger configuration with colored output and time delta filtering.
pyproject.toml Configures Black with a customized line-length.
stream/segment.py Implements the core segment processing and winner detection logic.
config/init.py & config/config.py Consolidates configuration constants and logger functions.
Comments suppressed due to low confidence (2)

stream/segment.py:151

  • [nitpick] The variable 'spins' is used within a nested function without being passed explicitly; consider passing it as a parameter or declaring it as nonlocal to clarify its scope.
if spins > round(sec * 270 / 360):

stream/segment.py:258

  • [nitpick] For clarity and consistency with PEP 484, use 'List[tuple[int, float]]' instead of 'List[(int, float)]' in the type hint.
def _calc_mean_angle(self, length: int, angles_window: List[(int, float)]) -> Optional[float]:

@roboloop roboloop force-pushed the feature/mvp branch 6 times, most recently from d1e931e to c03cbbe Compare March 16, 2025 19:04
@roboloop roboloop merged commit fd874d2 into main Mar 16, 2025
1 check passed
@roboloop roboloop deleted the feature/mvp branch March 16, 2025 19:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants