Streaming Violence Anticipation System
My university senior capstone: warning before violence starts in video, judged against a baseline that sees no video at all.
View project: Streaming Violence Anticipation SystemA door lock you open with a sequence of hand gestures. It started as my high school senior capstone in 2022–2023, built by a team of four with a depth camera and TensorFlow. In October 2026 I rebuilt it on my own, with a Kinect depth camera, a small PyTorch model and a servo, and it runs on a Raspberry Pi, so far with simulated hands.
A frame from the rebuild’s simulator, not camera footage: the last gesture of the passcode, and the lock opening.
The idea was a passcode you make with your hands instead of typing on a keypad. Four of us built it in our senior year.
The demo came close to fully working: it recognized gesture combinations and authenticated a sequence as a passcode. What held it back was depth perception. We wanted depth to be a native modality, something the model takes in directly as its own kind of input, and that is where we had trouble.
A drawing of how the 2022–2023 version worked, not a photo from the project.
October 2026
I came back to it on my own and built it again from scratch, this time with depth as the model’s only input, the thing the first version struggled with. Whether that holds up on real Kinect data is still untested.
On a Raspberry Pi 4, finding the hand and running the model through ONNX Runtime take 25.7 ms a frame, or 14.9 ms with a lighter model, against a 33 ms budget at 30 frames a second. There is a live view in the browser and a set of tests. I got the Kinect working on the Pi, which needed a one-line patch to libfreenect.
Demo
These come from the simulator in the repository, which renders synthetic people and hands in place of the Kinect, so they are not camera footage. The left of each frame is the depth image, coloured from near to far; the panel on the right is what the model sees; the strip below shows what the model read against the truth and the lock’s state, and the timeline marks each gesture it counted.
Outcome
On 300 synthetic people the model had never seen, with different hand sizes, left and right hands and distances, it recognized 1,719 of 1,721 gestures, with 3 false inputs, and took about 300 ms on average from the start of a gesture to counting it. In a separate test of 100 people entering the passcode straight through, with no pause between gestures, all 100 unlocked it on the first try.
Those are simulated hands, and synthetic accuracy is not real-world accuracy. The model I have so far was trained on the simulator, so the next step is training and testing it on real hands recorded with the Kinect. The code is on GitHub.
Computer vision came back in my university capstone, on warning before violence starts in video.
My university senior capstone: warning before violence starts in video, judged against a baseline that sees no video at all.
View project: Streaming Violence Anticipation SystemAnother early project in making software seem to understand people: a Discord bot for a Minecraft server that matched keywords and pieced its replies together from templates.
View project: Baylee Discord BotI am happy to talk about how it works. nathanpaulgamache@gmail.com
Ask me about it