Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/README.md
Original file line number Diff line number Diff line change
@@ -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)
<br/>

6. Run the chatbot:

```bash
streamlit run app.py
```
133 changes: 133 additions & 0 deletions Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/app.py
Original file line number Diff line number Diff line change
@@ -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()
88 changes: 88 additions & 0 deletions Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/main.py
Original file line number Diff line number Diff line change
@@ -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)
99 changes: 99 additions & 0 deletions Algorithms and Deep Learning Models/Beyond-GPS-Navi-Bot/map.py
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
streamlit
dotenv
google-generativeai
speech_recognition
gtts
Loading