teknik

Ruby i stället för Aurora

Bild: 2017-09/dsc01062.jpg

Tråkigt att inte hinna vara med på Aurora. Men jag har så mycket annat kul att pyssla med just nu. Ägnade helgen åt att ta fram ett program som går igenom mitt bildbibliotek för att klassificera bilderna med AI och sedan para ihop dem med mina blogginlägg. Detta är en av de saker som är riktigt enkla att göra i Ruby. Så här ser programsnutten som jämför texten i blogginlägget med bildklassifikationen från Clarifai ut. Väldigt kortfattat.

def jamfor_strangar(strang1, strang2)
    ordl1 = strang1.split(' ')
    ordl2 = strang2.split(' ')
    index = 0
    len1 = ordl1.count
    len2 = ordl2.count
    for i in 1..len1 do
        for j in 1..len2 do
            if ordl1[i] == ordl2[j] then 
                index=index+1
            end
        end
    end
    index=index.to_f/len1
    return index
end

bloggen="vattenförekomst landskap (terräng) ingen person vinter hav strand Alla stad utomhus himmel dagsljus kust snö arkitektur klimatförändring is Beacon (nautiska) solnedgång hav väder"
listan="arkitektur gata tätort ingen person trottoar väg byggnad hus stad tom betong familj dagsljus säte (möbler) miljö bostad uttryck utomhus tragedi (olycka) möbel"
jamfor_strangar(bloggen, listan)

Indexet som kommer ut blir ett mått på hur bra blogginlägget passar ihop med bilden. Man måste dock även ta hänsyn till hur vanliga orden är i det svenska språket, så koden är inte riktigt klar ännu. Har även lite kod som anropar Clarifais API för att ta fram bildklassifikationen. Just nu är koden i PHP, men jag ska nog skriva om den i Ruby också.

Det svåraste var faktiskt att få in koden i Rails och skapa en hook i det CMS som jag använder. Det är så jobbigt att jag lutar åt att i stället skapa ett eget API där man kan anropa en Rubyapp med en formaterad URL, typ https://www.appen.com/https%3A%2F%2Fwww.ekonomism.us%2Fsidan.html%0D%0A&API. Appen laddar sedan ner hemsidan och skalar bort allt utom ren text. Det som blir kvar jämförs därefter med alla tillgängliga bilder för att hitta den bild som bästa passar till den aktuella webbsidan och bilden returneras efter anropet.

Men hur utvecklar man en liten app enklast i Ruby? Svaret är i alla fall inte Ruby on Rails. Tror det fungerar betydligt bättre med Sinatra, som är en lättviktslösning som inte är lika strukturerad. Dock möjliggör den användning av Ruby, och det är en fördel om man ska behandla text. I det avseendet är Ruby helt överlägset andra programspråk.

Ska man anropa appen för varje bild krävs en rätt snabb cachelösning och en liten databas, där man nog kan använda SQLite. Naturligtvis cachas bilderna även i webbläsaren och på Rubyservern, om man ställer in den rätt. Fördelen med att ha en app är också att den är generell och kan användas på alla webbsidor. Det enda jag behöver se till då är att appen är uppe och att den kan hämta bilder från min webbserver.

Så arbetet går vidare, vilket innebär att jag inte kommer att vara klar ännu på ett tag. Ni får vänta lite med att se den nya layouten i Bootstrap 4. Den första blogglayout som jag byggt själv från grunden, faktiskt.

comments powered by Disqus


submit to reddit

« Clarifai väljer automatiskt ut rätt bilder - Kryptovalutor kan bli pyramidspel »