Tammo 80

Home / Weblog / Java / Reizen / Taalverhaspelingen

9 April 2014

SnapSolve

I just released the first version of my first iOS app SnapSolve. It is an app that solves Ruzzle or Boggle: it finds all the words in the 4×4 letter grid. There are already many such apps, but the new thing about SnapSolve is the input: you take a picture of the game, and the letters are automatically detected.

Making this game took me a lot of time, since I had to learn XCode, Objective C, C++, OpenCV and had to come up with an actual algorithm to do the letter detection. In the end I resorted to Python + OpenCV to do prototype the algorithm, so three programming languages were involved. Just as I was submitting the app to Apple for review, a blog appeared about just the thing I was making. I’ll try to illustrate the algorithms I developed in the style of the Megafauna blog. Actually, both our algorithms were inspired by SudokuGrab.

My algorithm consists of

  1. Scale the image to 360×480
  2. Detect if it’s Ruzzle or Boggle
  3. Adaptive threshold
  4. Find all contours
  5. Select contours that have a reasonable size (could be a letter)
  6. From the centers of all these contours, select the 16 that are on a 4×4 rectangular grid
  7. Recognize the score modifiers (only for Ruzzle)
  8. Recognize the letters: for every of the 16 letters:
    1. Draw the letter on a 30×30 image
    2. Overlay it with all (26 x 4 = 104) reference letters, find the letter with the largest overlap
  9. Find all the words using a trie
  10. Sort the words by score

Here are some pictures that show what’s going on:

Step 1: resize image Step 3: adaptive threshold Step 3: adaptive threshold Step 5: select contours Step 6: find grid Step 6: find grid Step 7: recognize modifiers
Step 8: recognize letters

22 November 2011

Unicode

Ik ben een fan van het artikel The trouble with em ‘n en (dat schreef ik eerder al eens. Soms is het lastig om het juiste afbreek- dan wel gedachtestreepje in te voegen. Daarvoor moet je of een slim Office-pakket hebben – slimmer dan Microsoft Office – of de Unicode-codes van de betreffende streepjes uit je hoofd kennen. Omdat mij het laatste niet lukt hierbij een spiekbriefje:

Afbreekstreepje 2010
Vast afbreekstreepje 2011
Minteken (voor Excel) 2012
En-streepje 2013
Em-streepje 2014
Minteken (binaire operator) 2212
Plusteken + +
Keerteken × 00D7

Om deze tekens te typen gebruik ik de sneltoets Alt+[plus op numpad]+code. Om dat werkend te krijgen moet je wel iets in het register aanpassen (method 1 op deze pagina).

(Nog) meer details op de site van Jukka Korpela

30 December 2010

Weblog uit de lucht

Zoals velen al hebben geconstateerd, hou ik m’n weblog niet meer zo frequent bij. In de loop van de tijd is de inhoud van dit weblog ook nogal veranderd. In het begin ging het over alles wat ik meemaakte (zoals wat ik in het weekend deed), maar in de loop van de tijd draaide dit naar dingen die ik in de context van m’n werk als wiskundige bedacht (zoals het Kassa-avontuur hieronder, de voetbalplaatjessommen en Mathematica-bevindingen).

Af en toe zal ik nog wel eens wat uitvinden, en dat dan op m’n weblog zetten. Maar ik stop nu officieel met de berichten van de persoonlijke categorie. Wil je weten hoe het met me gaat of wat ik dit weekend gedaan heb, bel dan gerust.

2 June 2010

Mama appelsap

Op verzoek van Erik, die zelf niet zo goed kan Googelen, de “mama appelsap”-top 50:

24 May 2010

Kassa

Naar aanleiding van mijn voetbalplaatjesavontuur werd ik onlangs gebeld door iemand van het tv-programma Kassa. Zij wilden, in het kader van het komende WK, de verzamelacties van alle supermarkten met elkaar vergelijken. En of ik dan kon uitrekenen hoe lang het duurde voordat je alle ‘gadgets’ compleet had.
Helaas, helaas, was ik vorige week op vakantie, dus heeft Vincent het voor Kassa doorgerekend, aangevuld met wat simulaties die ik onderweg heb gedaan. We werden in de uitzending maar kort genoemd (van 23:30 tot 24:42 in het filmpje), maar op de site staat al een uitgebreider verhaal, inclusief het document waarin Vincent de resultaten toelicht.

Kassa

11 May 2010

Internationaal Danstheater

Toen we twee maanden geleden in het programma van de Stadsschouwburg keken, zagen we het Internationaal Danstheater staan. Omdat we toen nog niet wisten dat het nu razend druk is op het werk, boekten we enthousiast kaartjes. En daardoor heb ik nu heerlijk uitgerust tijdens het kijken naar tango’s, lindy hop, Oost-Europese dansen, accordeonsolo’s en wat dies meer zij. Toegegeven, tijdens de trage tango heb ik m’n ogen even dichtgedaan.

Tot mijn genoegen herkende ik sommige moves in het een na laatste nummer, de Lindy Hop, van acrobatisch rock-‘n-roll. Die had ik zo mee kunnen doen. En ook de toegift had ik zo mee kunnen doen, dat was namelijk een tango die ik ook nog heb geleerd van mijn accordeonleraar.

18 April 2010

Gekapt

Onlangs heeft Mustafa mijn haar eens bijgewerkt. Brenda wees me erop dat hij wat haastig te werk was gegaan, en een haartje over het hoofd heeft gezien en dus op m’n hoofd heeft laten zitten. Gelukkig ben ik niet teruggestuurd, een nagelschaartje bood uitkomst.

Last survivor

28 February 2010

Boggle-oplosser

BoggleJaren geleden heb ik eens een Boggle-oplosser geprogrammeerd in PHP. Er stonden al een hoop andere op internet (Untangle, NetBoggle, Boggle Solver, Automated Boggle Solver, en nog veel meer), maar toch niet helemaal wat ik zocht. Om te beginnen vinden de meeste alleen Engelse woorden, en speel ik Boggle in het Nederlands. En verder was de layout van een stel andere net niet mooi genoeg naar mijn wensen.

Natuurlijk vond ik het ook leuk om eens een stukje te programmeren. De maker van een van de bestaande programma’s heeft een uitgebreide beschrijving van de werking van zijn programma online gezet. Deze beschrijving heb ik uitgewerkt in een objectgeoriënteerd stukje PHP. Nu is PHP een geïnterpreteerde computertaal, en daardoor niet ontzettend snel. Toen ik mijn code op mijn studentenwebsite bij Wiskunde zette, was het altijd spannend of de oplossing binnen 30 seconden te voorschijn kwam. Na 30 seconden stopte de webserver (grit) namelijk met rekenen. Daardoor heeft de solver nooit het grote publiek bereikt.

Inmiddels, 6 jaar later, is mijn website al drie keer verhuisd, en ook de boggle-machine is er nog. Ik heb ‘m vanochtend even aangepast aan de nieuwste PHP-eisen, waardoor hij het weer doet. En gelukkig is de computer van m’n huidige website-hoster een stuk sneller dan ollie.

Het programma, nog steeds met de werknaam losop.php is te gebruiken via http://www.tammo80.nl/losop.php?board=aagrmvndifesarte. Om een ander boggle-bord te proberen, moet je de letters in het adres aanpassen (daar heb ik nog geen mooie interface voor gemaakt, maar wie weet).

Update 2014: Ik heb nu ook een iPhone-variant gemaakt: . Je kunt met je iPhone automatisch de letters scannen, en ziet het resultaat dan ook in de app.

26 February 2010

Klompendans

Donderdag begon in Den Haag het Surinamefestival. De opening bestond uit een groot dansspektakel met dansen uit allerlei culturen. Onder andere de Nederlandse, vertegenwoordigd door Pieremachochel. En ik was erbij.

24 January 2010

Omroep Brabant

WeekendmolVanmiddag was ik, met een heel gelegenheidsensemble bestaand uit twee slagwerkers, saxofonist, twee trombonisten, een tubaspeler en een trompetteraar, bij Omroep Brabant, om Lo’Ann te begeleiden bij een live-registratie van haar carnavalskraker Marie doe dè toch nie. De hele uitzending is nog een week terug te luisteren via de site, rond de 45 minuten. Voor de ongeduldigen hier een stukje.

De CD-single kan overigens bij Lo’Ann besteld worden. Nu bestellen, nog voor carnaval in huis!

Opname bij Omroep Brabant

Oudere berichten »