More selected projects

Mike Teavee

Mike Teavee’ attempts to question the virtual distancing created between subject and viewer through electronic visual display. ‘Mike Teavee’ is a satirical rendering of the contemporary social acceptance and almost lust for violence within virtual gaming cultures.

produced by: William Parry


Mike Teavee is an arcade style 'shoot em up' that uses an openCv haar cascade file to detect faces from an live digtial television broadcast in order to create targets for the viewer to 'shoot'. Once a face has been found the viewer is then given the option to shoot at the face, if the viewer shoots at the face targeted by the machine they are rewarded with a blood covered bullet hole and blood trickles. Mike Teavee was created with the aim to exaggerate violence and gore found in popular video games using live television.

Concept and background research

Mike Teavee was a piece created in an attempt to question the acceptance of violence within video games and the distancing and lack of empathy created for a user within this environment. 'Mike Teavee' is a character from Rohld Dahls 'Charlie and the Cholotate Factory', who was brought up watching television, and in the 1971 film was a gun wielding hyperactive child, later portrayed in the 2005 film as a video game and technology enthusiast, the opening scene of him starring into a television set with a contorller shouting "DIE, DIE!" This scene is all to familiar, witnessing friends becoming addicted to violent video games, the most violent of them all being Grand Theft Auto V, the third best selling video game of all time, inviting users to create violence in public places in its virtual city. Seeing these games as an outsider to the gaming community I just see violence and a loss of empathy towards life. I wanted to create a satire to extract and make clear this loss of empathy by trying to reduce the distance between viewer and subject as much as possible. Having the subjects generated by BBC news worked very well, every face had a rel life context (why they were on the news), the demographic was massively varied, targeting a wider viewer. Mike Teavee aimed to make the viewer uncomfotable about wehat they were doing, and when the machine was looking for targets would play a sound piece I created in maxMSP using TTS to read out a cacophony of NRA tweets and and distorted TTS systems saying "KILL".


Live TV stream (using an RTL usb DVB-T receiver & antenna)

The first and most timeconsuming technical challenge was getting a live TV stream from the usb TV dongle. After roughly a month of scouring the web and testing 3 different usb dongles I managed to pipe the video into openFrameworks using openFrameworks' GStreamer pipeline interfacing (ofGstVideoUtils). GStreamer is 'an opensource multimedia framework' and holds anextensive library of 'plug-ins' to aid with grabbing, demuxing, decoding and streaming video from various sources. To get GStreamer to recognise the USB dongle a linux rules.d file was edited to blacklist the linux's default USB Dongle FM Radio drivers that would make the dongle appear to be an FM radio source. Once these were all clear, In order for GStreamer to sucessfully pipe a live TV stream into openFrameworks I needed a lot of information about the broadcast I wanted to receive, how to 'demux' a block of broadcasts into seperate channels, and how to decode the compressed video stream into something openFrameworks could handle. After a painful amount of experimenting I managed to get a solid broadcast into openFrameworks using the following GStreamer pipeline:

"dvbsrc frequency=490000000 modulation=qam-64 bandwidth=8 code-rate-lp=1/2 code-rate-hp=2/3 guard=32 ! tsdemux ! queue max-size-buffers=0 ! mpeg2dec ! queue max-size-buffers=1024 ! videorate ! videoconvert";

To get information about the broacast to be used by GStreamers dvbsrc to tune the USB dongle I installed 'dvb-utils' a set of terminal tools to tune the DVB-T receiver. 'dvb-utils' contained a tool called 'tzap', 'tzap' is used to scan for broadcasts within a certain range (in this case was the range set by the Crystal Palace transmitting center) to create a 'channels.conf' file which is typically used by VLC in order to tune a DVB-T receiver. A line of channel.conf file is very readable typically looks like this:


I translated the channel.conf file into the parameters needed by GStreamer's dvbsrc in order to lock on to a transmition signal, then demuxed the 'MPEGTransportStream' into seperate channels, then decoded the MPEG2 video stream and convet this into a format openFrameworks can use, including a buffer to smoothout the stream, this is readable and made relatively easy by GStreamers array of plug-ins at the end of the GStreamer pipeline shown above.

Gun (a nintendo Wii remote)

The first prototype for controlling the 'crosshairs' was using a PS3 Eyetoy camera (with the IR filter removed) and an IR light source with an arduino button, using openCV blob detection to track the XY of the light source within the PS3 Camera. This worked very effectively but limited the aiming capabilities of the gun, because the light source was the point of movement there was only a 2D space for travel, the light source had to be moved in space rather than pointed. This wouldnt work for the piece, I experimented again with a rear projected piece of frosted perspex the IR camera on the projector side and an IR laser pointed from the other side. The IR laser illuminated the frosted perspex and created a hot blob for the camera to pick up whilst ignoring the projected light, this worked well in a dark room, but if any sunlight would hit the perspex from any angle the rear projection couldn't be seen and the blob detection would be unreliable unless I used a more powerfull laser, IR lasers already considered to be unsafe for use in this way due to it's humanly invisiable, yet laser intense properties. The solution ended up being the reverse of the first prototype, instead of the user holding the light source, the user now held the camera, facing a fixed light source, this allowed for the rotation of the 2D space, which allowed for a pointing style aiming. The camera came in the format of a nintendo Wii Remote, which luckily has been a source of interest for Linux developers which created the wii mouse emulation tool 'wminput'. With one terminal command:

gksudo "wminput -c ir_ptr <00:22:D7:F2:FE:C0>"

This completely simplified my openframeworks code to just use the mouse input, which was a great help for reducing CPU strain and keep the prgram running smoothly. I was able to purchase a pre-made wii gun-like container house the controller. To enclose the remote in the Wii gun, I modfied the 3d print files for 'the DD liberator' (the very contraversial 3d printable gun) to sit on top of the premade controller, these were then sprayed and assembled together using a tube.

Computer vision (openCV library & haar cascade files)

For the computer vision side #of Mike Teavee, I used two haar cascade files, frontal face and eye detection. The openCv haarcascade object would search every frame for a face, once it found a 'face' it would search for eyes within that face, this was an additional arguement to reduce the amount of false positives. Once the system found a face, the live stream stopped and if the viewer shot within the boundaries of this face detection bloody bullet holes and blood trickels would occur. If they hit outside of this region a grey bullet hole and the sound of a bullet riccocet would occur.

  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
Future development

Despite creating a simple interation of two steps, I noticed the interaction might have been a little too complex for the exhibition setting as people just wanted to pick up the gun and shoot without waiting for a target. I think I red/ green bulb system would have sufficiently communicated this process.

I built this project within openFrameworks avoiding FBO's and non raspberryPi addons with the intention to boot it onto a raspberryPi, however it wouldnt run as efficiently as I would have liked it to on my own machine, and through experience of using a raspberryPi felt it might not be powerful enough for the task, however I would still like to try this and feel that exploring openFrameworks' ofThread for multiple threading for the CPU heavy DVB-T receiver and the computer vision might combat this problem.

I was very pleased with the overall response to Mike Teavee during the exhibition weekend, I noticed a few different responses to the piece: shocking, violent but playful and game. There were a good balance of all types of responce which is what I aimed for, displaying the empathetic typically non-gamer finding the idea of shooting people 'horrible', the gamer seeing it as a game shooting very quick and staying for multiple targets, and the morbidly curious shooting once and leaving.



Kristine L. Nowak, Marina Krcmar,Kirstie M. Farrar. Presence: Teleoperators and Virtual Environments. [JOURNAL] MIT Press. Volume 17 | Issue 3 | June 2008. p.256-268

Roald Dahl Wiki. 2018. Mike Teavee | Roald Dahl Wiki | FANDOM powered by Wikia. [ONLINE] Available at: [Accessed 18 September 2018].

Ubuntu Geek. 2018. Howto get Wii Remote working in Ubuntu 8.10 (Intrepid Ibex) | Ubuntu Geek. [ONLINE] Available at: [Accessed 18 September 2018].

GStreamer: open source multimedia framework. [ONLINE] Available at: [Accessed 18 September 2018].

Tzap - MythTV Official Wiki. [ONLINE] Available at: [Accessed 18 September 2018].

Sideshows. [ONLINE] Available at: [Accessed 18 September 2018].

Trumptendo – Make Nintendo Great Again | About. [ONLINE] Available at: [Accessed 18 September 2018].

Time Crisis Wiki | FANDOM powered by Wikia. [ONLINE] Available at: [Accessed 18 September 2018].