diff --git a/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/README.md b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/README.md new file mode 100644 index 000000000..4785408f8 --- /dev/null +++ b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/README.md @@ -0,0 +1,36 @@ +# NaviBot-Voice-Assistant + +To get started with NaviBot-Voice-Assistant, follow these steps: + +1. Navigate to the project directory: + + ```bash + cd NaviBot-Voice-Assistant + ``` + +3. Activating venv (optional) + + ```bash + conda create -n venv python=3.10+ + conda activate venv + ``` + +4. Install dependencies: + + ```python + pip install -r requirements.txt + ``` + +5. Configure environment variables + ``` + Rename `.env-sample` to `.env` file + Replace the API your Google API Key, + ``` + Kindly follow refer to this site for getting [your own key](https://ai.google.dev/tutorials/setup) +
+ +6. Run the chatbot: + + ```bash + streamlit run app.py + ``` \ No newline at end of file diff --git a/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/app.py b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/app.py new file mode 100644 index 000000000..4e048df7b --- /dev/null +++ b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/app.py @@ -0,0 +1,133 @@ +import streamlit as st +import pyttsx3 +import speech_recognition as sr +from PyPDF2 import PdfReader +from langchain.text_splitter import RecursiveCharacterTextSplitter +import os +from langchain_google_genai import GoogleGenerativeAIEmbeddings +import google.generativeai as genai +from langchain_community.vectorstores import FAISS +from langchain_google_genai import ChatGoogleGenerativeAI +from langchain.chains.question_answering import load_qa_chain +from langchain.prompts import PromptTemplate +from dotenv import load_dotenv + +load_dotenv() +os.getenv("GOOGLE_API_KEY") +genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) + +# Initialize pyttsx3 for voice output +engine = pyttsx3.init() + +# Function to speak the text +def speak(text): + engine.say(text) + engine.runAndWait() + +# Function to listen to voice input +def listen(): + r = sr.Recognizer() + with sr.Microphone() as source: + st.write("Listening...") + r.adjust_for_ambient_noise(source) + audio = r.listen(source) + + try: + user_input = r.recognize_google(audio) + st.write(f"You said: {user_input}") + return user_input + except sr.UnknownValueError: + st.write("Sorry, I could not understand what you said.") + return None + except sr.RequestError as e: + st.write(f"Could not request results from Google Speech Recognition service; {e}") + return None + + +def get_pdf_text(pdf_docs): + text="" + for pdf in pdf_docs: + pdf_reader= PdfReader(pdf) + for page in pdf_reader.pages: + text+= page.extract_text() + return text + + +def get_text_chunks(text): + text_splitter = RecursiveCharacterTextSplitter(chunk_size=10000, chunk_overlap=1000) + chunks = text_splitter.split_text(text) + return chunks + + +def get_vector_store(text_chunks): + embeddings = GoogleGenerativeAIEmbeddings(model = "models/embedding-001") + vector_store = FAISS.from_texts(text_chunks, embedding=embeddings) + vector_store.save_local("faiss_index") + + +def get_conversational_chain(): + + prompt_template = """ + Answer the question as detailed as possible from the provided context, make sure to provide all the details, if the answer is not in + provided context just say, "answer is not available in the context", don't provide the wrong answer\n\n + Context:\n {context}?\n + Question: \n{question}\n + + Answer: + """ + + model = ChatGoogleGenerativeAI(model="gemini-pro", + temperature=0.3) + + prompt = PromptTemplate(template = prompt_template, input_variables = ["context", "question"]) + chain = load_qa_chain(model, chain_type="stuff", prompt=prompt) + + return chain + + +def user_input(user_question): + embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001") + + # Load the local FAISS index with dangerous deserialization allowed + new_db = FAISS.load_local("faiss_index", embeddings, allow_dangerous_deserialization=True) + docs = new_db.similarity_search(user_question) + + chain = get_conversational_chain() + + response = chain( + {"input_documents": docs, "question": user_question}, + return_only_outputs=True + ) + + speak(response["output_text"]) # Speak the response + st.write("Reply: ", response["output_text"]) + + +def main(): + st.set_page_config("Beyond GPS Navigation") + st.header("Beyond GPS Navigator for Blind") + + user_question = st.text_input("Ask your query") + voice_input_button = st.button("Voice Input") + + if voice_input_button: + user_question = listen() # Listen to voice input + if user_question: + user_input(user_question) + + if user_question: + user_input(user_question) + + with st.sidebar: + st.title("Menu:") + pdf_docs = st.file_uploader("Upload your route data and Click on the Submit & Process Button", accept_multiple_files=True) + if st.button("Submit & Process"): + with st.spinner("Processing..."): + raw_text = get_pdf_text(pdf_docs) + text_chunks = get_text_chunks(raw_text) + get_vector_store(text_chunks) + st.success("Done") + + +if __name__ == "__main__": + main() diff --git a/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/main.py b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/main.py new file mode 100644 index 000000000..41453725b --- /dev/null +++ b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/main.py @@ -0,0 +1,88 @@ +import os +import streamlit as st +from dotenv import load_dotenv +import google.generativeai as gen_ai +import speech_recognition as sr +from gtts import gTTS +from tempfile import TemporaryFile + +# Load environment variables +load_dotenv() + +# Configure Streamlit page settings +st.set_page_config( + page_title="Chat with Gemini-Pro!", + page_icon=":brain:", # Favicon emoji + layout="centered", # Page layout option +) + +GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY") + +# Set up Google Gemini-Pro AI model +gen_ai.configure(api_key=GOOGLE_API_KEY) +model = gen_ai.GenerativeModel('gemini-pro') + +# Function to translate roles between Gemini-Pro and Streamlit terminology +def translate_role_for_streamlit(user_role): + if user_role == "model": + return "assistant" + else: + return user_role + +# Function to recognize speech input +def recognize_speech(): + r = sr.Recognizer() + with sr.Microphone() as source: + st.write("Speak now...") + audio = r.listen(source) + + try: + user_prompt = r.recognize_google(audio) + st.write("You said:", user_prompt) + return user_prompt + except sr.UnknownValueError: + st.write("Sorry, I could not understand your audio.") + return "" + except sr.RequestError as e: + st.write("Could not request results from Google Speech Recognition service; {0}".format(e)) + return "" + +# Function to output voice +def speak(text): + tts = gTTS(text=text, lang='en') + with TemporaryFile(suffix=".wav", delete=False) as f: + tts.write_to_fp(f) + filename = f.name + st.audio(filename, format='audio/wav') + + +# Initialize chat session in Streamlit if not already present +if "chat_session" not in st.session_state: + st.session_state.chat_session = model.start_chat(history=[]) + +# Display the chatbot's title on the page +st.title("🤖 Gemini Pro - ChatBot") + +# Display the chat history +for message in st.session_state.chat_session.history: + with st.chat_message(translate_role_for_streamlit(message.role)): + st.markdown(message.parts[0].text) + +# Input field for user's message +voice_input = st.checkbox("Voice Input") +if voice_input: + user_prompt = recognize_speech() +else: + user_prompt = st.text_input("Ask Gemini-Pro...") + +if user_prompt: + # Add user's message to chat and display it + st.chat_message("user").markdown(user_prompt) + + # Send user's message to Gemini-Pro and get the response + gemini_response = st.session_state.chat_session.send_message(user_prompt) + + # Display Gemini-Pro's response + with st.chat_message("assistant"): + st.markdown(gemini_response.text) + speak(gemini_response.text) diff --git a/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/map.py b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/map.py new file mode 100644 index 000000000..bf8924ccc --- /dev/null +++ b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/map.py @@ -0,0 +1,99 @@ +import os +import streamlit as st +from dotenv import load_dotenv +import google.generativeai as gen_ai +import speech_recognition as sr +from gtts import gTTS +from tempfile import TemporaryFile +import webbrowser + +# Load environment variables +load_dotenv() + +# Configure Streamlit page settings +st.set_page_config( + page_title="Beyond GPS Navigator!", + page_icon=":brain:", # Favicon emoji + layout="centered", # Page layout option +) + +GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY") + +# Set up Google Gemini-Pro AI model +gen_ai.configure(api_key=GOOGLE_API_KEY) +model = gen_ai.GenerativeModel('gemini-pro') + +# Function to translate roles between Gemini-Pro and Streamlit terminology +def translate_role_for_streamlit(user_role): + if user_role == "model": + return "assistant" + else: + return user_role + +# Function to recognize speech input +def recognize_speech(): + r = sr.Recognizer() + with sr.Microphone() as source: + st.write("Speak now...") + audio = r.listen(source) + + try: + user_prompt = r.recognize_google(audio) + st.write("You said:", user_prompt) + return user_prompt + except sr.UnknownValueError: + st.write("Sorry, I could not understand your audio.") + return "" + except sr.RequestError as e: + st.write("Could not request results from Google Speech Recognition service; {0}".format(e)) + return "" + +# Function to output voice +def speak(text): + tts = gTTS(text=text, lang='en') + with TemporaryFile(suffix=".wav", delete=False) as f: + tts.write_to_fp(f) + filename = f.name + st.audio(filename, format='audio/wav') + +# Get user's current location +current_location = st.text_input("What is your current location?") + +# Ask the user for their destination +destination = recognize_speech() + +# Initialize chat session in Streamlit if not already present +if "chat_session" not in st.session_state: + st.session_state.chat_session = model.start_chat(history=[]) + +# Display the chatbot's title on the page +st.title("🤖 Gemini Pro - ChatBot") + +# Display the chat history +for message in st.session_state.chat_session.history: + with st.chat_message(translate_role_for_streamlit(message.role)): + st.markdown(message.parts[0].text) + +# Input field for user's message +voice_input = st.checkbox("Voice Input") +if voice_input: + user_prompt = recognize_speech() +else: + user_prompt = st.text_input("Ask Gemini-Pro...") + +if user_prompt: + # Add user's message to chat and display it + st.chat_message("user").markdown(user_prompt) + + # Send user's message to Gemini-Pro and get the response + gemini_response = st.session_state.chat_session.send_message(user_prompt) + + # Display Gemini-Pro's response + with st.chat_message("assistant"): + st.markdown(gemini_response.text) + speak(gemini_response.text) + + # If the response contains directions, open them in Google Maps + if "directions" in gemini_response.text: + directions_url = "https://www.google.com/maps/dir/?api=1&origin=" + current_location + "&destination=" + destination + webbrowser.open(directions_url) \ No newline at end of file diff --git a/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/requirements.txt b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/requirements.txt new file mode 100644 index 000000000..86f208887 --- /dev/null +++ b/Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/requirements.txt @@ -0,0 +1,5 @@ +streamlit +dotenv +google-generativeai +speech_recognition +gtts \ No newline at end of file