forked from patrickloeber/python-fun
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add note taking with speech recognition project
- Loading branch information
1 parent
a97f965
commit 74f26fd
Showing
3 changed files
with
144 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# Create a Notetaking App with Speech Recognition | ||
|
||
## Installation | ||
|
||
On Mac you also need: | ||
``` | ||
$ brew install portaudio | ||
$ pip install pyobjc | ||
``` | ||
|
||
Then use: | ||
``` | ||
# pip install pyaudio | ||
# pip install speechrecognition | ||
# pip install requests gtts playsound | ||
``` | ||
|
||
Note: On a M1 Mac you may need to use this command to install pyaudio | ||
``` | ||
# python -m pip install --global-option='build_ext' --global-option='-I/opt/homebrew/Cellar/portaudio/19.7.0/include' --global-option='-L/opt/homebrew/Cellar/portaudio/19.7.0/lib' pyaudio | ||
``` | ||
|
||
For more setup instructions also have a look here: | ||
- [Pyaudio Installation](http://people.csail.mit.edu/hubert/pyaudio/) | ||
- [Speech Recognition](https://github.com/Uberi/speech_recognition) | ||
- [Notion API setup](https://developers.notion.com/docs/getting-started) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
import speech_recognition as sr | ||
import gtts | ||
from playsound import playsound | ||
import os | ||
from datetime import datetime | ||
from notion import NotionClient | ||
|
||
r = sr.Recognizer() | ||
|
||
token = "YOUR NOTION TOKEN HERE" | ||
database_id = "YOUR NOTION DATABASE_ID HERE" | ||
|
||
client = NotionClient(token, database_id) | ||
|
||
ACTIVATION_COMMAND = "hey sam" | ||
|
||
def get_audio(): | ||
with sr.Microphone() as source: | ||
print("Say something") | ||
audio = r.listen(source) | ||
return audio | ||
|
||
def audio_to_text(audio): | ||
text = "" | ||
try: | ||
text = r.recognize_google(audio) | ||
except sr.UnknownValueError: | ||
print("Speech recognition could not understand audio") | ||
except sr.RequestError: | ||
print("could not request results from API") | ||
return text | ||
|
||
def play_sound(text): | ||
try: | ||
tts = gtts.gTTS(text) | ||
tempfile = "./temp.mp3" | ||
tts.save(tempfile) | ||
playsound(tempfile) | ||
os.remove(tempfile) | ||
except AssertionError: | ||
print("could not play sound") | ||
|
||
|
||
|
||
if __name__ == "__main__": | ||
|
||
while True: | ||
a = get_audio() | ||
command = audio_to_text(a) | ||
|
||
if ACTIVATION_COMMAND in command.lower(): | ||
print("activate") | ||
play_sound("What can I do for you?") | ||
|
||
note = get_audio() | ||
note = audio_to_text(note) | ||
|
||
if note: | ||
play_sound(note) | ||
|
||
now = datetime.now().astimezone().isoformat() | ||
res = client.create_page(note, now, status="Active") | ||
if res.status_code == 200: | ||
play_sound("Stored new item") | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import json | ||
import requests | ||
|
||
|
||
class NotionClient: | ||
|
||
def __init__(self, token, database_id) -> None: | ||
self.database_id = database_id | ||
|
||
self.headers = { | ||
"Authorization": "Bearer " + token, | ||
"Content-Type": "application/json", | ||
"Notion-Version": "2021-08-16" | ||
} | ||
|
||
# read, update | ||
def create_page(self, description, date, status): | ||
create_url = 'https://api.notion.com/v1/pages' | ||
|
||
data = { | ||
"parent": { "database_id": self.database_id }, | ||
"properties": { | ||
"Description": { | ||
"title": [ | ||
{ | ||
"text": { | ||
"content": description | ||
} | ||
} | ||
] | ||
}, | ||
"Date": { | ||
"date": { | ||
"start": date, | ||
"end": None | ||
} | ||
}, | ||
"Status": { | ||
"rich_text": [ | ||
{ | ||
"text": { | ||
"content": status | ||
} | ||
} | ||
] | ||
} | ||
}} | ||
|
||
data = json.dumps(data) | ||
res = requests.post(create_url, headers=self.headers, data=data) | ||
print(res.status_code) | ||
return res |