Compare commits

..

No commits in common. "7f5d221c56ecb883f7a648000f79a20fc5a93c4a" and "b47e9cddbd51711be276bb1c970403784b2b1ed4" have entirely different histories.

4 changed files with 31 additions and 64 deletions

View file

@ -36,8 +36,3 @@ Press the hotkey (default is Home) and then talk to jarvis
- "hey jarvis, thats a clip"
Checkout the code to see specific keywords/phrases as all NLP is regex/string based, not generative AI
### Resource Usage
With the `distil-small.en` model, on my system it uses about 500mb of VRAM

View file

@ -1,16 +0,0 @@
model = "distil-small.en"
replacements = {"gigi": "gg", "heels": "heals", "heeling": "healing", "heel": "heal"}
maximum_pulse = [
"maximum",
"pulse",
"ball",
"remove",
"eliminate",
"murder",
"goon",
"obliterate",
"delete",
"piss",
]

54
main.py
View file

@ -1,51 +1,35 @@
import pyautogui as pg
from pynput import keyboard
import speech_recognition as sr
from faster_whisper import WhisperModel
from string import punctuation
import config
from slang import replacements
import re
import subprocess
from time import sleep
from mss import mss
import numpy as np
from io import BytesIO
import sounddevice # turns off alsa error logging
r = sr.Recognizer()
r.pause_threshold = 2
model = WhisperModel(config.model, device="cuda", compute_type="int8_float16")
print("Testing Sound")
with sr.Microphone() as source:
r.adjust_for_ambient_noise(source, duration=3)
print("ready!")
def recognize_text() -> str:
with sr.Microphone() as source:
print("Say something!")
audio = r.listen(source)
results, _ = model.transcribe(
BytesIO(audio.get_wav_data()),
beam_size=5,
language="en",
condition_on_previous_text=False,
)
return " ".join([segment.text for segment in results])
result = r.recognize_faster_whisper(audio, model="distil-small.en", beam_size=5, language="en", condition_on_previous_text=False)
return result
def chat_type():
screen = mss() #! bad for performance but necessary
screenshot = np.array(
screen.grab({"top": 1090, "left": 1110, "width": 100, "height": 100})
)
screenshot = np.array(screen.grab({"top": 1090, "left": 1110, "width": 100, "height": 100}))
try:
pg.locate("ui/team-chat.png", screenshot, confidence=0.9)
return "team"
@ -60,34 +44,29 @@ def chat_type():
return None
def on_press(key):
if key is not keyboard.Key.home:
return
print("Listening...")
print("triggered!")
command = recognize_text()
print(f"Heard: {command}")
# cleanup command
command = command.lower().strip()
command = command.lower()
for char in punctuation:
command = command.replace(char, "")
command = command.replace(char, '')
for original, new in config.replacements.items():
for original, new in replacements.items():
command = command.replace(original, new)
print(f"Cleaned up command: {command}")
if any(keyword in command for keyword in ["type", "say", "write"]):
message = (
re.search(r"(type|say|write) (.+?)(and |in |\n|$)", command)
.groups(0)[1]
.strip()
)
print(f"Typing: {message} in chat")
if "chat" in command:
message = re.search(r"type (.+?)(and |in |\n|$)", command).groups(0)[0].strip()
print(f"Typing: {message} in team chat")
pg.keyDown("enter")
sleep(0.041)
@ -95,7 +74,7 @@ def on_press(key):
sleep(0.94)
current_chat = chat_type()
if current_chat == None or current_chat in command:
if current_chat in command:
pass # no change needed
elif "match" in command or "team" in command:
pg.keyDown("tab")
@ -107,7 +86,7 @@ def on_press(key):
# sleep(0.074)
# pg.keyUp("enter")
elif any(keyword in command for keyword in config.maximum_pulse):
elif any(keyword in command for keyword in ["maximum", "pulse", "balls", "remove", "eliminate", "murder", "goon"]):
print("MAXIMUM PULSE!!!!")
pg.keyDown("q")
sleep(0.032)
@ -117,6 +96,9 @@ def on_press(key):
subprocess.run("/home/ultrablob/Videos/Clips/save_clip.sh")
# Collect events until released
with keyboard.Listener(on_press=on_press, on_release=lambda event: None) as listener:
with keyboard.Listener(
on_press=on_press,
on_release=lambda event: None) as listener:
listener.join()

6
slang.py Normal file
View file

@ -0,0 +1,6 @@
replacements = {
"gigi": "gg",
"heels": "heals",
"heeling": "healing",
"heel": "heal"
}