Tags

, , , , , , , , , ,

Arkwood has a deep scar. He won’t talk about it openly, but it has something to do with the British Broadcasting Corporation. Indeed, the horror has become so bad that last month he was found strolling about our town with a megaphone strapped to his person, shouting, ‘The BBC are lying to us! Down with the BBC!’ Irrational, I know, but I though it best to put his mind to rest with a little piece of Python and the Raspberry Pi.

To start with, I put a microphone against the TV speaker and used Google’s speech to text service to turn the words spoken by the BBC News channel’s anchorman into strings. The results were surprisingly good:

2014-03-10 20:51:06: break up line on the ground cover
2014-03-10 20:51:21: investigation in the army monkeys
2014-03-10 20:51:33: 2525
2014-03-10 20:51:45: what rhymes with Scott Summers
2014-03-10 20:52:02: lungs is a schedule I need to change
2014-03-10 20:52:13: regional transplant center
2014-03-10 20:52:24: transplant
2014-03-10 20:52:38: 3001 thing coming
2014-03-10 20:53:02: Manson family members
2014-03-10 20:53:15: the nearest transplant center
2014-03-10 20:53:27: people with you missed a Wilson
2014-03-10 20:53:39: getting braces
2014-03-10 20:53:59: after another summary of Suffolk
2014-03-10 20:54:19: adore you
2014-03-10 20:54:38: Kootra photos Mascoutah
2014-03-10 20:54:58: compounding by the waves and rain
2014-03-10 20:55:17: is not going to be
2014-03-10 20:55:37: how it works where is the one stop
2014-03-10 20:55:53: I don't know about me
2014-03-10 20:56:04: 1900 to do something
2014-03-10 20:56:15: 12 the same spot 20 years
2014-03-10 20:56:29: Macy's BBC News app
2014-03-10 20:56:50: Social Security Administration
2014-03-10 20:57:01: time for the cat the weather we going to need a man
2014-03-10 20:57:13: high pressure Pentagon building in the cross
2014-03-10 20:57:25: I'm kind of a compound for the weekend
2014-03-10 20:57:37: Frost Bank Clinton CT
2014-03-10 20:57:49: movin on up tomorrow to talk to school with
2014-03-10 20:58:01: in Scotland 2012
2014-03-10 20:58:13: why does the back into the family
2014-03-10 20:58:25: Will Smith
2014-03-10 20:58:37: wake up sunshine lady slipper
2014-03-10 20:58:49: the Sun is the next couple be on Wednesday
2014-03-10 20:59:03: FB stock first day hike
2014-03-10 20:59:15: high pressure is the weather is going in the front
2014-03-10 20:59:27: coupon for the forecast talk about the end of days
2014-03-10 20:59:38: the weather across the USA

Interesting to see that Google is handling profanity:

2014-03-10 20:39:24: what is c***
2014-03-10 21:25:36: girl c** straight can you go
2014-03-10 21:25:48: Costco take a s*** on ever ever about

But this is okay:

2014-03-10 21:09:40: masturbation

Natural after all.

Plus some stuff that even made my morose Belgian friend laugh:

2014-03-10 20:46:09: nude twerking should see their wages Grove
2014-03-10 20:48:30: recycle bin Laden I will be picking up
2014-03-10 21:13:15: yesterday sounds of people crossing cream

Anyway, I digress slightly. For the purpose of the exercise was to prove to Arkwood that the BBC are good eggs.

Okay. So we have converted the news from the TV speakers into text. Next, we can check for lies. We do this by fetching the latest RSS feed from the distinguished Reuters agency. Looping through each article in the feed, we can determine if the titles match the latest words being broadcast by Auntie Beeb. If they do, then we announce the BBC’s innocence through a set of headphones in the Pi’s audio jack, using Google’s text to speech service. If not, Arkwood can take them to court.

Here’s the main code block:

from speech import Speech
import datetime
import feedparser
from time import sleep

# loop until armageddon
while True:

    # get bbc chat
    bbc_chat = Speech().speech_to_text('/home/pi/PiAUISuite/VoiceCommand/speech-recog.sh')
    
    # store chat 
    write_to_file(bbc_chat)

    # is chat in reuters feed
    chat_in_feed(bbc_chat)

    # pause before next sample
    sleep(5)

And here’s the supporting functions:

def write_to_file(text):

    # get current time
    datestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    # add text to file
    with open("news.txt", "a") as news_file:
        news_file.write(datestamp + ': ' + text + '\n')

def chat_in_feed(bbc_chat):
    
    # get reuters feed
    reuters_feed = feedparser.parse('http://mf.feeds.reuters.com/reuters/UKTopNews')
    
    # loop through feed
    for i in range(0,len(reuters_feed['entries'])):
 
        # loop through chat
        for word in bbc_chat.split():

            # if word in chat is found in article then announce BBC innocent
            if word.lower() in reuters_feed['entries'][i].title.lower():
                announcement = word + " found in article " + reuters_feed['entries'][i].title
                Speech().text_to_speech(announcement)
                write_to_file(announcement) 
                return

    # if chat is not found in feed then announce BBC liars
    announcement = bbc_chat + " not found in feed. The BBC are lying to us again"
    Speech().text_to_speech(announcement)
    write_to_file(announcement)
    return

I won’t go through the underlying implementation for Google’s services – it’s all in my previous posts.

As Bucks Fizz once said, the text file never lies. Look what it’s captured:

2014-03-13 00:16:08: completely in East Neck Road
2014-03-13 00:17:35: in found in article EU moves toward sanctions on Russians, Obama meets Ukraine PM
2014-03-13 00:17:46: about weather next week budget
2014-03-13 00:19:19: budget found in article UK government seizes on worsening Scottish budget figures
2014-03-13 00:19:31: immediate Optima mother
2014-03-13 00:21:01: immediate Optima mother not found in feed. The BBC are lying to us again
2014-03-13 00:21:13: 76 is the time is taken to put on
2014-03-13 00:22:43: is found in article Israel bombs Gaza militants after intensive rocket fire
2014-03-13 00:22:55: security long time
2014-03-13 00:24:22: security long time not found in feed. The BBC are lying to us again

Granted, we could do with binning off comparisons between small words e.g. ‘in’, ‘is’. And not match on words within words. But you get the gist.

Setting this experiment up involved running the code on the Pi, then quickly switching the HDMI channels on the TV to BBC News and listening though the headphones to what was being picked up by the microphone gaffer taped to the TV speaker. Sounds simple, right? Yes, I am as surprised as you are that this actually flew. But fly it did!

pi_news

So – let’s cut to the chase – are the BBC spouting gibberish, or are they consistent with Reuters? I’ll let you know as soon as Arkwood puts his megaphone down.

Advertisements