Work Experience
INDO.AI Intern
YOLOv8s • OpenCV • Real-Time AI • Custom Dataset
Built a real-time object detection system to identify fire and smoke from surveillance footage using YOLOv8 and OpenCV. Trained on a custom-labeled dataset of over 21,000 images, the model achieved 92% mAP@0.5 and 91% real-time accuracy.
During testing, I found that the model struggled to detect small smoke (e.g., from a matchstick) due to bias toward large-fire samples in the dataset. To address this, I created a custom dataset of small-smoke images, annotated them with bounding boxes, and applied data augmentation. Although detection confidence remained between ~0.2–0.45, fine-tuning the detection threshold allowed for more reliable alerts in low-visibility cases.
The system is optimized for real-time performance in low-resource environments, making it suitable for affordable, deployable fire safety systems.
Future Work: Enhancing small-smoke detection with higher-quality data, introducing fire severity classification, and optimizing for edge deployment through quantization and pruning.
3D CNN • Vision Transformers • PyTorch • Video Classification
Developed a deep learning model to detect violent and abnormal actions in video streams for smart surveillance and public safety systems. The pipeline combined 3D Convolutional Neural Networks (3D CNNs) with Vision Transformers (ViTs) for robust spatiotemporal learning, implemented using PyTorch.
Achieved 96% detection accuracy while improving inference speed by 30% through model pruning, making it viable for real-time security monitoring.
One of the major challenges was the lack of a comprehensive dataset for violence recognition. To overcome this, we aggregated and unified over 12 publicly available datasets, resulting in a consolidated dataset of 15,000+ labeled video clips. This significantly improved model generalization across varied real-world scenarios.
Future Work: Exploring temporal attention mechanisms, fine-tuning ViT layers for motion sensitivity, and deploying the model on edge devices like NVIDIA Jetson for on-site surveillance.
Real Time-Fire and Smoke Detection




Violence Detection from Surveillance Video
Semantic Video Summarization with CLIP-Based Frame Scoring


OpenAI CLIP · PyTorch · NumPy · Frame Sampling · NLP Prompt Engineering
Built a semantic video summarization pipeline by integrating OpenAI’s CLIP with a custom frame-ranking system to select keyframes based on natural language prompts. The system compares text and visual embeddings to identify contextually relevant frames, improving summarization accuracy by ~20% over heuristic-based approaches.
Faced an initial challenge due to limited NLP background—particularly around prompt engineering and text embedding interpretation. Overcame this by self-learning key NLP concepts such as semantic similarity and tokenization, enabling effective use of CLIP’s language-vision capabilities for object detection and frame scoring.
Enabled more meaningful, user-guided video summaries with significantly improved relevance. The system is modular and adaptable for prompt-driven use cases (e.g., “detect fire or smoke” in surveillance footage).
Future Work: Add multi-prompt support, confidence-based frame filtering, and optimize for edge deployment via CLIP alternatives.
Independent Innovative Projects
Algorithmic Quant Trading Strategy
Unsupervised ML • K-Means Clustering • Python • PyPortfolioOpt
Created an unsupervised ML strategy combining K-Means clustering and technical indicators, achieving a 14.98% annualized return and outperforming the S&P 500.
I designed a data-driven trading strategy to identify market regimes and optimize portfolio allocation for improved returns. Using Python, K-Means clustering for unsupervised learning, and technical indicators like RSI, MACD, and ATR, I developed a dynamic regime-based trading model enhanced with PyPortfolioOpt for portfolio optimization.
One challenge was selecting stocks from the large S&P 500 universe, so I filtered the stocks to include only those with at least 24 months of historical data and further shortlisted those with historical returns exceeding 10%, ensuring a focused and reliable selection.
This approach achieved a 14.98% annualized return with a 0.798 Sharpe Ratio in backtests, outperforming the S&P 500 benchmark.
Future Improvements:
To further enhance the strategy’s robustness and applicability, I plan to:
Reduce drawdowns through volatility targeting or stop-loss mechanisms
Incorporate fundamental features such as earnings growth
Experiment with alternative clustering algorithms like DBSCAN and KMeans++
Implement walk-forward optimization for robustness
Extend the strategy to international assets and cryptocurrency markets
GYM EXERCISE TRACKER
OpenCV · MediaPipe · Python · Matplotlib · Jupyter Notebook
Built a real-time posture correction tool using OpenCV and MediaPipe, improving exercise form and reducing injury risk by ~25%.
I developed a real-time posture correction tool using Python, OpenCV, and MediaPipe to enhance exercise form and reduce the risk of injury during workouts. The system utilizes MediaPipe’s human pose estimation and keypoint angle tracking to continuously monitor body posture and provide real-time visual feedback and alerts to correct misalignment.
A key technical challenge was accurately detecting and computing joint angles across different exercise movements. This was overcome through calibration and refinement of the joint angle detection logic, enabling the system to distinguish between correct and incorrect postures with high precision. User testing demonstrated a ~25% improvement in exercise accuracy due to continuous feedback and posture guidance.
This project stemmed from my own experience as a professional football player, specifically as a center-back. Having dealt with recurring injuries throughout my career, I used this personalized posture correction tool during my rehabilitation. It significantly accelerated my recovery timeline — by approximately 35%–50% — by ensuring that exercises were performed with correct form, reducing strain on vulnerable muscle groups and joints.
Future Potential:
A personalized gym tracker like this can be transformative not only for athletes but also for physiotherapy patients, elderly users, and fitness enthusiasts. By adapting posture feedback to an individual’s biomechanics and injury history, the system can facilitate faster recovery, safer workouts, and long-term performance improvements. Future extensions could include personalized exercise plans, dynamic difficulty adjustments, and integration with wearable devices to offer even more granular feedback.


STOCK PRICE PREDICTION USING RANDOM FOREST AND NEWS SENTIMENT
Yahoo Finance API · VADER Sentiment Analysis · Random Forest Regression
Developed a Random Forest model enhanced with news sentiment analysis to better predict short-term price movements.
This was my first end-to-end AI/ML and data science project, where I explored the intersection of financial data and machine learning. I built a model to predict short-term stock price movements using a Random Forest regression approach on historical data sourced from the Yahoo Finance API. To address the inherent noise and volatility of financial markets, I incorporated news sentiment analysis using the VADER algorithm, enabling the model to factor in market mood shifts triggered by headlines.
One key challenge was that Random Forest models alone showed limited accuracy in predicting price direction due to the stochastic nature of financial time series. By integrating sentiment signals and reframing the problem as a binary classification task (up/down), I achieved a testing accuracy of approximately 68%—a promising result for an initial model, especially in such a complex domain.
This project sparked my deep interest in AI-driven financial analytics and gave me hands-on experience with real-world data, model tuning, and the value of hybrid feature engineering.
Future Improvements:
Apply FinBERT or LLMs for deeper contextual sentiment understanding
Incorporate macroeconomic indicators and trading volume as additional features
Experiment with time-series-aware models like LSTM or XGBoost
Deploy the model in a Flask web app for live tracking and testing
ChestVision AI




PyTorch · FastAPI · React/TypeScript · LLaMA3-70B · Grad-CAM · PostgreSQL
Built and deployed a live, explainable AI diagnostic platform that analyzes chest X-rays using a 3-model ensemble, achieving robust multi-disease detection with LLM-generated radiology reports grounded in visual evidence.
I evolved this from an early single-model CheXpert classifier into a full clinical decision-support system. I trained EfficientNet-B0 and MobileNetV2 on Stanford's CheXpert dataset (223,000+ images) with patient age and sex fused into both models, then combined them with TorchXRayVision's pretrained model into a concurrent 3-model ensemble — reducing single-model variance and surfacing inter-model disagreement as a signal for human review rather than hiding it behind one averaged number.
One of the toughest challenges was diagnosing a repeated crash-loop after deploying the ensemble to Hugging Face Spaces' free-tier container — the app would start successfully, then silently shut down and restart for 30 minutes before failing. I traced it to PyTorch pulling in ~2GB of unused CUDA libraries despite running CPU-only inference; switching to CPU-only wheels resolved it immediately. A separate challenge was latency: running three models sequentially per request took minutes. I parallelized all three models' forward passes using a thread pool, exploiting the fact that PyTorch releases Python's GIL during tensor computation, cutting real-world inference time substantially.
The deployed system validates uploads with X-ray-specific physics checks and CLIP-based out-of-distribution detection (rejecting non-chest-X-ray images before they reach the ensemble), generates Grad-CAM heatmaps across 7 anatomical zones to ground LLaMA3-70B-authored radiology reports, and caches identical scans in a PostgreSQL database to avoid redundant LLM calls. It also includes rate limiting, audit logging, and a 30+ test pytest suite — treating this as a real system, not just a model demo.
Future Goals:
Expand disease coverage to 14 conditions on the full CheXpert dataset
Add multi-view (frontal + lateral) X-ray support
Introduce uncertainty quantification beyond inter-model disagreement
Build a structured feedback loop for continuous model improvement
Collaborate with clinicians for real-world validation
ArXiv Atlas — AI Research Agent
Built a multi-stage AI agent that transforms any research topic into an interactive visual map of the academic landscape. The agent searches arXiv using LLM-expanded queries, ranks candidate papers through a two-pass pipeline (local cross-encoder + LLM relevance scoring + Semantic Scholar citation counts + recency weighting), extracts structured insights from full paper text via ar5iv HTML parsing, and synthesizes everything into a D3 force-directed graph with thematic clusters, typed edges between papers, open problems, and a dedicated research gaps analysis stage.
The pipeline streams results to the frontend via Server-Sent Events, so users see each stage complete in real-time — from "Searching arXiv" through "Finding gaps" — rather than a single long wait. Every completed search is persisted to SQLite and can be reloaded instantly from a history panel.
The biggest challenge was making the pipeline reliable at scale without burning through API quota. A naive approach — sending 60 candidates through an LLM relevance call, then 12 individual extraction calls, then a full synthesis call — consumed the free-tier token limit in a handful of test runs. I solved this through a combination of targeted model tiering (cheap llama-3.1-8b-instant for high-volume extraction, the full 70B model only for ranking and synthesis), per-call disk caching (extraction cached permanently per arxiv ID since a paper's content never changes), and a skip-and-backfill extraction strategy (failed papers are replaced from lower-ranked candidates instead of retried, preserving result quality without hammering a call that's likely to fail again). A relevance floor ensures papers the LLM itself scored as irrelevant are never padded into the final set just to hit a target count.
A working end-to-end research agent with Docker deployment, 30 passing pytest tests covering core pipeline logic (cache TTL, extraction backfill behavior, citation API edge cases, search history persistence), and structured JSON logging with per-stage timing on every run. Testing on topics like "audio deepfake detection" and "video compression" produced genuinely well-clustered research maps with meaningful citation-weighted rankings and specific, technically-grounded edge labels between related papers.
Future Improvements:
Deploy to a hosted environment (Render + Vercel) for public access
"Chat with the graph" — answer questions like "why are these papers connected?" using the structured extractions already on hand, without needing RAG
Compare two topics side-by-side (shared papers, divergent clusters, common datasets)
Upgrade to full Semantic Scholar API authentication for higher rate limits and citation accuracy