Multify - Den smarta stereon (Loggbok)
Av: Jack Billström
"Multify" är ett pågående gymnasiearbete, använder denna som en logg för min lärare att se, samt för att dela med mig utav en något "nördig" pryl. Oklart när det är 100% klart, här nedan kommer en kort beskrivning så du enkelt kan få en snabb förståelse:
Mitt projekt är en sorts stereo som är uppbyggd utav en enkortsdator (Raspberry Pi), med en webbkamera som känner igen ansikten. Den kör ett ansikte mot mina Facebook vänner, därefter tar den fram dennes musiksmak och genererar en spellista utifrån dennes favoritartister. Känner enheten av en ny människa så gör den samma sak igen, fast ”jämkar” och tar fram musik som båda gillar. Efter två timmar ska musiken långsamt börja ”återställas” till ansiktet den såg sist.
Tyckte att det skulle se häftigt ut med en plexiglas-högtalare som enkelt kan monteras på vägg eller ställas på ett bord. Gjorde därav denna design i Blender.
Men läste därav att det inte var särskilt optimalt att använda plexiglas så ska få se hur jag gör.
Min hårdvara består just nu utav :
* Raspberry Pi (Modell B 512MB RAM)
* Webbkamera (Clas Ohlsson Modell 106)
* Archos 5 IT (Internet Tablet 7GB)
* Eltox Monitor Centre (Högtalarmonitor)
Jag började med att fundera ut hur allting skulle fungera, samt om allting skulle fungera. Jag visste att jag skulle använda min Raspberry Pi så jag Googlade lite sök ord som exempelvis "Raspberry pi spotify" och hittade diverse program som sas fungera.
Jag valde "Respotify", finns här : https://github.com/Hexxeh/spotify-websocket-api/
Det var rätt knepigt att få till det så att det fungerade. Men efter ett flertal timmar så fick jag det att fungera, så här ser det ut i konsolen just nu när man öppnar Respotify.
Därefter så var jag tvungen att lära mig ansiktsigenkänning, jag satt mycket med OpenCV biblioteket och försökte få till något vettigt där, installerade det som tog runt 7 timmar för att kompilera på min rPI. Sedan så hittade jag ett python skript som ritade en röd triangel runt om ansikten den kunde se. Mycket bra då jag visste att jag sedan skulle skriva om den funktionen för att identifiera bilden. Det lät mycket enklare än vad det egentligen var kan jag lova, hittade därför ett API som jag valde att använda. Det heter "Rekognition", läste på om det API't. Såg att det var mycket simpelt och det tyckte jag om. Därefter så gjorde jag en HTML-fil med en mängd javascript som skulle gräva fram min vänlista från Facebooks API och sedan spara varje väns profilbild hos API't tillsammans med deras Facebook ID. Efter att ha lyckats klappade jag händerna men ville få åstadkomma mycket mer. Därefter påbörjade jag att börja koda i Python. Ska nu inte förklara flera hundra rader kod så jag gör en numrerad lista som förklarar varje process. Alla processer är inte klar, men det är en beskrivning om vad som ska ske.
1. Starta stereon
2. Skripten startas med automatik
3. När ett ansikte är identifierat så tas personens musiksmak fram (artister) från Facebook API
4. Artisterna körs mot Last.FMs API för att få fram artistens två populäraste låtar
5. Första låten skickas in mot ett skript som börjar spela upp den från Spotify (Ex.[play "Maskinen - Mamma Sa"])
6. Låten spelas upp och de resterande läggs på kö.
7. Om "stereon" ser ett annat ansikte så börjar den med samma process. Men innan den kommer till steg 5 så kommer skriptet att sålla ut sådan musik som bara en utav dom gillar så det som blir kvar är gemensam musiksmak.
8. Den gemensamma musiken spelas upp.
9. Går det en tidsinställd timer så återställ musiken och musik från den inloggades spellistor.
Jag har även två "specialare", den ena är att jag skall använda surfplattan (Archos 5 IT) till att visa spelkön samt album omslaget till den aktuella låten. Den andra är att den dominanta färgen från album omslaget, skickas till en "RGB-strip" (RGB LED list) som får samma färg som den dominanta färgen. Färgen kan dock inte vara svart såklart.
Just nu så är det finslip på att spara fler bilder än bara profilbilderna hos vännerna då de flesta inte har "perfekta" profilbilder. Samt att Respotify inte hanterar ÅÄÖ, skicka kommandot som startar låtarna (Väldigt svårt).
Kom gärna med feedback, kritig, idéer och andra tankar. Har inte tänkt på allt men detta galleri kommer att utökas med tiden som jag lyckas åstadkomma något märkvärdigt.
Cheers
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-09-09
Installerade OpenCV på min Raspberry PI
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-09-10
Installerade en webbkamera och lyckades få till ansiktsigenkänning. Nästa steg är nu att få till faceRecognition()
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-09-14
Spotifyklient installerad, funkar perfekt.
Ansikten sparas och laddas upp på alkis.se
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-09-14
Spotifyklient installerad, funkar perfekt.
Ansikten sparas och laddas upp på alkis.se
Ölpaus
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-09-19
Under denna sena kväll tillade jag så att kameran kände igen mig, identifierade mig, skrev ut en lista på all musik jag gillar. Nästa steg är att spela upp artisterna
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-09-26
Idag så fick jag lite hjälp på ett forum för att kunna få till en bugg jag slitit länge med, kan gott säga att jag nu kan skriva en länk till en bild (min profilbild på facebook) och få den senaste låten jag gillade (topplåten hos min senaste favoritartist) att spelas upp. Filmklipp kommer bifogas.
https://www.facebook.com/photo.php?v=641665242531811 - Film från dagens programmering, rätt nöjd!
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-09-30
Idag så har jag jobbat på att den ska:
- Söka efter den senaste låten
- Spela upp den bästa matchningen
- Vänta tills låten slutat
- Hämta nästa låt
- Fortsätt
Får dock ett felmeddelande att vissa Python Moduler saknas, jobbar på att lösa detta problem. Tittar för mycket på Shameless (TV) och latat mig. Får lov att skärpa till mig, förhoppningsvis kan jag lösa detta problem igenom att SSH'a in i min rPI och ominstallera modulen. Får bli imorgon på vägen in till skolan.
Får jag till detta kan jag se om dagensprogrammering lönat sig.
Funkar allt som det ska efteråt så kommer jag att finslipa Facebookalgoritmerna och debuga lite!
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-10-03
Idag har jag undersökt mitt UTF-8 problem, ett bra tips är att inte förvandla teckenkodningen till UTF-8 som en standard då vissa Python Moduler förlitar sig på ACSII.
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-10-04
Jobbat med att uppgradera från Python 2.7.x till Python 3.2.x på min PI. Nu ska inte modulerna krångla längre
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-10-07
Idag så har jag skapat ett projekt hos Github där endast inbjudna utvecklare kan ta del utav koden. Även påbörjat en spotify app där man sedan kan använda den. Kommer funka exakt som själv Multify stereon men i datorn som man kanske redan kopplat till sin ljudanläggning.
Vill du hjälpa mig utveckla Spotify Applikationen så hör av dig till mig via PM eller på mail, mailen är :
(Mitt förnamn) [at] alkis . (Svensk domän ändelse)
Applikationen är skriven i HTML, CSS och JS. Skickar upp all kod till mitt repo när jag minst har 5 intresserade utvecklare.
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-10-14
När den känner igen en person så kan den nu identifiera denne, därefter ta fram dess musiksmak från Facebook. Musiksmak sparas nu såhär:
["Lady Gaga - Applause", "Lady Gaga - Bad Romance", "Oskar Linnros - Hur Dom \xc3\x84n", "Oskar Linnros - Fr\xc3\xa5n balkongen", "Jazmine Sullivan - Bust Your Windows", "Jazmine Sullivan - Need U Bad", "T.I. - Whatever You Like", "T.I. - What You Know", "Timoteij - Kom", "Timoteij - Stormande"]
Enkelt sagt, en array med strängar för all musik som den identifierade gillar. Detta funkar alldeles fint, just nu jobbas det på att när en ny person dyker upp så sparas dennes musik i en likadan lista. Därefter så kör jag en compare() funktion som sållar ut de resultat som inte är gemensamma. Men om de har för få resultat så läggs en antal från båda personerna till för att det ska finnas gott om musik.
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-10-21
Spotify premium tillåter endast att man har premium för att kunna använda tredjeparts applikationer så därför har jag nu en liten kaffepaus i arbetet. Dock så ska jag beställa en förstärkare och bygga ihop allting under tiden.
Fick även en sponsring på en ny VPS leverantör som hjälper mig med att sköta en snabb och minimal anslutning mellan alla ansikten och stereon.
Kolla in https://cloudroyale.se/ De har ett gratiserbjudande just nu!
-------------------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
2013-12-04
Nu har jag inte hört av mig på ett bra tag och anser därför att jag borde dela med mig om hur det ligger till.
Just nu så funkar det med att Python klienten ser ett ansikte, kör det mot ett öppet API (rekognition v2), får ett svar med de tre bästa matchningarna. Sedan sparar den ner alla dennes gillade band/artister från Facebook. Tillsammans med Last.FMs API så tar sedan programvaran fram de tre populäraste låtarna från dessa artister och sparar de tillsammans i en stor textfil. Spotify skriptet spelar sedan upp musik därifrån.
TODO:
- Skriptet spelar bara upp den första låten, en loop behövs(?)
- Optimering utav fps från webbkamera
- Köras mot flera ansikten
Ikväll (2013-12-04 23.28) så kommer jag försöka mig på att installera en linux maskin inuti vmware (virtuellt operativsystem är tanken), få allting att fungera igen. Därefter snabba upp processer. Efter jul när ekonomin etablerat sig hos mig igen så är även tanken att påbörja det fysiska arbetet. Att bygga in det i en högtalare!