PROJECT_01 · Deep Learning · Computer Vision

Pizza Detector

Model CNN do klasyfikacji obrazów · Vue 3 · FastAPI / Django

CNN Image Classifier · Vue 3 · FastAPI / Django

Python 3.12 Keras / TensorFlow CNN NumPy Vue 3 FastAPI Django REST API
Python 3.12 Keras / TensorFlow CNN NumPy Vue 3 FastAPI Django REST API
Zobacz demo Live demo
CNN
Architektura modelu
Model architecture
2
Frameworki backendowe
Backend frameworks
3
Wersje językowe UI
UI language versions

Pizza Detector to kompletna aplikacja full-stack łącząca głębokie uczenie maszynowe z nowoczesnym frontendem. Celem projektu było zbudowanie modelu klasyfikacji binarnej, który na podstawie zdjęcia ocenia — z podaniem procentowej pewności — czy na obrazie znajduje się pizza. Projekt obejmuje cały pipeline: od przygotowania danych i trenowania modelu, przez ekspozycję wyników przez REST API, aż po interfejs użytkownika gotowy do wdrożenia produkcyjnego.

Pizza Detector is a complete full-stack application combining deep learning with a modern frontend. The goal was to build a binary image classifier that evaluates — with a percentage confidence score — whether a given photo contains pizza. The project covers the entire pipeline: from data preparation and model training, through REST API inference, to a production-ready user interface.

Model oparty jest na splotowej sieci neuronowej (CNN) zbudowanej w Keras (TensorFlow backend). Architektura wykorzystuje naprzemienne warstwy konwolucyjne z funkcją aktywacji ReLU, warstwy MaxPooling redukujące wymiarowość przestrzenną oraz warstwy Dropout zapobiegające przeuczeniu. Dane wejściowe przetwarzane są za pomocą NumPy — normalizacja pikseli do zakresu [0, 1] oraz augmentacja obrazów (obroty, odbicia, zmiana jasności) zwiększają generalizację modelu. Trening prowadzony był z użyciem optimizera Adam i funkcji straty binary crossentropy, z metryką accuracy monitorowaną przez callbacks EarlyStopping i ModelCheckpoint.

The model is based on a Convolutional Neural Network (CNN) built with Keras (TensorFlow backend). The architecture consists of alternating convolutional layers with ReLU activation, MaxPooling layers for spatial dimensionality reduction, and Dropout layers to prevent overfitting. Input data is preprocessed using NumPy — pixel normalization to the [0, 1] range and image augmentation (rotations, flips, brightness shifts) improve generalization. Training was performed using the Adam optimizer and binary crossentropy loss, with accuracy monitored via EarlyStopping and ModelCheckpoint callbacks.

Wytrenowany model eksponowany jest przez endpoint REST API zaimplementowany w FastAPI lub Django REST Framework. Endpoint przyjmuje plik graficzny jako multipart/form-data, przetwarza go do formatu wymaganego przez model i zwraca odpowiedź JSON zawierającą pole confidence (wartość procentowa) oraz message z opisem słownym wyniku. Projekt demonstruje umiejętność integracji modeli ML z produkcyjnymi frameworkami webowymi.

The trained model is served through a REST API endpoint implemented in either FastAPI or Django REST Framework. The endpoint accepts an image file as multipart/form-data, preprocesses it to match the model's expected input shape, and returns a JSON response containing a confidence percentage and a human-readable message. The project demonstrates the ability to integrate ML models with production-grade web frameworks.

Interfejs użytkownika zbudowany w Vue 3 z Composition API i składnią <script setup>. Komponent obsługuje drag & drop oraz wybór pliku przez okno systemowe, walidację formatu i rozmiaru po stronie klienta, podgląd przesyłanego obrazu oraz animowane prezentowanie wyniku z paskiem pewności. Aplikacja zawiera wbudowany system internacjonalizacji (i18n) bez zewnętrznych bibliotek — obsługuje języki PL / EN / DE z przełączaniem w czasie rzeczywistym. Tłumaczenia przechowywane są w osobnym module src/i18n/translations.js.

The user interface is built with Vue 3 using the Composition API and <script setup> syntax. The component supports drag & drop and file picker upload, client-side format and size validation, image preview, and animated result display with a confidence meter. The app features a custom internationalisation (i18n) system with no external libraries — supporting PL / EN / DE with real-time switching. Translations are stored in a dedicated src/i18n/translations.js module.

Typ modelu

CNN — klasyfikacja binarna

Framework ML

Keras 3 / TensorFlow 2.x

Przetwarzanie danych

NumPy · ImageDataGenerator

Regularyzacja

Dropout · EarlyStopping · Augmentacja

API

REST · multipart/form-data · JSON

Backend

FastAPI · Django REST Framework

Frontend

Vue 3 · Composition API · Vite

i18n

Własny system · PL / EN / DE

Model type

CNN — binary classification

ML framework

Keras 3 / TensorFlow 2.x

Data processing

NumPy · ImageDataGenerator

Regularisation

Dropout · EarlyStopping · Augmentation

API

REST · multipart/form-data · JSON

Backend

FastAPI · Django REST Framework

Frontend

Vue 3 · Composition API · Vite

i18n

Custom system · PL / EN / DE