This project was initially made as a curiosity before being repurposed for the IB Physics HL Internal Assessment. This fact is not captured in commit history, as this project was done locally and was not initally intended to be shared publicly.
However, as I become a more experienced programmer and revisit old physics projects half for the sake of portfolio building and half for the sake of "this was not exactly a bad idea," I've begun to wonder how these old projects could be formalised and improved on.
This is an open project, feel free to fork and make it your own, and consider Future Improvements if you have no other ideas and maybe just want practice.
Opencv is dependent on earlier versions (<2.3.0) of numpy, where 2.2.6 is incompatible with python 3.14.
For development purposes, if you are working on a <=3.13 environment, no changes need to be done and you can directly install
pip install numpy==2.2.6
However for those of us using 3.14, let's download 3.11 and create the virtual environment:
# Navigate to project directory
cd your_project_folder
# Create virtual environment (use full path to Python 3.11)
C:\Python311\python.exe -m venv venv
# Activate
venv\Scripts\activate
# Verify version
python --version
In this implementation, I used opencv's cv2 for computer vision and ArUco marker detection.
For image processing and some final denoising, I used sk-image for its filters and skeletonise functionalities
pip install opencv-python
pip install scikit-image
/testing: I've left this directory as a reminder of the process it took to create this detector and the methodology behind its use, however it is not referenced in the code.
/media: this is the media you import from testing, name doesn't matter however you should notice that it has a certain order when arranged in the filepaths list in dict.py which has dependencies in the logic of detector.py