I am making a voice assistant it used to be so slow so I Wanted to Use Some functions from an other python file because the code will become larger which might make the program much much slower so i decided to ship some features which are more that seven lines into a another file Named Features.py and i also added all the features into a class so that it might become faster And now some features are not working so i searched google alot but i didn't find answer i am hoping for an good answer
Main.py Code
import datetime
import os # os module is used to open files and run commands on the cmd and a lot of other features installation:deafult by python
import webbrowser
import cv2
import pyautogui
import pyttsx3 # pyttsx3 is module for text to speech installation:pip install pyttsx3
import requests
# speechrecogntion is the module which is used for recognizing audio and converting into text installation:pip install speechrecogntion
import speech_recognition as sr
from pyttsx3.drivers import sapi5
import functools
hour = datetime.datetime.now().hour
class HoverAssist():
@functools.lru_cache()
def __init__(self) -> None:
self.hour = int(datetime.datetime.now().hour)
self.engine = pyttsx3.init()
self.voices = self.engine.getProperty('voices')
self.engine.setProperty('voice', self.voices[0].id)
@functools.lru_cache()
def speak(self, audio):
self.engine.say(audio)
print(" ")
print(f"Hover Said: {audio}")
self.engine.runAndWait()
@functools.lru_cache()
def listen(self):
while 1:
listener = sr.Recognizer()
try:
with sr.Microphone() as source:
audio = listener.listen(source, timeout=1.0)
response = listener.recognize_google(audio)
response = response.lower()
if "hawa" in response or "how" in response:
self.speak("How can I help you?")
self.Analyze()
else:
pass
except sr.WaitTimeoutError:
pass
except sr.UnknownValueError:
pass
except sr.RequestError:
print("Network error.")
@functools.lru_cache()
def takecommand(self):
listener = sr.Recognizer()
command = ""
try:
with sr.Microphone() as source:
voice = listener.listen(source, phrase_time_limit=4)
command = listener.recognize_google(voice)
print(f"User Said: {command}")
print(" ")
except sr.WaitTimeoutError:
pass
except sr.UnknownValueError:
pass
except sr.RequestError:
print("Network error.")
return command.lower()
@functools.lru_cache()
def wish(self, hour):
if hour > 0 and hour < 12:
self.speak('Good Morning')
elif hour > 12 and hour > 15:
self.speak('Good Afternoon')
else:
self.speak('Good Evening')
@functools.lru_cache()
def Analyze(self):
query = self.takecommand().lower()
if query == "open notepad":
os.system("notepad")
elif "what is the time" in query:
min = datetime.datetime.now().strftime("%I:%M %p")
self.speak(f"It is {min}")
elif 'browser' in query:
self.speak("opening Browser ")
webbrowser.open("https://www.google.com")
elif 'open cmd' in query or 'open command prompt' in query:
self.speak('Opening CMD')
os.system("start cmd")
elif 'open camera' in query:
self.capture = cv2.VideoCapture(0)
while True:
ret, img = self.capture.read()
cv2.imshow('Camera', img)
k = cv2.waitKey(27)
if k == 27:
break
elif 'close camera' in query:
self.capture.release()
self.capture.destroyAllWindows()
elif 'ip address' in query:
ip = requests.get('https://api.ipify.org').text
self.speak(f"your ip is {ip}")
elif 'wikipedia' in query:
self.speak('Searching Wikipedia')
import wikipedia
query = query.replace('wikipedia', '')
results = wikipedia.summary(query, sentences=3)
self.speak('Accoding to wikipedia' results)
elif 'open youtube' in query:
self.speak("Opening Youtube")
webbrowser.open('www.youtube.com')
elif 'open stack overflow' in query:
self.speak("Opening Stackoverflow")
webbrowser.open('www.stackoverflow.com')
elif 'search' in query:
self.speak("Searching The Internet")
search = query.replace("search", "")
webbrowser.open(f'www.google.com/search?q={search}')
elif 'i am going' in query:
self.speak(
"ok i will open ..security camera. to secure your device")
from Feature import Security_Cam
Security_Cam()
elif 'open' in query.lower():
from Feature import Webopener
query = query.replace("open", "")
query = query.replace("chrome", "")
self.speak(f"Opening {query} ")
Webopener.webopen(query=query)
elif "weather" in query:
from Feature import Weather
w = Weather()
self.speak(w)
elif 'how' in query:
import pywikihow
how = pywikihow.search_wikihow(query, max_results=1)
assert len(how) == 1
self.speak(how[0].summary)
elif 'shutdown' in query or 'shut down' in query:
self.speak('Shutting Down Windows')
os.system("shutdown /s /t 00")
elif 'switch the window' in query:
self.speak("I'll switch the window for you")
pyautogui.hotkey("Alt", "Tab")
elif 'take a screenshot' in query:
self.speak("taking screenshot buddy")
pyautogui.hotkey("Win", "prtsc")
elif "volume up" in query:
pyautogui.press("volumeup")
elif "volume down" in query:
pyautogui.press("volumedown")
elif "remind me" in query:
import threading
self.speak("What should i remind you for")
name = self.takecommand()
self.speak("When Should I Remind You")
time = self.takecommand()
from Feature import Reminder
tt = time
tt = tt.replace(".", "")
tt = tt.upper()
h = threading.Thread(target=lambda: Reminder(tt, name))
elif "play" in query:
import pywhatkit
query = query.replace("play", "")
self.speak(f"Playing {query}")
pywhatkit.playonyt(query)
elif "note" in query:
from Feature import Takenote
Takenote()
elif "alarm" in query:
self.speak(
"Sir Please Tell Me The Time to set alarm. For Example, Set Alarm to 5:30 A.M")
tt = self.takecommand()
tt = tt.replace("set alarm to ", "")
tt = tt.replace(".", "")
tt = tt.upper()
import threading
from Feature import Alarm
m = threading.Thread(target=lambda: Alarm(tt)).start()
elif "timer" in query:
import threading
from Feature import Timer
query = query.replace("set a timer for ", "")
query = query.replace("minutes", "")
query = query.replace("minute", "")
t = threading.Thread(target=lambda: Timer(int(query))).start()
else:
pass
Hover = HoverAssist()
Hover.wish(hour=hour)
Hover.listen()
Feature.py
import pyttsx3
import threading
import speech_recognition as sr
import datetime
import os
import cv2
import webbrowser
import requests
import wikipedia
import winsound
import webbrowser
import pyautogui
from pyttsx3.drivers import sapi5
import pywhatkit
import pywikihow
from googlesearch import search
import webbrowser
hour = int(datetime.datetime.now().hour)
engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
def speak(audio):
engine.say(audio)
print(" ")
print(f"Hover Said: {audio}")
engine.runAndWait()
def takecommand():
try:
listener = sr.Recognizer()
with sr.Microphone() as source:
voice = listener.listen(source)
command = listener.recognize_google(voice)
print(command)
except sr.WaitTimeoutError:
pass
except sr.UnknownValueError:
pass
except sr.RequestError:
print("Network error.")
return command.lower()
def Security_Cam():
speak("ok i will open ..security camera. to secure your device")
cam = cv2.VideoCapture(0)
while cam.isOpened():
ret, frame1 = cam.read()
ret, frame2 = cam.read()
diff = cv2.absdiff(frame1, frame2)
gray = cv2.cvtColor(diff, cv2.COLOR_RGB2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
_, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)
dilated = cv2.dilate(thresh, None, iterations=3)
contours, _ = cv2.findContours(
dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
if cv2.contourArea(c) < 20000:
continue
x, y, w, h = cv2.boundingRect(c)
cv2.rectangle(frame1, (x, y), (x w, y h), (0, 255, 0), 2)
winsound.PlaySound('alert.wav', winsound.SND_ASYNC)
if cv2.waitKey(10) == ord('q'):
break
cv2.imshow('Secure Cam', frame1)
def Webopener():
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
def webopen(query):
# scraping data
urls = []
for j in search(query=query, tld="co.in", num=1, stop=1, pause=1):
webbrowser.open(j)
print("done")
def Alarm(Timing):
altime = str(datetime.datetime.now().strptime(Timing, "%I:%M %p"))
altime = altime[11:-3]
Horeal = altime[:2]
Horeal = int(Horeal)
Mireal = altime[3:5]
Mireal = int(Mireal)
speak(f"Done Set an Reminder for {Timing}")
while True:
if Horeal == datetime.datetime.now().hour:
if Mireal == datetime.datetime.now().minute:
print("The alarm has been completed")
winsound.PlaySound('alert.wav', winsound.SND_FILENAME)
elif Mireal<datetime.datetime.now().minute:
break
def Weather():
from bs4 import BeautifulSoup
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(f'https://www.google.com/search?q=weather&oq=weather&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8',headers=headers)
soup = BeautifulSoup(res.text,'html.parser')
location = soup.select('#wob_loc')[0].getText().strip()
info = soup.select('#wob_dc')[0].getText().strip()
weather = soup.select('#wob_tm')[0].getText().strip()
precipitation = soup.select('#wob_pp')[0].getText().strip()
humidity = soup.select('#wob_hm')[0].getText().strip()
windspeed =soup.select('#wob_ws')[0].getText().strip()
information = f"It is {weather}°F There are {precipitation} % chances of rainfall It is {info}.the wind is blowing in a speed of {windspeed}. The humidity is {humidity} % in {location} "
return information
def Takenote():
speak("What is The Name of the Note")
name = takecommand()
speak("Please Tell Me What Should I Take Note Of")
hnote = open(name, "a")
note = takecommand()
hnote.write(f"{note}\n")
hnote.close()
def Reminder(Timing,reminder):
import datetime
import winsound
altime = str(datetime.datetime.now().strptime(Timing, "%I:%M %p"))
altime = altime[11:-3]
Horeal = altime[:2]
Horeal = int(Horeal)
Mireal = altime[3:5]
Mireal = int(Mireal)
speak(f"Done Set an Reminder for {Timing} and {reminder}")
while True:
if Horeal == datetime.datetime.now().hour:
if Mireal == datetime.datetime.now().minute:
print(reminder)
winsound.PlaySound('alert.wav', winsound.SND_FILENAME)
elif Mireal<datetime.datetime.now().minute:
break
def Timer(mins):
import time
secs = mins*60
time.sleep(secs)
mins = f"{mins}minutes"
speak(f"The {mins} Timer has been completed")
winsound.PlaySound('alert.wav', winsound.SND_FILENAME)
Thanks
CodePudding user response:
If they are in the same directory, you can simply import the features.py as
import features
though a bit code will be helpful.
CodePudding user response:
you should try
from Feature import function_name