As of December 15, 2023, my Berkeley journey has come to an end. It's been an incredible two-year ride, and I'm truly honored to have had the opportunity to run this account. But, as they say, all good things must come to an end. π
With my UC Berkeley graduation now behind me, I'm bidding farewell to the Bay Area and heading back to the sunny streets of Los Angeles. π Thanks for all the memories, Berkeley β you'll always have a special place in my heart! β€οΈ
If you wish to stay up to date, you can follow my LA account on Twitter or connect with me on LinkedIn.
Details are in the description of this YouTube video.
Details are in the description of this YouTube video.
Details are in the description of this YouTube video.
Details are in the description of this YouTube video.
Unlike traditional scanners that save audio as a single file, in this system, each transmission was saved as its own file. This approach offered the flexibility for users to select what they wanted to listen to by simply clicking a button.
It's worth noting that the Raspberry Pi 4 is a relatively modest machine for this task, and it's generally recommended to use a more robust system, such as an old desktop computer, if you plan to handle a larger volume of voice recorders (transmissions) simultaneously. While I did experience a system crash on one occasion due to excessive voice activity, in normal circumstances, it managed to handle all Berkeley channels without any issues.
To ensure seamless operation, the entire setup was configured to run behind an NGINX proxy. This proxy served as the hosting platform for both the API and website systems, making them accessible within my local network.
DEC | HEX | Mode | Alpha Tag | Description | Tag | Group | Priority |
---|---|---|---|---|---|---|---|
2105 | 839 | D | Berkeley FD1 | Fire Dispatch 1 | Fire Dispatch | Berkeley | 1 |
2106 | 83a | D | Berkeley FD2 | Fire Dispatch 2 | Fire Dispatch | Berkeley | 1 |
2112 | 840 | D | Berkeley FD Emer | Fire Emergency | Emergency Ops | Berkeley | 1 |
2671 | a6f | D | ACFD Command 11 | Command 11 - Berkeley | Fire-Tac | Alameda County Fire | 1 |
2672 | a70 | D | ACFD Command 12 | Command 12 - Berkeley | Fire-Tac | Alameda County Fire | 1 |
2691 | a83 | D | ACFD Tac 31 | Tac 31 - Berkeley | Fire-Tac | Alameda County Fire | 1 |
2692 | a84 | D | ACFD Tac 32 | Tac 32 - Berkeley | Fire-Tac | Alameda County Fire | 1 |
2711 | a97 | D | ACFD Tac 51 | Tac 51 - Berkeley | Fire-Tac | Alameda County Fire | 1 |
2712 | a98 | D | ACFD Tac 52 | Tac 52 - Berkeley | Fire-Tac | Alameda County Fire | 1 |
3105 | c21 | T | Berkeley PD1 | Police Dispatch | Law Dispatch | Berkeley | 1 |
3106 | c22 | T | Berkeley PD2 | Police Ch 2 | Law Tac | Berkeley | 1 |
3108 | c24 | T | Berkeley PD4 | Police Ch 4 | Law Tac | Berkeley | 1 |
3110 | c26 | T | Berkeley PD6 | Police Investigations 1 | Law Tac | Berkeley | 1 |
3605 | e15 | T | UCB PD1 DSP | Police Dispatch | Law Dispatch | UC Berkeley | 1 |
3606 | e16 | D | UCB PD2 | Police Ch 2 | Law Tac | UC Berkeley | 1 |
3608 | e18 | D | UCB PD4 ENF | Police Enforcement | Law Tac | UC Berkeley | 1 |
3609 | e19 | D | UCB PD5 | POLICE TAC | Law Tac | UC Berkeley | 1 |
However, please note that channels BPD3 (also known as RB1), BPD5, BPD7, and UCPD6 were not available as they were encrypted.
The transcription and historical site were hosted on a DigitalOcean droplet, utilizing Docker for containerization. The monthly cost for this setup was approximately $35.
Audio storage was managed through Amazon Web Services (AWS) S3, where approximately 200,000 transmissions were stored over a few months. The cost for S3 storage varied but typically amounted to around $2 per month.
Additionally, the transcription system employed OpenAI Whisper, incurring a cost of approximately $50 or more per month. It's worth noting that Whisper can also be run locally for free if you have access to an extra graphics card and other hardware.
One valuable feature of the Transcribe system was its ability to send notifications to my phone and Slack in real-time. These notifications were triggered the moment a phrase matched my configuration file. This functionality allowed me to tune in instantly when a priority incident was detected.