A practical computer-vision tool for detecting image blur and sharpness.
FindBlur combines Laplacian Variance and FFT-based frequency analysis to evaluate image detail and classify images as Sharp, Borderline, or Blurry.
Live Demo ย โข ย GitHub Repository
Try FindBlur directly in your browser:
Upload an image, analyze multiple images, or capture an image using your camera.
Know before you post.
FindBlur is a lightweight image sharpness and blur detection application built with Python, OpenCV, NumPy, Pandas, and Streamlit.
The idea is simple:
Check your image before you publish it.
Instead of relying on a single blur metric, FindBlur combines two complementary signals:
- Laplacian Variance โ measures edge and fine-detail strength.
- FFT Analysis โ evaluates high-frequency image information.
The signals are normalized, weighted, and combined into a final detection score.
The final result is classified into three practical categories:
| Verdict | Meaning |
|---|---|
| ๐ข Sharp | Strong image detail detected |
| ๐ก Borderline | Close to the threshold โ manual review recommended |
| ๐ด Blurry | Low image detail detected |
FindBlur uses two independent image-analysis signals:
Laplacian Variance
+
FFT Frequency Analysis
โ
Combined Score
โ
Final Verdict
This provides a second signal instead of relying entirely on one measurement.
FindBlur doesn't force every image into:
Sharp / Blurry
Instead, it uses:
๐ข Sharp
๐ก Borderline
๐ด Blurry
The Borderline category is useful when an image falls close to the configured threshold.
Detection settings can be customized from the sidebar:
- Laplacian threshold
- Sensitivity mode
- Borderline margin
- Laplacian weight
- FFT weight
The detection threshold is configurable rather than permanently fixed.
| Mode | Behavior |
|---|---|
| ๐ด Strict | More aggressive blur detection |
| ๐ก Balanced | General everyday use |
| ๐ข Lenient | More tolerant of low-texture images |
Upload:
- JPG
- JPEG
- PNG
- WEBP
FindBlur provides:
- Original image
- Detail map
- Edge map
- Laplacian score
- FFT score
- Combined score
- Confidence
- Detection breakdown
- Final verdict
Analyze multiple images in one session.
Batch mode supports:
- Multiple image uploads
- Progress tracking
- Thumbnail previews
- Individual scores
- Verdict filtering
- Score sorting
- Filename sorting
- Manual review
- CSV export
Use your browser camera to capture an image and analyze it immediately.
Camera
โ
Capture
โ
Analyze
โ
Calculate Sharpness
โ
Verdict
FindBlur provides visual information alongside numerical scores.
It generates:
- Laplacian detail maps
- Canny edge maps
- Original image comparison
This helps users understand where image detail is being detected.
Automated detection isn't perfect.
FindBlur allows results to be manually reviewed:
โ
Correct
โ ๏ธ Disagree
โ Not Reviewed
Review information is maintained within the current Streamlit session.
Batch results can be exported for further analysis.
Typical result fields include:
Filename
Laplacian Score
FFT Score
Combined Score
Verdict
Review Status
The primary blur metric is calculated using:
cv2.Laplacian(gray, cv2.CV_64F).var()The Laplacian responds strongly to rapid changes in image intensity.
These changes commonly occur around:
- Edges
- Object boundaries
- Fine textures
- Small details
Generally:
Higher Laplacian Variance
โ
More edge/detail information
โ
Potentially sharper image
while:
Lower Laplacian Variance
โ
Less fine detail
โ
Potentially blurrier image
FindBlur also uses Fast Fourier Transform (FFT) analysis.
FFT provides information about the frequency components present in an image.
Higher-frequency components are generally associated with:
- Fine structures
- Edges
- Textures
- Rapid intensity changes
This creates a second signal that can be compared with the Laplacian result.
The two signals are normalized before being combined.
Conceptually:
INPUT IMAGE
โ
โโโโโโโโโโดโโโโโโโโโ
โผ โผ
LAPLACIAN FFT
โ โ
โผ โผ
Edge / Detail Frequency Detail
โ โ
โโโโโโโโโโฌโโโโโโโโโ
โผ
Normalization
โ
โผ
Weighted Combination
โ
โผ
Combined Score
โ
โผ
Threshold Check
โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โผ โผ โผ
๐ข Sharp ๐ก Borderline ๐ด Blurry
The default configuration gives greater weight to Laplacian analysis while FFT provides additional validation.
A low sharpness score does not always mean an image is actually blurry.
For example:
- Clear blue skies
- Plain walls
- Smooth backgrounds
- Minimal-detail scenes
can naturally contain fewer strong edges.
FindBlur therefore uses a Borderline zone.
Below threshold
โ
๐ด Blurry
Near threshold
โ
๐ก Borderline
Clearly above threshold
โ
๐ข Sharp
This allows the user to manually review uncertain images instead of blindly trusting a single threshold.
FindBlur separates the Streamlit interface from the computer-vision detection engine.
FindBlur
โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโ
โ โ
โผ โผ
app.py blur_detector.py
โ โ
โ Detection Engine
โ โ
โ โโโโโโโโโโโโโโดโโโโโโโโโโโโโ
โ โ โ
โ โผ โผ
โ Laplacian FFT
โ โ โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ โ
โ โผ
โ Score Combination
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โผ
Verdict
Handles:
- Streamlit interface
- Tabs
- Sidebar controls
- Image uploads
- Camera input
- Batch processing
- Result rendering
- CSV downloads
Handles:
- Image preprocessing
- Laplacian analysis
- FFT analysis
- Score normalization
- Weighted scoring
- Verdict classification
- Confidence calculation
This separation keeps the UI and detection logic independent and easier to maintain.
FindBlur/
โ
โโโ app.py
โ
โโโ blur_detector.py
โ
โโโ requirements.txt
โ
โโโ README.md
โ
โโโ assets/
โ โโโ logo.png
โ
โโโ docs/
โ โโโ single-check.png
โ โโโ batch-check.png
โ โโโ live-camera.png
โ โโโ settings.png
โ
โโโ .streamlit/
โ โโโ config.toml
โ
โโโ .devcontainer/
| Technology | Purpose |
|---|---|
| ๐ Python | Core application logic |
| ๐ Streamlit | Interactive web interface |
| ๐๏ธ OpenCV | Computer vision and image processing |
| ๐ข NumPy | Numerical computation and FFT |
| ๐ผ Pandas | Batch processing and CSV export |
| ๐ผ๏ธ Pillow | Image handling |
| ๐ Matplotlib | Diagnostic visualization |
Make sure you have:
- Python 3.11+
- Git
- A modern web browser
git clone https://github.com/Aarush005coder/FindBlur.git
cd FindBlurpython -m venv venv
venv\Scripts\activatepython3 -m venv venv
source venv/bin/activatepip install -r requirements.txtstreamlit run app.pyOpen:
http://localhost:8501
The project uses:
streamlit
opencv-python-headless
numpy
pandas
Pillow
matplotlib
Install all dependencies with:
pip install -r requirements.txtFindBlur is deployed using Streamlit Community Cloud.
Local Development
โ
โผ
Git
โ
โผ
GitHub
โ
โผ
Streamlit Community Cloud
โ
โผ
Live FindBlur App
FindBlur focuses specifically on image sharpness and blur detection.
It is not intended to be a complete image-quality assessment system.
Some cases can be difficult to classify automatically:
- Intentional artistic blur
- Motion blur
- Very low-texture images
- Plain walls
- Clear skies
- Extremely noisy images
- Very small images
- Naturally low-detail scenes
- Different camera characteristics
- Different image resolutions
A Borderline result should therefore be treated as a signal for manual review rather than an absolute decision.
Potential future improvements include:
- Region-based blur detection
- Motion-blur detection
- Focus-area detection
- Resolution-aware threshold calibration
- Automatic threshold calibration
- Image-quality history
- PDF report generation
- Benchmark dataset
- Detection performance evaluation
- Automated test suite
- Improved low-texture detection
- Large-batch optimization
- Additional image-quality metrics
When changing the detection engine, test against different image categories.
High-detail scenes
Text
Objects with strong edges
Detailed landscapes
Defocused photos
Motion blur
Soft-focus images
Low-detail photographs
Clear sky
Plain walls
Smooth backgrounds
Low-texture scenes
Noisy images
The goal is not only to identify obvious blur, but also to reduce false positives on naturally low-detail images.
Contributions, suggestions, and improvements are welcome.
git checkout -b feature/your-featureRun the application locally:
streamlit run app.pygit add .
git commit -m "Add your feature"git push origin feature/your-featureThen open a Pull Request.
This project is licensed under the MIT License.
See the LICENSE file for details.
Built with Python, OpenCV, NumPy & Streamlit.
A practical computer-vision project for evaluating image sharpness before publishing.
๐ Live Demo ย โข ย ๐ป GitHub



