Wednesday, January 13, 2021

Open Source Voting Machines

Below is an automatically laid out ballot, a ballot that was printed, marked, scanned, and then realigned to match the original, and the bubbles found in the image. This is all possible through open source software I've written in 2020.

The source is up on github in a couple chunks:

https://github.com/brianolson/ballotstudio

https://github.com/brianolson/ballotscan

It's mostly Go code with some Python for PDF rendering because I found a handy library for that. There's a TODO list with things like:

  • Put a proper header on each sheet
  • Include how-to-vote graphics
  • Full unicode font support (CJK, etc)
  • Scan a whole stack of paper and emit well formed cast-vote records
  • Support judge-retention issue types (yes/no should a judge stay on)
  • Support Ranked Choice Vote bubbles
So, there's a ways to go before it can be deployed to actually count votes, but I think there's a good core of functionality there. If someone wanted to run a no-frills vote of one ballot type that fit on one sheet of paper I could probably finish that amount of infrastructure in under a month. Otherwise I think my goal is to get this ready for a real election for fall 2022. There should be a long timeline of demos and tests before we trust a real election to this, but also the trust doesn't have to be 100% because the ballots are still just marks on paper and we can always hand-count them, and that's a good thing.