Alright, let me tell you about this thing I worked on, I called it ‘camera ashe’ in my notes. It wasn’t anything super fancy, just a little project I messed around with.

It started pretty simply. I was watching some game streams, you know, League stuff. Saw Ashe’s ultimate, the big ice arrow, flying across the screen. Got me thinking, could I rig something up to automatically spot when that arrow gets fired? Maybe using my webcam pointed at the screen, or just grabbing the screen directly.
Getting Started
First things first, I decided screen capture was probably easier than setting up a physical camera. Less hassle with angles and lighting, I figured. I’d messed with Python before, and folks kept talking about OpenCV for image stuff, so I thought I’d give that a whirl.
So, I fired up my terminal. Made sure Python was installed, then did the whole pip install opencv-python thing. Had to fiddle around a bit, you know how it is, sometimes versions don’t play nice. But I got it working. Found some basic Python script online just to grab a chunk of my screen and show it in a window. Okay, step one done. I could see the game on my screen mirrored in this little OpenCV window.
Trying to Spot the Arrow
Now the tricky part: actually finding that arrow. It’s bright, kinda blue-white, and moves fast. My first idea was super basic: colors. Maybe I could just tell the program to look for bright blueish pixels?
- I wrote some code using OpenCV functions to filter the image.
- Tried to isolate just the blues and whites within a certain brightness range.
- Ran it while watching a video of Ashe gameplay.
Well, it sort of worked. But not really. It picked up the arrow sometimes, yeah. But it also picked up tons of other junk. Like, the user interface has blue bits. Some champion effects are blue. Even reflections on shiny stuff in the game sometimes triggered it. It was way too noisy. Pretty useless, honestly.
Trying a Different Approach: Shapes
Okay, color alone wasn’t gonna cut it. The arrow has a distinct shape, right? Like a long, pointy thing. I remembered reading about something called template matching in OpenCV. The idea is you give it a small picture (the ‘template’) and it tries to find that picture within a larger one.
So, I took a screenshot of Ashe’s arrow mid-flight. Carefully cropped it down to just the arrow itself. Saved it as a little image file. Then I updated my Python script. Loaded the arrow template image. Used the function to slide this template over my screen capture, looking for matches.
This felt more promising. When I ran it, boom! It started drawing boxes around things that looked like the arrow. That was cool!
Still Not Perfect Though
But, yeah, ‘looked like’ was the key phrase. It wasn’t perfect either. See, the arrow isn’t always the exact same size on screen. Depends on camera zoom in the game. And it’s not always perfectly horizontal or vertical. Template matching is pretty strict about the template looking exactly like the target.
So, it missed the arrow sometimes. Especially if it was far away and small, or angled weirdly. And sometimes, other flashy effects in the game would trick it, making it draw a box around something that wasn’t the arrow at all. Performance wasn’t amazing either, checking the whole screen constantly.

Where I Left It
I thought about maybe trying some machine learning stuff. Train a model to recognize the arrow properly. But man, that sounded like way more work. Setting up datasets, training… I wasn’t ready to dive that deep for this little weekend project.
Instead, I tried tweaking the template matching. Added some simple checks. Like, if it found a match, was the matched area roughly the right shape? Not too square, not too thin? Did it seem to be moving fast across the screen? That helped filter out some false positives.
So, that’s pretty much where ‘camera ashe’ ended up. It’s a Python script using OpenCV that grabs the screen, uses template matching for Ashe’s arrow, and applies some basic checks to try and be more accurate. It’s not foolproof. It probably catches the arrow maybe 7 or 8 times out of 10, on a good day. Still gets faked out sometimes.
But hey, it was fun to build. Learned a bit more about OpenCV and the challenges of trying to get computers to ‘see’ things in games. It does something, which is more than I started with. Good enough for now.