David Cain

Hello

My name is David. I am a BSc Computer Science Graduate with 1 year of industry experience

This site is a portfolio of some of my projects

Projects

OV760 Powered Camera And Web Interface

I created a custom PCB in KiCAD, and C Raspberry Pi Firmware for the OV7670 CMOS sensor module. I also created a web interface powered by JavaScript and HTML Canvas, and a custom Flask serial interface written in python

  • RP2040 Pi Pico
  • C
  • HTML
  • KiCAD
  • PCB Design
  • Python
  • Git

AI Image Fitter

How good is a neural network at memorising an image? For this project over-fitting was what we wanted! Using TensorflowJS, JavaScript and HTML canvas the model trains live on a loaded image.

  • AI
  • TensorflowJS
  • HTML Canvas
  • JavaScript

Root Runner - Game Jam

Do You have a green thumb for maths? This cute little game was made for a game Jam. You play as a little flower to race against a clock to solve square roots. Can you guess what the theme was? The game was made and animated in Unity, art in Krita and exported as a WebGL project

  • Unity
  • C#
  • Sprite Sheets
  • 2D Rigging
  • Graphic Design

Prototype Medical Volume Segmentation Tool

A zero footprint web based annotation tool for 3D images. I created a multiplanar reconstructor and renderer and a layer based 3D annotation tool. Using HTML canvas to render and JavaScript for logic it loads a volume and shows planar slices across different axes allowing a user to highlight and make notes for a region.

  • HTML
  • JavaScript
  • CSS
  • HTML Canvas
  • Project Management
  • Usability Testing

Triple MNIST CNN

An exploration of the triple MNIST dataset. Using Tensorflow I trained and fine-tuned various CNNs to label a three-digit image. I even attempted to generate synthetic images with a cdcGAN in PyTorch

  • AI
  • Google Colab
  • Tensorflow
  • PyTorch
  • Regularisation
  • Data Preprocessing
  • Hyperparameter Tuning
  • cdcGAN
  • AI Image Generation

GPU And CPU Parallel Boid Simulations

I implemented a well known flocking simulation into two forms: A Rust program that uses multithreading to parallelise the simulation, and A CUDA/C++ solution running on the GPU optimising shared memory for a performance boost.

  • OpenGL
  • CUDA
  • C++
  • Rust
  • Multithreading
  • GPU
  • Shared Memory
  • Memory Tiling
  • Locks

Minimax 4 In A Row Bot

This is a little 4 in a row game in JavaScript I created where you play in a variable sized board against a bot. The bot uses the MiniMax algorithm to find the optimal move.

  • HTML
  • JavaScript
  • CSS
  • MiniMax