Fifteen percent of you are watching this video with subtitles enabled, but if you talk to me
in real life, there isn't a subtitle in sight. This will not stand! The planet might be boiling,
cancer might be un-cured, but I chose to build a hoodie that subtitles my speech
in real time. Let's hook some AI to a wearable Pi and see how yours truly transformed himself
into the world's most narcissistic Teletubby! Ladies, gentlemen, cyborgs, and Mark Zuckerberg's
virtualized connectome, welcome to Voidstar Lab. I don't HONE in on project ideas right
from the GECKO. For all INTENSIVE purposes, I come up with my ideas before the time is RIPE
to build 'em. I made myself a dumping ground for the project ideas too zesty to discard,
but too [REDACTED] to use right away, and I called the big [REDACTED] list of [REDACTED] ideas.
It's a gray area of [REDACTED], which technically makes it a beige area. And it's where ideas can
ferment until some X-factor transforms them from half-assed to fully assed. This li'l nugget popped
out of a chance encounter that only happened because I... am a noodle-armed soy boy. When I
built the Snapmaker, I needed something to put it on, so I went to Home Depot to grab myself
a nice solid workbench. Shortly after buying the workbench, I realized it was TOO solid; it didn't
fold or break down or anything. I tracked down a REAL MAN and tried to explain the situation, but
he gestured to this little badge on his apron that read 'hard of hearing'. My face was diapered and
my American sign language is mostly profanity, so we were forced to communicate via eyebrows alone.
The whole encounter made me realize how much it must suck when you rely on reading lips, but
everyone's either covering their mouth or a Karen. I mean, like, they are a Karen and not, like,
they're wearing a Karen on their face like a mask. Although... [furious mechanical keystroking] If I
were to, hypothetically, mounted a display at nip level, run a mic, add some speech-recognizing AI,
then everyone, no matter who they are, could receive my every word whether they want it or not.
But that would involve writing a lot of code, and I HATE writing code, especially a lot of it. On
to the [REDACTED] video list it went. [Spongebob reference] Eh few months later... A startup named
Deepgram reached out and commissioned the royal Us to showcase their technology by building it
into a silly project. Deepgram is a cloud-hosted speech-to-text service who provides two APIs,
one for pre-recorded audio and one for streaming. You can upload an audio file in almost any format
and Deepgram's typewriter monkeys will transcribe it. Or, you can stream audio as it arrives and
get a continuous conversion. I am going to be completely honest, I mixed them up with a
different startup and by the time I realized that I was working with the speech-to-text startup and
not the 3D-scanning startup, I'd already signed the contract. This isn't even the first time this
happened - I once screwed up a hackathon project because I mistook the client for, and I being
ABSOLUTELY SERIOUS here, their identical twin. I'm drinking Stranahan's in the bath, don't judge me,
and I realized this idea had ripened like a fine cheese, a process I call Parmesannovation. See,
Deepgram already wrote the hardest part of this idea, the speech recognition. As for
putting electronics in a hoodie, I struggle to NOT put electronics in my hoodies! The points
I'm making here are A) ideas can wait till the right time to build them. B) I came up with this
idea well before I got in touch with Deepgram, so I'm NOT A SHILL! and C) Local single malt is
a business expense. This stretched-bar display is a leftover from the Data Blaster Cyberdeck,
and it is the perfect aspect ratio for dropping a sentence or two atop my man-cleavage. For input,
we're gonna use a lavalier mic from the early days of the channel. It's tiny, easy to hide, and it's
got a directional pickup, so less interference from other people in the conversation... if I
ever give them an opening. The brains shall be the Raspberry Pi 3B+. It's got onboard graphics, Wifi,
and Python. And most importantly, I've already used them in, like, a Brazillion products....
projects... BLEH! I grabbed myself a hoodie at goodwill, doesn't need be anything special, just
needs to fit a little more snugly than usual so the display doesn't flop around. Also, Raspberry
Pis do not have an audio input, so I hit up Micro Center for a Codec Zero, a shield-style sound card
with pirst farty support on Pi. I gotta shout out Micro Center for not only sponsoring a lot of the
parts for this project, but also for providing Voidstar Lab with a DJI RSC2 gimbal so we can
get less nausea-inducing handheld shots. Micro Center, if you're not aware, is the last meatspace
electronics retailer on Earth, and you can restock your filament, grab an individually-addressable
RGB pro-gamer power cable, and impulse-buy a $2000 graphics card, IN PERSON, AFTER TOUCHING
IT AND READING THE TEXT ON THE BACK 'O THE BOX!! Porch pirates can't swashbuckle your
little Raspberry Pi gaming-PC cooling tower if you bring it home yourself! Micro Center allowed
me to wear this project to their store and film consenting customers and gold-brickin' employees.
But let's not lick the wrong into of the ice-cream cone. We have to build the project first. I jumped
straight into modeling and printing enclosures - I figured there's a higher chance that the
electronics are gonna short out on desktop clutter than of me switching them. After all,
if I have to order parts, this project is gonna take forever. These oversized holes are designed
for special fabric fasteners called Chicago nuts. More on deez nuts later. After a light screwing,
fnar fnar, the project looked feature-complete. I talked about this in my Finish Your Projects
video, sequencing the project this way gives us an emergency exit. We can end the project right here,
I can just hang this around my neck with a string, display some random gibberish on it
and I have something to show. Don't put yourself in a position where you have to finish the whole
project or you got nothing! This is the first project in a very long time that was just a bunch
of off the shelf products being used for their intended purposes. This thing came together WAAAY
too easily and it is creeping me out. My comfort zone is barely-contained existential dread,
so let's return to it by writing some code! [Disclaimingly] The following section contains
programming. Viewers who find computer words boring are advised skip to the next chapter,
unless said viewers ALSO like watching my sanity visibly degree with each passing minute,
in which case, grab a box of Junior Mints and dim the lights. I like to start a project's
code by writing separate tests for each component, ideally in Python because
it's the only language that's better than Widget Workshop. [Iconic Widget Workshop success noise]
I installed Pyaudio and confirmed the Codec Zero can, you know, work. I found myself an old-school
on-screen-display font, and I made sure the Pygame graphics library could do the job. Finally,
I loaded up Deepgram Python SDK and provisioned myself an API key and I tested that too. Their
example code transcribes BBC radio a la minute, which I gotta say is a a pretty clever source of
demo dialog. Even if those Brits don't know how to spell the word 'dialog'. Once we have-known
working code running on known-working hardware, we can say "now kiss," combine our scripts, stir
in some business logic, and watch everything go to h*ll in a controlled manner. For this project,
I AM the content! So instead of streaming audio from the Web, we gotta stream audio from mah face.
I've never actually done any audio input on a Pi, so I expected the worst, but it turned out to
actually be the easiest part of the project. The Pyaudio module lets you access the audio driver
and that uncork a torrent of raw WAV data. We dump that straight into Deepgram's API,
zero processing required. It's like putting the end of the toilet paper roll in the toilet and
flushing. Parents, THAT is what you get for letting your kids watch my show. I'm not your
babysitter. But did we finally get an easy project? Of course not! Everything is hard,
all the time. By default, Deepgram's streaming API is not actually real-time. Their algorithms
use context clues like the humans do, so the server waits til you finish a thought, and then
it crunches the whole statement. But my tongue train never slows down, and by the time my chest
got something to show, I have already rambled into another dimension. Deepgram's solution is
interim transcriptions, and there is a reason why they disable it by default. When you flip it on,
the server sends you the work-in-progress, which gives you something to show as ASAP as possible.
The downside is that it's guesswork. The system is gonna rewrite that transcript over and over
again as the sentence develops. Now, we have to account for the subtitles retroactively CHANGING.
And it gets worse! The screen only fits few lines at once, but I speak, I've been told,
quite fast. No matter how quickly I spew projectile word-vomit, the code has to keep each
word on screen long enough that you can read it. If the transcription changes, we have to restart
that timer to give the listener/viewer/victim a chance to catch up. BUUUUT only if the text that
changed is visible. And it gets worse! An audio sample is just a snapshot of sound at an instant
in time. So if we're too late, we lose it forever. Whenever we ask the sound card for a sample,
we send it to Deepgram, we set a timer, or we do anything else that takes time and uses the system,
our code needs to get it rolling, ditch it, do something else, and hopefully remember to come
back and collect the results. The program flow has to zoom back and forth from task to task like a
dude on meth, or a dude on ADHD without math. So, to make the Deepgram results look and feel like
real subtitles, I had to write over 650 lines of complex, frustrating malarkey that I barely
understand, and I even added comments. I know some of your [REDACTED] psychopaths enjoy programming,
so feel free to head into the GitHub repo and critique my cringingly crappy concurrent code.
At least it was easy to, like, get this thing to run automatically. I just created a systemd
service that calls my Python script on boot, and it restarts it if it crashes because I wasn't
asking. Now that I had the technology, I had to make it wearable. I did the final fabrication
during one of my Twitch streams, and chat convinced me to try the hoodie on before I
bolted on my irreplaceable electronics. It turned out to be a little restrictive about the chest.
Thankfully, Brooke is a straight-up G and raided Target for more hoodies, like I should have done
the first place. To mount the stuff, I printed a template, cut out some holes, and busted out the
Chicago nuts. These are screw fasteners with broad heads and [smooth baritone] a long smooth shaft,
and that makes them perfect for mounting 3D prints to fabric and leather. You'll notice the
two halves of the display enclosure actually clamp the hoodie fabric in between. The original plan
was to cut a big ol' hole, but those Twitch-chat bastards came up with this idea and they were
right again!! How am I supposed to look smarter than my audience when I'm objectively NOT?!
I should've done video essays! I mounted the Pi to my shoulder to add that jank-a-licious aesthetic,
really sell the idea that this is not a commercial product. The angry pixies are imprisoned in a USB
power bank and I tucked that into my pants pocket, cuz this is becoming a bit of a heavy hoodie. I
ran some cables. I tucked the lapel mic into the hood. I hit the power button, and the prototype
was done! I put out the call to our Patrons, I headed to Micro Center donning my new hoodie,
and I connected it to their guest WiFi for some parasocial prototype p-field p-testing. I
kind of assumed the real world subtitles would be borderline unusable, but in reality, the accuracy
was surprisingly high. It turns out that when I speak off-the-cuff, I use a different vocabulary
and cadence that's more compatible with Deepgram's speech model. We did have a nice boo-boo where I
was hacking and it made Brooke laugh hard enough to shake the gimbal. Our directional mic turned
out to be more "directional-inspired," so the hoodie ended up subtitling both sides
of the conversation. Deepgram has an option to identify different speakers, but I just
didn't know this at the time. This turned out to not actually be a bad thing - people really got
a kick out of talking really loud at me and seeing their words show up too. We also saw
a surprising and positive social dynamic that I wasn't expecting. The chest-mounted screen gave
people license to look at my hoodie instead of looking me in the eye, which I think made a lot
of people who normally would never strike up a random conversation feel more comfortable.
The bright colors and the chunky enclosures drew a good amount of positive attention, and as soon
as some words appeared, most people GOT IT. The time we put into nailing the instant feedback
turned out to be absolutely critical in selling the fact that these were real-time subtitles.
The service is actually returning results so quickly, people thought that I had, like, recorded
it in advance. It wasn't perfect - the dangling wires constantly threatened to snag on stuff, I
never managed to get the Pi's low voltage warning to go away, and we also got spanked by a bug that
hangs the program if I stop talking for a few minutes. It wasn't a game breaker, the workaround
was just to never stop talking, and I was gonna do that anyways! The hoodie itself is a lot more
comfortable than it looks, but I didn't expect the glare to be so powerful. Turned out to, like, ruin
a whole bunch of our footage, and it really should put like a matte screen protector or something on
it. These are the types of bugs you just cannot figure out on the bench. You have to take it out
into the real world and you know, get your butt kicked a little. All in all, this was a fun little
project and it forced me to learn asynchronous programming. Web APIs, and made me leave the Lab,
despite my best efforts to avoid all of those. I'd like to think Micro Center for letting me strut
around like a radioactive peacock and thanks to Deepgram for sponsoring the build and its video.
Check the description to see all the parts I used in this project, and learn how easy it is to get
talking with Deepgram. Major kudos to our patrons, we got an incredible amount of support from the
Gridfinity video and not only does it mean a lot that people enjoy my work enough to support it,
but that support also improves future projects. Our highfalutin' collaborators include cmd,
ChuckFahdooksSmallDong, BrianDeezSwollenNut, Kastor the Catboy, GermyArnoldsSchwettyVag
and Reagan. I hid their names somewhere in this episode, but where? WHERE?!!!?!?!! Deepgram's
speech to text is going to absolutely eviscerate our poor Lab Assistant supporters' silly names,
and I don't get to see how badly until I cut the video. Let's watch it mangle Ethan Gomes,
Ryan Gooler, bob_dobbington, Zach, SxP, Trukku, Zanforian, Berbasor did nothing wrong yet, DSA,
Azundo (Wielder of Iron, Heater of Shrink,) Trans Rights, Kevin DeGraaf, Nicholas Eckardt,
good succ, Arrow_Raider, Roger Pincombe of the Great Star Theater, burunduk3, brad cox,
Protagonist, powerful_cch, Granville Schmidt, My Dog Is A Bear, Max Luck says If you can't fix it,
you don't own it! Baygull, epunman, Varka, Ashley Coleman, Sir Derpington of Derptopia,
Eddy, one handful of beans, Bill Schuller, RustyFlute, Good Lady Nat, Queen Of Lemons.
Victor of the Great Citrus Wars, periodclots, Katze isekai elf mahiro-chan ~desuyone~,
Michael Rauch, Storm B Design, Talan, Democratic Socialist (and a pretty righteous dude -Zack,)
Bradford Benn, Accalia - A Very Silly Vixen, The worlds greatest drone pilot botgrinder fpv, NANI,
Gary DuVall, Philip, The Cuttlefish, Lydia_K, Nino Gancitano, Nathan Johnson,
Tkm k, Thomas B. Myers, TheANTIFA, and it better be able to pull this one off, Boulder
Creek Yard - James. Thanks for watching, and I hope you see what I'm saying... in the future.