Meetup – We crunch(ed) Artificial Intelligence: A.I. & media

Geplaatst op: oktober 20, 2019

De nieuwste editie van onze Meetup sessies, op Woensdag 16 oktober 2019, vond deze keer plaats bij True in Amsterdam. True is specialist in managed hosting en managed digitale werkplekken en is één van de organisaties binnen het Broad Horizon portfolio waarvan Cmotions ook onderdeel is.

Deze keer zoomden we in op het gebruik van A.I. in media. Hiervoor hadden wij Margot Rozendaal (Manager CI) en Jurriaan Nagelkerke (Principal Consultant) uitgenodigd, die ons meenamen in de uitdagingen bij de toepassingen van A.I. bij De Persgroep Nederland (DPG Media). Tom van den Broek (Head of Product bij NOS) focuste zich in zijn sessie meer op de kansen die nieuwe technologie (denk aan VR & AR) voor de NOS biedt.

Iets meer dan 35 mensen hadden de perikelen rondom het boerenprotest getrotseerd en na een hapje en een drankje – en een korte introductie – konden we aftrappen met de sessie van DPG Media.

Margot en Jurriaan zijn uitgebreid ingegaan op de mogelijkheden die Topic Modeling biedt voor (vooral) de redacties van de titels die onder De Persgroep vallen. Met behulp van deze techniek zijn zij erin geslaagd om alle (online) artikelen over alle DPG merken te labellen met meerdere onderwerpen, zodat het voor voor de redacties mogelijk is inzicht te krijgen in het leesgedrag van bezoekers en hierop te anticiperen, terwijl de business hiermee segmentaties op basis van deze inzichten kan configureren om nieuws en andere (ook meer commerciële) content te personaliseren op de digitale kanalen. Waar Margot meer stilstond bij de business relevantie van dit project en uitlegde hoe zij met de stakeholders omging en hen meenam, vertelde Jurriaan vooral over de methode en technieken, valkuilen en oplossingen. Inmiddels is dit project vertaald naar een realtime oplossing die breed gedragen en toegepast wordt binnen de hele organisatie. Gezien het grote aantal vragen een aansprekend onderwerp!

Na een korte break was het de beurt aan Tom. Hij is als Head of Product bij NOS vooral verantwoordelijk voor de grote digitale platformen bij de NOS, waarbij de sites en apps de grootste traffic generators zijn en (dus) de hoogste prioriteit hebben. Daarnaast faciliteert hij met zijn team ook de digitale platforms die bij grote evenementen ingezet worden – veelal nieuws en sport gerelateerd. Tom begon met het schetsen van de rol, positie en werkwijze van zijn team en toonde vervolgens een aantal voorbeelden van nieuw ontwikkelde features o.b.v. topic modeling. Daarnaast benadrukte hij vooral de  mogelijkheden van nieuwe technologie als virtual & augmented reality, maar plaatste terecht kritische noten bij de toepassingen ervan. Bij de NOS wordt volop geëxperimenteerd met deze technologieën, waarbij de toepassing van prototypes een grotere uitdaging vormt dan het ontwikkelen zelf. Een erg aansprekend voorbeeld hiervan is de globe die het team tijdens één van de experimenten heeft ontwikkeld, waaraan in eerste instantie geen toepassing (en businessvraag) gekoppeld kon worden. Uiteindelijk is deze feature opgenomen in de app van het Jeugdjournaal, om kinderen een beter beeld en meer context te geven van het wereldnieuws en de landen waarin dit plaatsvindt. Net als in de eerste sessie kreeg Tom ook een groot aantal vragen op zich afgevuurd.

Na de tweede sessie was er nog uitgebreid gelegenheid om na te praten. Wij kijken – mede vanwege de positieve feedback van sprekers en deelnemers – terug op een wederom zeer geslaagde avond.

Ben jij geïnteresseerd in onze sessies, waarin we niet alleen stilstaan bij de mogelijkheden van A.I. en nieuwe technologie, maar ook de harde noten durven te kraken over alle fails en challenges die hierbij op je pad komen, meld je dan aan op ons platform: https://www.meetup.com/nl-NL/The-Analytics-Lab-Meetup/. Wil je meer weten over onze Meetups of specifieke onderwerpen die we hierin behandelen, neem dan contact met mij op.

This article is written by:
Simon Bolhuis
Simon Bolhuis
info@cmotions.com

Lees meer

Benny Rodrigues meest geboekte artiest, house populairste genre

Geplaatst op: oktober 7, 2019

Dit artikel verscheen eerder op yellowtipi.nl

Het festivalseizoen zit er weer op, tijd om eens terug te kijken. Het was weer een bedrijvig seizoen met veel handjes in de lucht, glittergezichten, confettikanonnen en ietwat overpriced (vegan) burgers. Het seizoen dat we de muntjes inwisselden voor contactloos pinnen. Alle festivals kon je zoals gebruikelijk weer op YellowTipi vinden. Cmotions heeft de data van onze website geanalyseerd en kwam met een aantal interessante feitjes. Weet jij bijvoorbeeld wat de meest gekozen voorletter, voor acts is? Niet? Wij nu wel. Lees vooral verder.

Benny Rodrigues meest geboekte artiest

Hij zit niet stil, die Benny. We mogen inmiddels best spreken over een legende. Al jaren vult hij menig club of festivaltent. Hij is een van de weinige artiesten die in meerdere genres een gerespecteerd dj is. Onder zijn alias ROD laat hij wat rauwere technosounds horen, onder zijn alias Younger Rebinds produceert hij diepere housemuziek. Veelzijdigste alias is toch echt de naam Benny Rodrigues zelf, waaronder hij dit seizoen op ruim 20 festivals te zien was. Oud Yellow Claw-lid Bizzey ging ervandoor met een tweede plek.

Namen beginnend met een D waren dit jaar erg populair

Van alle 4119 verschillende artiesten die op een Nederlands festival op de bühne stonden dit jaar, was de voorletter D het populairst. Maar liefst 391 acts hebben een naam beginnend met deze letter. De Staat, Disco Dolly Soundsystem, Donnie, Dermot Kennedy, de lijst is lang. Of zou de populariteit te wijden zijn aan het feit dat veel DJ’s een naam hebben die geheel toepasselijk met DJ begint (DJ Marcelle, DJ Jean, etc.). Na de D, deed de M het ’t best (360 keer), op nummer drie staat de S (345).

Urban komt op, maar house en pop blijven het populairst

Het zal niemand zijn ontgaan dat hiphop als genre snel in populariteit groeit. Het is bijvoorbeeld het meest gestreamde genre op Spotify. In de festivalwereld zien we toch dat house vaker voorkomt. Op veel urban/hiphop festivals, is vaak ook een house-stage te vinden. Iedereen houdt wel van een houseplaatje of twee om even de handjes in de lucht te gooien. Ook pop is nog steeds erg populair. Dat is makkelijk te verklaren, want pop staat ten slotte voor populair.

Verder zien we dat popmuziek overal erg populair is, behalve in onze hoofdstad. Daar is de spreiding van genres overigens het grootst. Ben je dus een groot fan van reggae, jazz, drum and bass of een ander specifiek genre, is de kans het grootst dat je in Amsterdam wel aan je trekken komt. Ben je meer van de popmuziek, dan kun je beter elders op zoek gaan. Techno is in verhouding overigens het best vertegenwoordigd in Rotterdam. Past ook wel bij zo’n havenstad.

Dit artikel verscheen eerder op yellowtipi.nl

This article is written by:
Siri de Ruiter
Siri de Ruiter
info@cmotions.com

Lees meer

3D Data Visualisatie met de Microsoft HoloLens

Geplaatst op: september 17, 2019

 If you change the way you look at things, the things you look at change…

Hoe tof is het als collega’s die normaal niets met elkaar te maken hebben erachter komen dat ze samen tot nieuwe dingen in staat zijn! Dat gebeurde toen een Data Scientist van Cmotions in gesprek kwam met een Mixed Reality Developer van Breinwave. Twee werelden die ver van elkaar leken te liggen, bleken ineens een interessante overlap te hebben. Want hoe gaaf zou het zijn als je met een Microsoft HoloLens zelf dóór je data heen zou kunnen wandelen en het letterlijk van verschillende kanten kunt bekijken…

En met dat idee gingen we aan de slag.

Het visualiseren van data is een belangrijk onderdeel in elk data science project. Want door data op de juiste manier te visualiseren, geeft dit maximaal inzicht. Sterker nog: het leidt tot vragen die anders niet gesteld zouden worden. Niet voor niets werkt de hele wereld met applicaties als Excel en PowerBI. Maar wat nu als je deze data in 3D zou kunnen projecteren in de ruimte? Dat je niet naar een scherm kijkt, maar met een bril op om je heen de data kunt ervaren. Zou je dan op een andere manier en vanuit een ander perspectief naar het vraagstuk kijken? Hoe langer we erover nadenken, hoe meer mogelijkheden we zien…

In een paar dagen hebben we onderstaande proof-of-concept ontwikkeld waarbij reviewdata van de website van CoolBlue wordt gevisualiseerd. In verschillende kleuren, in verschillende groottes en in een driedimensionale ruimte zodat je er, eventueel samen met een collega, doorheen kunt bewegen en met de data kunt interacteren. En door de HoloLens met deze applicatie op te zetten bij verschillende van onze klanten en collega’s, ontstonden direct meer en meer ideeën voor mogelijke toepassingen. Bijvoorbeeld door data real-time te tonen in een fysieke werkomgeving of door met animaties verschillende business scenario’s inzichtelijk te maken. Dus daar gaan we nu mee aan de slag.

Heb jij ook een idee hoe je dit zou kunnen inzetten of wil je de proof-of-concept zelf eens ervaren? Laat het ons weten!

This article is written by:

Lees meer

Meetup A.I. en Media, 16 oktober in Amsterdam

Geplaatst op: september 17, 2019

Op woensdag 16 oktober aanstaande is het weer tijd voor onze Meetup, deze keer is het onderwerp A.I. en Media.

We starten met Jurriaan Nagelkerke (Cmotions) en Margot Rozendaal (DPG Media). Zij zullen ons meenemen in de ins en outs van Topic Modeling. Hoe pak je dit aan, welke data gebruik je hiervoor, welke technieken zijn het best toepasbaar en wat zijn de valkuilen?

Onze tweede spreker is Tom van den Broek, hij is als Head of Product verantwoordelijk voor de ontwikkeling van de digitale NOS titels zoals NOS.nl, NOS-app, Jeugdjournaal, Nieuwsuur en proposities bij grote evenementen. Tom vertelt over wat hij dagelijks tegenkomt bij het ontwikkelen van digitale diensten bij NOS. Van het dagelijks nieuws tot grote sportevenementen, tot experimenten met bijvoorbeeld Augmented Reality, Google Home en aanbevelingstechnologie.

Voor de mensen die al eerder bij onze Meetups geweest zijn: let op, we hebben de locatie gewijzigd naar Amsterdam. Deze locatie is zowel met de auto als met het OV zeer goed te bereiken.
Ook anders dan normaal is het feit dat de Meetup dit keer volledig in het Nederlands zal zijn, dit in verband met het onderwerp van de avond.

Agenda:
18:00 – 19:00 – Ontvangst met een hapje en drankje
19:00 – 19:50 – Jurriaan Nagelkerke & Margot Rozendaal
20:00 – 20:50 – Tom van den Broek
20:50 – 21:30 – Afsluitende borrel

We hopen jou ook te zien op 16 oktober, meld je dus snel aan, dan maken we er samen een mooie en vooral interessante avond van.

This article is written by:
Simon Bolhuis
Simon Bolhuis
info@cmotions.com

Lees meer

Polygon plotting in R

Geplaatst op: juni 13, 2019

As a data analyst you want to provide clear cut insights for your end users, enabling them to extract all the business value provided by your solution. If your end user is data and analytical savvy then explaining results might be a piece of cake. Unfortunately not all stakeholders are able to fully grab the potential of your solution. In that scenario data visualisation is a powerful concept. Data visualisation enables you to provide the core insights in a single graphic. In this video we demonstrate how to easily visualize data with a geographical component in R using leaflet.
(the code can be found below the video)

In this example we use open source government data: data on characteristics of inhabitants and a GeoJSON datafile. GeoJSON is a popular data format for many geographical technologies and services mainly because it’s simple, lightweight and straightforward. We use the leaflet package in R because it handles GeoJSON data very well straight out of the box.

# --------------------------------------------------------------- #
# What    :   Plot neighborhood data on geo-map (city of Utrecht) #
# Author  :   Wouter van Gils (w.v.gils@cmotions.nl)              #
# Date    :   February 2019                                       #
# --------------------------------------------------------------- #

# packages required
library(geojsonio)
library(leaflet)
library(magrittr)
library(htmlwidgets)



#######################
## READ POLYGON DATA ##
#######################

# Read shapefile: Spatial Polygon DB
neighborhoods_utrecht <- geojson_read("neighborhoods-utrecht.geojson", method= "local", what = "sp")

# What kind of data does this spatial object contain
head(neighborhoods_utrecht@data)

# Show the neighborhoods of Utrecht on a Leaflet map
leaflet(neighborhoods_utrecht) %>%
  #addProviderTiles("nlmaps.standaard") %>% 
  addProviderTiles("Esri.WorldGrayCanvas") %>%
  addPolygons(stroke = TRUE, color = "white", weight="1", smoothFactor = 0.3, fillOpacity = 0.7, fillColor = "lightblue")



##################################
## LOAD DATA TO PLOT ON POLYGON ##
##################################

# Import data to be displayed on the map 
utrecht_data <- read.csv("data_utrecht.csv", header = TRUE, sep = ";", quote = "\"", dec = ".", fill = TRUE)

# Create merge ID and merge data
neighborhoods_utrecht@data$gwb_buurt_code <- 344 * 10000 + as.numeric(levels(neighborhoods_utrecht@data$KODE))[neighborhoods_utrecht@data$KODE] 
neighborhoods_utrecht@data <- merge(neighborhoods_utrecht@data, utrecht_data, by.x="gwb_buurt_code", by.y="gwb_buurt_code")



#########################
## DISPLAY DATA ON MAP ##
#########################

# Define cut points for the colorbins
cuts <- c(0.0, 0.05, 0.1, 0.15, 0.20, 0.25, 0.30, 1)

# Choose a color palette and assign it to the values
colorbins <- colorBin("YlOrRd", domain = neighborhoods_utrecht$p_65_inf, bins = cuts)

# Display data on elderly people on the map 
map <-  leaflet(neighborhoods_utrecht) %>%
                addTiles() %>%
                addProviderTiles("Esri.WorldGrayCanvas") %>%
                addPolygons(stroke = TRUE, color = "white", weight="1", smoothFactor = 0.3, 
                            fillOpacity = 0.7, fillColor = ~colorbins(neighborhoods_utrecht$p_65_inf))  

map

# Add a legend
map_with_legend <- map %>% addLegend(pal = colorbins, 
                                      values = neighborhoods_utrecht$p_65_inf,
                                      labFormat = labelFormat(suffix = " %", transform = function(p_65_inf) 100 * p_65_inf),
                                      opacity = 0.7, title = "Residents of age 65 and older", position = "topright")

map_with_legend



###########################################
## ADD MOUSE-OVER HIGHLIGHTS AND TOOLTIP ##
###########################################

# Create HTML labels for tooltip
tooltip <- sprintf("<strong>%s</strong><br/>%.1f%% elderly residents"
                   ,neighborhoods_utrecht$gwb_buurt_naam
                   ,neighborhoods_utrecht$p_65_inf*100
                  ) %>% lapply(htmltools::HTML)


# Display map
map_with_tooltip <- map_with_legend %>% addPolygons(stroke = TRUE, color = "white", weight="1", smoothFactor = 0.3, fillOpacity = 0.7, 
                                        fillColor = ~colorbins(neighborhoods_utrecht$p_65_inf), 
                                        highlight = highlightOptions(weight = 5, color = "grey", fillOpacity = 0.7, bringToFront = TRUE),
                                        label = tooltip
                                                   )
map_with_tooltip



###########################
## SAVE OUTPUT HTML FILE ##
###########################

# Save output as HTML widget (or incorporate into Shiny / Flexdashboard)
saveWidget(map_with_tooltip, file="Elderly residents in Utrecht.html")

The end result is a portable HTML file you can use in reports, on a webpage or in a R dashboard (flexdashboard / shiny). This video covers the basics of visualising geographical data in R with leaflet. There are many options that can be added quite easily. The R-script and data files can be found on GitLab.

A short note on data security: the output of the leaflet package is a standalone html-file, so no information is send to a web server. To be completely safe, only add data to the GeoJSON data matrix that you are willing to share with the public you provide access to the output file.

This article was first published on Cmotions.

This article is written by:
Wouter van Gils
Wouter van Gils
wouter.vangils@cmotions.com

Lees meer

We crunch(ed) Artificial Intelligence: The story continues

Geplaatst op: mei 21, 2019

After almost seven months, we finally came back with a brand new Meetup! On the 15th of May we came together at our headquarters in Amersfoort. Although there were probably many who stayed home that night to watch football, still thirty people were joining our Meetup. Good choice because we had a really interesting evening!

Jeanine Schoonemann started the evening and introduced us to virtual assistant Willy. Willy can schedule a meeting, summarize a meeting and email all participants, order sandwiches, send a request to our own coffee machine and last but not least, throw a little party! How is this all possible? With LegoBoost, Raspberry Pi and some help of  Willy’s friends like Gmail, Telegram, Google Cloud speech API and Python. Jeanine gave us a look inside Willy’s brains by showing us what happens when you send a voice message to Willy on Telegram. Believe it or not, at the end of the presentation we could even watch Willy’s great dance moves!

Our second speaker was Wayne Tuck from Pegamento, who learned us a lot about their A.I. solution for Mail Automation in his own humoristic way. Wayne was able to give many practical examples, because Pegamento has many well-known companies as customers which made his story even more interesting. It all starts with cleaning, analyzing and training the current emails with an A.I. model based on customer input. Afterwards templates are created which can be used to answer emails both manually and automatically. Wayne showed us right away what happens when you email a question like “ I was drunk on Kingsday and lost all my stuff. On top of that I also missed my train” and many other examples. Of course this made the attendants curious about how this all works, what kind of access rights are needed and how many mails you need to make this all work. Luckily Wayne took enough time to answer all the questions and everybody stayed for a drink afterwards, so there was plenty of time to discuss all the nice topics of this evening!

We want to thank the audience for their attention and enthusiasm and of course Jeanine, Wayne and Willy, thanks for your time, knowledge and nice presentations!

Lees meer

Cluedo hackathon – de ontknoping!

Geplaatst op: mei 14, 2019

Op het prachtige Slot Zuylen is de Cluedo hackathon, georganiseerd door Cmotions en The Analytics Lab, gewonnen door het team van DELA. In een spannende strijd om het voorspellen van de omstandigheden waaronder Dr. Blackbox om het leven is gebracht, bleven zij XS4ALL (tweede plaats) nipt voor.

Tijdens de Cluedo hackathon moesten de tien deelnemende teams door middel van verschillende modellerings-, visualisatie- en ETL-technieken, vaststellen wie er verantwoordelijk was voor de moord op Dr. Blackbox.

De organisatoren hadden zich voor deze gelegenheid omgedoopt tot de klassieke Cluedo karakters, zoals Colonel Mustard, Prince Azure en Madame Rose. Uiteraard moesten ook het moordwapen en de locatie waarop de lafhartige daad heeft plaatsgevonden, worden achterhaald. Hiertoe bleek het team van DELA het beste in staat.

Een eervolle vermelding is er ten slotte voor het team van de Rabobank. Voor de benaderingsvraag, die bij een gelijke stand de winnaar zou bepalen, moesten de teams voorspellen op welk tijdstip de surveillanten op de dag van de moord op Dr. Blackbox, gepauzeerd hebben. Dankzij een feilloze ‘time series analyse’ werd dit tijdstip door de Rabobank op 10 minuten benaderd.

Kijk voor een impressie van de Cluedo hackathon naar de sfeervolle aftermovie.

We willen onze fantastische deelnemers DELA, XS4ALL, Rabobank, ANWB, PGGM, Aegon, VIVAT, RDC, Eneco en Thomas graag heel erg bedanken voor hun enthousiasme en inzet tijdens de hackathon! Wat ons betreft: volgend jaar weer!

This article is written by:
Niek Agema
Niek Agema
info@cmotions.com

Lees meer

Happy EasteR – let’s hide some eggs

Geplaatst op: april 20, 2019

Yes, it’s the most Easterful time of the year again. For some of us a sacred time, for others mainly an egg-eating period and some just enjoy the extra day of spare time. In case you have some time available for some good egg searching business, but no-one seems willing to hide them for you this year, here’s an alteRnative. Hide them yourself using R and have a nice easteR holiday! As you go, you also get to know the very nice image processing package: magick.

Let’s start by collecting some images where we can hide our eggs.

easterScenes <- c(
    'https://www.godupdates.com/wp-content/uploads/2018/03/Easter_LastSupper_GU2018.jpg',
    'https://image.cnbcfm.com/api/v1/image/105764024-1551270113306gettyimages-1127697101.jpeg',
    'https://images.pexels.com/photos/33152/european-rabbits-bunnies-grass-wildlife.jpg'
    )

library(magick)

# read images and put in a vector
images = c(image_read(easterScenes))
#show all images, next to eachother
image_append(image_scale(images, "x200"))

And we – obviously – also need some eggs.

easterEggs <- c(
    'https://cdn.pixabay.com/photo/2017/02/04/20/28/easter-2038263_960_720.png',
    'https://cdn.pixabay.com/photo/2016/12/15/11/41/easter-1908690_960_720.png',
    'https://cdn.pixabay.com/photo/2017/03/28/09/56/easter-egg-2181493_960_720.png',
    'https://cdn.pixabay.com/photo/2019/01/29/13/49/egg-3962420_960_720.png',
    'https://cdn.pixabay.com/photo/2018/02/25/09/44/easter-3180067_960_720.png'
)

# read images and put in a vector
images = c(image_trim(image_read(easterEggs)))
#show all images, next to eachother
image_append(image_scale(images,"x100"))

Excellent, we have some scenes and some eggs, let’s create a function to make hiding our eggs easy. We’ll take advantage of some other functions from the great image processing package magick.

library(magick)
library(dplyr)

hideEggs <- function(sceneUrl,nEggs=nEggs,eggPositions,eggSize=0.04){
    # read scene
    easterScene <- image_read(sceneUrl)
    # resize picture to 800 width (keep aspect ratio)
    easterScene <- image_scale(easterScene, "800x")
    sceneWidth <- as.numeric(image_info(easterScene)['width'])
    sceneHeight <- as.numeric(image_info(easterScene)['height'])
    # collect some eggs (sample with replacement in the basket ;))
    nEggs = nEggs
    eggUrls = sample(easterEggs,nEggs,replace = TRUE)

    easterSceneEggs <- easterScene

    for (eggn in 1:nEggs){
        eggUrl = eggUrls[eggn]
        # get egg, resize, rotate and put on canvas!
        egg <- image_read(eggUrl)
        # resize egg to 5% of canvas height (keep aspect ratio)
        egg <- image_scale(egg,paste0("x",round(eggSize*sceneWidth)))
        # remove background
        egg <- image_background(egg,"none")
        # rotate egg between -90 and 90 degrees
        eggRotation <- runif(1,-90,90)
        egg <- image_rotate(egg,eggRotation)
        #set x and y position (as specified in list or else random)
        if (!missing(eggPositions)){
            xpos <- eggPositions[[eggn]][1]*sceneWidth
        } else {
            xpos <- runif(1,0,sceneWidth)
        }
        if (!missing(eggPositions)){
            ypos <- eggPositions[[eggn]][2]*sceneHeight
        } else {
            ypos <- runif(1,0,sceneHeight)
        }
        #add egg to canvas
        easterSceneEggs <- image_composite(easterSceneEggs, egg, offset = paste0("+",xpos,"+",ypos))
    }
    return(easterSceneEggs)
}

Yeah, we’ve hidden 5 eggs near these happy easter bunnies. Can you spot them in a few seconds??

# let's hide 5 eggs among our easter bunnies
hideEggs(sceneUrl = easterScenes[2],nEggs = 5)

These guys also seem to enjoy our little game. Finally, let’s make a somewhat more challenging version, you can share it with your relatives, wishing them a nice easter holiday.

# think where to hide...
eggPositions = list(c(0.1,0.95),c(0.03,0.6),c(0.4,0.65),c(0.5,0.67),c(0.465,0.31),
                    c(0.6,0.4),c(0.7,0.7),c(0.6,0.66),c(0.8,0.94),c(0.97,0.71))

#... and hide! we'll use smaller eggs to make it a bit more challenging.
easterCard <- hideEggs(sceneUrl = easterScenes[1],nEggs = length(eggPositions),
         eggPositions = eggPositions,
         eggSize = 0.02)

# let's add some wishes to our easter card...

easterCard %>% 
    image_annotate("Happy Easter!!!", size = 36, color = "yellow",  location = "+270+16") %>%
    image_annotate("Can you spot the 10 hidden eggs?", size = 18, color = "white",  location = "+250+60")

In case your audience can’t figure out where you hid the eggs, magick lets you animate your pictures.

# specify easterScene with and without the eggs and specify number of frames
frames <- image_morph(c(easterCard, image_scale(image_read(easterScenes[1]),"800x")), frames = 10)
image_animate(frames)

For much more you can do with magick, see the vignette.

That’s it, have yourself a merry little easter egg!

This article was first published on GitHub.

This article is written by:
Jurriaan Nagelkerke
Jurriaan Nagelkerke
jurriaan.nagelkerke@cmotions.com

Lees meer

Cluedo Hackathon @ Slot Zuylen

Geplaatst op: april 1, 2019

Op vrijdag 12 april vindt de vierde editie van de The Analytics Lab Hackathon plaats. Het thema is dit jaar ‘Cluedo’. Op het prachtige Slot Zuylen in Utrecht gaan tien teams de strijd met elkaar aan om de moordenaar, het moordwapen, de moordlocatie én het tijdstip te voorspellen van de lafhartige moord op Dr. Blackbox. Vanzelfsprekend wordt Cluedo tijdens deze hackathon niet als het ouderwetse bordspel gespeeld, maar aan de hand van verschillende opdrachten waarbij de deelnemers hun analytische vaardigheden moeten inzetten om de juiste antwoorden te vinden.

Om de deelnemers op te warmen hebben zij afgelopen week per post het NRCmotions Handelsblad ontvangen:

De laatste twee edities van de hackathon zijn glansrijk gewonnen door het team van de ANWB. Weten zij de hooggespannen verwachtingen opnieuw waar te maken? Of worden zij dit jaar van de troon gestoten? Bekijk de video impressie van de ‘Escape room’ hackathon van vorig jaar.


This article is written by:
Niek Agema
Niek Agema
info@cmotions.com

Lees meer