Skip to content
Β 
Β 

Latest commit

Β 

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– AI Interview Assistant

An AI-powered browser extension designed to help users practice technical and non-technical interviews, analyze resumes against job descriptions, generate interview questions, evaluate answers, provide voice interaction, and detect potential cheating indicators using the webcam.


πŸ“Œ Overview

AI Interview Assistant combines a browser extension frontend with a Python/Flask backend and machine-learning components to create an interactive interview-practice environment.

The system allows a candidate to:

  • πŸ“„ Upload and extract text from resumes
  • πŸ’Ό Enter a target job description
  • πŸ€– Analyze resume–job-description compatibility
  • πŸ“Š Generate a match score and identify missing skills
  • ❓ Generate technical and non-technical interview questions
  • ⏱️ Answer questions under a timed interview environment
  • πŸŽ™οΈ Use speech recognition for voice-based answers
  • πŸ”Š Hear questions through text-to-speech
  • πŸ“· Use webcam-based monitoring during interviews
  • πŸ‘οΈ Run cheating-detection functionality
  • 🧠 Evaluate candidate answers using NLP
  • πŸ“ˆ Track interview scores and history
  • πŸ“Š Visualize performance through a dashboard
  • 🐳 Run the backend inside Docker

🎬 Project Demo

πŸ–₯️ Interface Preview

AI Interview Assistant Demo

AI Interview Assistant β€” Dashboard, Interview, Results, History & Settings

πŸŽ₯ Demo Video

πŸ“Œ Demo: The video demonstrates resume analysis, AI-generated interview questions, camera monitoring, voice input, answer evaluation, scoring, and interview history.


✨ Features

πŸ“„ Resume Analysis

Upload a candidate's resume in supported document formats and extract its text through the backend.

Resume
   ↓
Text Extraction
   ↓
NLP Analysis
   ↓
Job Description Comparison
   ↓
Match Score + Missing Skills

πŸ’Ό Job Description Matching

The system analyzes the relationship between:

  • Candidate resume
  • Target job description
  • Relevant keywords
  • Skills

πŸ€– AI Interview Question Generation

After resume analysis, the backend generates interview questions relevant to the candidate.

Questions are divided into:

ROUND 1
Technical

ROUND 2
Non-Technical

⏱️ Timed Interviews

Each question has a 2-minute timer.

Time Left: 1:59

πŸŽ™οΈ Voice-Based Answering

The extension supports browser speech recognition and converts spoken responses into text.


πŸ”Š Text-to-Speech

Interview questions can be read aloud using:

SpeechSynthesisUtterance

πŸ“· Camera Monitoring

The extension requests webcam access when an interview starts.

The camera system:

  • Requests video independently from microphone access
  • Displays a live camera preview
  • Handles camera permission errors
  • Detects unavailable cameras
  • Handles cameras already being used by another application
  • Attempts to avoid known virtual/Phone Link cameras
  • Releases camera tracks when the interview ends

Camera and microphone access are intentionally handled separately.


πŸ‘οΈ Cheating Detection

The application includes webcam-based cheating-detection functionality intended to identify suspicious interview behavior.

Detected incidents are tracked during the interview and displayed in interview history.


πŸ“Š Interview Dashboard

The extension maintains interview history using browser extension storage.

The dashboard tracks:

  • Total interviews
  • Average score
  • Previous interview scores
  • Cheating alerts

A Chart.js-based visualization displays recent performance.


πŸ“š Interview History

Previous interviews are stored locally and displayed with:

Date
Score
Cheating Alerts

πŸ—οΈ System Architecture

                     AI INTERVIEW ASSISTANT
                              β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚                         β”‚
                 β–Ό                         β–Ό
        Browser Extension             Flask Backend
                 β”‚                         β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚        β”‚        β”‚          β”‚     β”‚              β”‚
        β–Ό        β–Ό        β–Ό          β–Ό     β–Ό              β–Ό
     Resume   Interview  Camera     NLP   ML Models    External APIs
     Upload   Interface  + Audio    β”‚
        β”‚        β”‚        β”‚         β”œβ”€β”€ KeyBERT
        β”‚        β”‚        β”‚         β”œβ”€β”€ Sentence Transformers
        β”‚        β”‚        β”‚         β”œβ”€β”€ Scikit-learn
        β”‚        β”‚        β”‚         └── Ultralytics
        β”‚        β”‚        β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚
                 β–Ό
          Browser Storage

πŸ› οΈ Technology Stack

Frontend / Browser Extension

  • HTML5
  • CSS3
  • JavaScript
  • Chrome/Edge Extension Manifest V3
  • Chrome Storage API
  • Web Speech API
  • MediaDevices API
  • Chart.js

Backend

  • Python 3.12
  • Flask
  • Flask-CORS
  • Waitress
  • python-dotenv

Artificial Intelligence / Machine Learning

  • PyTorch
  • Sentence Transformers
  • KeyBERT
  • Scikit-learn
  • NumPy
  • Ultralytics
  • OpenCV

Document Processing

  • python-docx
  • pypdf

External Services

  • RapidAPI
  • Hugging Face

Deployment

  • Docker
  • Docker Desktop
  • Python virtual environment
  • Linux-based Python Docker image

πŸ“ Project Structure

A typical project structure is:

AI_INTERVIEW_ASSISTANT/
β”‚
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”œβ”€β”€ requirements.txt
β”‚   β”œβ”€β”€ main.py
β”‚   β”œβ”€β”€ nlp_engine.py
β”‚   β”œβ”€β”€ cheating_detection.py
β”‚   β”œβ”€β”€ question_generator.py
β”‚   β”œβ”€β”€ scoring.py
β”‚   β”œβ”€β”€ model/
β”‚   β”œβ”€β”€ data/
β”‚   └── .env
β”‚
β”œβ”€β”€ assets/
β”‚   └── image.png
β”‚
β”œβ”€β”€ popup.html
β”œβ”€β”€ popup.js
β”œβ”€β”€ style.css
β”œβ”€β”€ background.js
β”œβ”€β”€ manifest.json
β”‚
└── README.md

The exact project structure may vary depending on the current version of the project.


βš™οΈ Backend Setup

1. Clone the Repository

git clone <YOUR_REPOSITORY_URL>
cd AI_INTERVIEW_ASSISTANT

2. Navigate to Backend

cd backend

3. Create a Python Virtual Environment

Windows

python -m venv .venv

Activate it:

.venv\Scripts\activate

Linux/macOS

python3 -m venv .venv
source .venv/bin/activate

4. Install Dependencies

pip install -r requirements.txt

πŸ” Environment Variables

Create:

backend/.env

Add the required API credentials:

RAPID_API_KEY=your_rapidapi_key
HF_TOKEN=your_huggingface_token

⚠️ Security

Never commit .env to GitHub.

Add:

.env

to .gitignore.

Also make sure .env is excluded from the Docker build context using .dockerignore.


▢️ Running the Backend Locally

From the backend directory:

python main.py

The backend is configured around:

http://localhost:5000

The browser extension communicates with backend endpoints such as:

POST /extract-text
POST /analyze
POST /evaluate

🐳 Docker Deployment

Build the Docker Image

From the backend/ directory:

docker build -t interview-assistant:v1 .

Verify the Image

docker images

You should see:

interview-assistant    v1

Run the Container

Pass environment variables at runtime:

docker run --rm --env-file .env -p 5000:5000 interview-assistant:v1

The application will then be accessible through:

http://localhost:5000

Why use --env-file?

API credentials should not be embedded inside the Docker image.

.env
 β”‚
 β–Ό
docker run --env-file .env
 β”‚
 β–Ό
Docker Container
 β”‚
 β”œβ”€β”€ RAPID_API_KEY
 └── HF_TOKEN

πŸ§ͺ Testing Docker

To verify that Docker itself is functioning:

docker run hello-world

A successful installation produces:

Hello from Docker!

Inspect the project image with:

docker image inspect interview-assistant:v1

🧩 Browser Extension Installation

Microsoft Edge

Open:

edge://extensions/

Enable:

Developer mode

Select:

Load unpacked

and choose the project directory containing manifest.json.

Google Chrome

Open:

chrome://extensions/

Enable:

Developer mode

Click:

Load unpacked

and select the extension directory.


πŸ”‘ Extension Permissions

The extension uses Manifest V3.

Relevant permissions include:

{
  "permissions": [
    "storage",
    "notifications",
    "tabs",
    "activeTab",
    "scripting"
  ]
}

The local backend is permitted through:

"host_permissions": [
  "http://localhost:5000/*"
]

along with the project's configured external services.


πŸ”„ Interview Workflow

Launch Extension
       β”‚
       β–Ό
Enter Job Description
       β”‚
       β–Ό
Upload Resume
       β”‚
       β–Ό
Extract Resume Text
       β”‚
       β–Ό
Save Candidate Profile
       β”‚
       β–Ό
Start Interview
       β”‚
       β–Ό
Camera Permission
       β”‚
       β–Ό
Resume + JD Analysis
       β”‚
       β–Ό
Match Score
       β”‚
       β–Ό
Missing Skills
       β”‚
       β–Ό
Generate Questions
       β”‚
       β–Ό
Technical Round
       β”‚
       β–Ό
Non-Technical Round
       β”‚
       β–Ό
Voice / Text Answer
       β”‚
       β–Ό
Answer Evaluation
       β”‚
       β–Ό
Score Calculation
       β”‚
       β–Ό
Cheating Detection
       β”‚
       β–Ό
Final Score
       β”‚
       β–Ό
Save Interview History
       β”‚
       β–Ό
Dashboard

πŸ“‘ Backend API

Extract Resume Text

POST /extract-text

Used to extract text from uploaded resume documents.

Analyze Resume

POST /analyze

Example request:

{
  "resume": "Candidate resume text...",
  "job_description": "Job description..."
}

Example response structure:

{
  "score": 85,
  "missing_skills": [],
  "questions": []
}

Evaluate Answer

POST /evaluate

Example request:

{
  "candidate_answer": "Candidate's answer...",
  "reference_answer": "Expected/reference answer..."
}

The resulting score contributes to the candidate's final interview score.


🎯 Interview Scoring

The application maintains:

interviewState.totalScore

and accumulates scores obtained from individual answers.

At the end:

Final Score: XX/100

is displayed and stored in interview history.


πŸ›‘οΈ Security Considerations

This project handles potentially sensitive information including:

  • Resume data
  • Job descriptions
  • API credentials
  • Camera access
  • Microphone access
  • Interview performance data

Never commit

.env
API keys
HF tokens
private credentials

Never hard-code

const HF_TOKEN = "...";
const RAPID_API_KEY = "...";

Prefer

docker run --env-file .env ...

for local Docker execution.


πŸ“· Camera & Microphone Permissions

The camera and microphone are intentionally handled independently.

Camera

navigator.mediaDevices.getUserMedia({
    video: true,
    audio: false
});

Microphone

navigator.mediaDevices.getUserMedia({
    audio: true
});

This prevents microphone permission failure from incorrectly appearing as a camera failure.

The camera implementation handles common errors such as:

NotAllowedError
NotFoundError
NotReadableError
OverconstrainedError
SecurityError
AbortError

πŸ› Troubleshooting

Docker daemon unavailable

If you see:

failed to connect to the docker API

start Docker Desktop and verify:

docker info

Docker image build fails while installing PyTorch

The project uses a CPU-oriented PyTorch installation for the Docker environment.

Rebuild with:

docker build --no-cache -t interview-assistant:v1 .

Camera access denied

Check:

  1. Browser camera permissions
  2. Windows camera permissions
  3. Whether another application is using the webcam
  4. Extension permissions
  5. Extension reload after modifying manifest.json

Inspect the extension console for the actual DOMException:

NotAllowedError
NotFoundError
NotReadableError

rather than relying on a generic camera error.

Backend returns HTML instead of JSON

The extension expects JSON responses from the backend.

If you see:

Server returned HTML

verify that:

http://localhost:5000

is reachable and that the backend is running.

For Docker:

docker ps

πŸ“Œ Docker Configuration

The backend Docker image uses:

FROM python:3.12-slim

and exposes:

EXPOSE 5000

The container starts with:

CMD ["python", "-u", "main.py"]

The Docker environment installs CPU-oriented PyTorch rather than unnecessarily pulling the CUDA dependency stack.


🚧 Future Improvements

Potential future enhancements include:

  • πŸŽ₯ Dedicated interview tab instead of relying entirely on the extension popup
  • 🧠 Improved LLM-based answer evaluation
  • πŸ‘€ Face detection and multi-person detection
  • πŸ‘€ Advanced gaze/posture analysis
  • πŸ“Š More detailed interview analytics
  • πŸ“ˆ Skill-wise performance tracking
  • ☁️ Cloud-based interview history
  • πŸ” Improved secret management for production
  • ⚑ Docker image size optimization
  • πŸ§ͺ Automated backend and extension tests
  • πŸš€ Production deployment of the Flask backend
  • πŸ“± Responsive interview interface
  • πŸ—£οΈ Improved multilingual speech recognition

🎯 Project Objective

The project aims to provide an accessible environment where students and job seekers can practice interviews independently, receive AI-assisted feedback, and improve their technical and communication skills through repeated practice.


πŸ‘¨β€πŸ’» Author

Barsharani Gochhayat

B.Tech β€” Computer Science & Engineering

Raajdhani Engineering College, Bhubaneswar Biju Patnaik University of Technology (BPUT), Odisha

πŸ‘¨β€πŸ’» Co-Author

Manas Ranjan Das

B.Tech β€” Electrical & Computer Engineering

Ajay Binay Institute of Technology (ABIT), Cuttack Biju Patnaik University of Technology (BPUT), Odisha


πŸ“œ License

MIT License

If this is an academic/project submission, you can instead specify the institutional or project-specific licensing terms.


⭐ Contributing

Contributions, suggestions, bug reports, and feature requests are welcome.

Fork Repository
      ↓
Create Feature Branch
      ↓
Implement Changes
      ↓
Test Locally
      ↓
Commit Changes
      ↓
Push Branch
      ↓
Create Pull Request

⭐ Support

If you find this project useful, consider giving the repository a ⭐ and contributing improvements, bug fixes, and new interview features.

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages