Machine learning til automatisk beskæring af foto

Hos kontolink håndterer vi tit boner som bilag til transaktioner. En typisk bon, som den i eksemplet her, er næste altid karakteriseret ved at være en del højere end den er bred:

I hverdagen er det ikke noget man tænker det store over, men tager man et foto af bonen med mobilen, vil der næsten altid være en masse spildplads til venstre og højre for bonen. Dette betyder desværre at det er ret svært at læse detaljerne på bonen i kontolink appen.

Vores løsning: automatisk beskæring

Vi har derfor arbejdet med et machine learning projekt, hvor vi træner et neuralt netværk til at identificere hvilken del af fotoet der er bonen og hvad der er baggrund. Efter indentifikationen kan vi beskære fotoet, og dermed benytte pladsen meget bedre i vores app:

Vi ved godt dette ikke løser alle problemer, så det vil stadig være muligt at pinch-zoome ind og navigere rundt på fotoet. Dette kan f.eks være nødvendigt hvis fotoet ikke er helt skarpt. Men vi håber at kunderne i langt de fleste tilfælde direkte vil kunne genkende/verificere bonen når den er beskåret, uden at skulle zoome ind.

Teknisk løsning

Rent teknisk har vi løst opgaven ved at træne et Convolutional Neural Network (CNN). En af de store udfordringer ved supervised learning er som bekendt, at man skal have et relativt stort datasæt at træne modellen på.

For boner kompliceres dette yderligere af at vi manuelt skal ind på hvert foto og opmærke hvor på fotoet bonen er. Heldigvis er det muligt at genbruge det samme foto og opmærkning flere gange. Dette kan fx gøre ved at spejle fotoet vertikalt (da selve teksten på bonen jo ingen betydning har her), rotere foto lidt osv.

CNN’et tager en nedskaleret udgave af fotoet (vi valgte 224 x 224 pixels) i sort/hvid som input. Da alle fotos skal være kvadratiske, har vi paddet fotoet med 0’er/sort til højre og venstre. Her er et eksempel på hvordan bonen fra tidligere ser ud når vi benytter den til træning:

Det lyserøde område viser hvor netværket forudsiger at bonen befinder sig på fotoet. Til evalueringen af hvor godt et match der er mellem vores opmærkning af hvor bonen er placeret, og hvor netværket forudsiger bonen er, opnåede vi gode resultater ved at benytte Intersection over Union (IoU) som metric.

Med hensyn til opbygning af det neurale netværk, har vi både benyttet et vi har trænet op fra bunden, og transfer learning med et allerede trænet netværk (Inception v3). Den primære grund til også at teste transfer learning, er for at sikre at vores metoden ikke blot ville fungere godt på det datasæt vi har (altså overfitting), men også kan generalisere.

Vores resultat

Med vores eget netværk med 4 Conv2D lag og 2 dense lag (og ca. 500 epocs), opnåede vi et gennemsnit på 82% IoU, mens transfer learning på Inception 3 gav et resultat der var ca. 5% lavere – men for et meget dybere netværk end det vi selv trænede.

Vi glæder os til at snart at få tilføjet beskæringen af fotos vha. machine learning til vores produkt, og give kunderne en bedre oplevelse.

Her er lidt flere eksempler, og her er bonerne ikke placeret pænt midt på en baggrund der tydeligt adskilder sig fra bonen. Her er det røde område der hvor vi har opmærket bonen, mens det blå er der hvor netværket forudsiger bonen er placeret.

Skal vi udveksle erfaringer?

Arbejder du også med machine learning / AI i forbindelse med bogholderi eller regnskab, vil vi gerne udveksle erfaringer og snakke om hvilke spændende muligheder disse nye teknologier giver.

Luk menu