- Wprowadzenie
- Wymagania systemowe
- Instalacja
- Struktura projektu
- Moduł ML
- Interfejs GUI
- Instrukcja obsługi
- Konfiguracja bazy danych
- Rozwiązywanie problemów
- Rozwój projektu
Projekt AOI (Automatyczna Optyczna Inspekcja) służy do automatycznej analizy i weryfikacji komponentów elektronicznych na płytkach PCB za pomocą technik wizji komputerowej i uczenia maszynowego. System pozwala na:
- Wykrywanie i klasyfikację różnych typów komponentów elektronicznych
- Porównywanie rzeczywistego rozmieszczenia komponentów z danymi z pliku POS
- Analizę rozmieszczenia i poprawności montażu
- Automatyczne wykrywanie potencjalnych błędów lub braków w montażu
- Archiwizację wyników inspekcji w bazie danych
Aplikacja integruje nowoczesne modele uczenia maszynowego z intuicyjnym interfejsem graficznym, co czyni ją przydatnym narzędziem dla inżynierów elektroników, kontroli jakości oraz działów produkcyjnych.
- Procesor: min. Intel Core i5 lub odpowiednik AMD
- RAM: min. 8GB (zalecane 16GB)
- Karta graficzna wspierająca CUDA (dla przyspieszenia modeli ML)
- Windows 10/11 lub Linux (Ubuntu 18.04+)
- Python 3.8+
- PyQt5
- OpenCV 4.5+
- PyTorch 1.8+
- MySQL Server 8.0+
- Pakiety Python wymienione w pliku requirements.txt
- Sklonuj repozytorium:
git clone https://github.com/twojerepo/ProjektAOI.git
cd ProjektAOI
- Utwórz i aktywuj wirtualne środowisko Python:
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
- Zainstaluj wymagane pakiety:
pip install -r requirements.txt
-
Skonfiguruj bazę danych MySQL:
- Utwórz bazę danych o nazwie
aoi_database - Zaimportuj baze danych.
- Skonfiguruj plik
db_config.pypodając dane dostępowe do bazy
- Utwórz bazę danych o nazwie
-
Pobierz pliki modeli i umieść je w folderze
gui/models/trained/
ProjektAOI/
├── gui/ # Moduły interfejsu użytkownika
│ ├── pages/ # Poszczególne ekrany aplikacji
│ └── ocr_components.py # Komponenty rozpoznawania tekstu
├── models/ # Modele uczenia maszynowego
│ ├── faster_rcnn.py # Implementacja modelu Faster R-CNN
│ └── trained/ # Wytrenowane modele dla różnych komponentów
├── ui/ # Pliki definicji interfejsu (.ui)
├── output_components/ # Katalog na wycięte komponenty
├── saved_images/ # Zapisane obrazy płytek PCB
├── db_config.py # Konfiguracja bazy danych
├── main.py # Główny plik uruchomieniowy
└── requirements.txt # Lista zależności
System wykorzystuje następujące modele do detekcji komponentów:
- Kondensatory
- Układy scalone
- Diody
- Złącza USB
- Rezonatory
- Rezystory
- Przyciski
- Złącza
Wszystkie modele bazują na architekturze Faster R-CNN z detektorem cech ResNet-50 FPN. Modele zostały wytrenowane na zbiorach danych zawierających setki zdjęć płytek PCB z oznaczonymi komponentami.
Każdy model ma zdefiniowany próg pewności (confidence threshold), który można dostosować w kodzie:
self.confidence_thresholds = {
"Kondensator": 0.9,
"Uklad scalony": 0.90,
"Dioda": 0.55,
"USB": 0.8,
"Rezonator": 0.8,
"Rezystor": 0.5,
"Przycisk": 0.6,
"Zlacze": 0.75,
}Aby wytrenować własne modele:
- Przygotuj zbiór danych z oznaczonymi komponentami
- Dostosuj parametry w skrypcie trenującym
- Uruchom trening na GPU
- Zapisz model w katalogu
models/trained/
Aplikacja wykorzystuje interfejs graficzny oparty na PyQt5. Główne elementy interfejsu to:
- Panel podglądu obrazu - wyświetla obraz z kamery lub wczytany obraz
- Panel kontrolny - zawiera przyciski do sterowania analizą
- Lista komponentów - wyświetla wykryte komponenty
- Panel wyników - pokazuje statystyki i wyniki porównań
Aby uruchomić aplikację, wykonaj:
python main.py
-
Wczytanie obrazu:
- Kliknij "Wczytaj zdjęcie" aby wybrać obraz płytki PCB
- Alternatywnie użyj przycisku "Start kamery" aby wykorzystać obraz z kamery
-
Preprocessing obrazu:
- Kliknij "Preprocessing" aby wykryć i wyciąć płytkę PCB z obrazu
- System automatycznie wykryje krawędzie płytki i obróci ją do pozycji poziomej
-
Nakładanie pozycji z pliku POS:
- Kliknij przycisk "POS" aby wybrać plik CSV z pozycjami komponentów
- Wybierz tryb nakładania (punkty lub pola do porównania)
- Jeśli plik POS dotyczy spodniej strony płytki, użyj "Lustro" do odbicia pozycji
-
Analiza komponentów:
- Kliknij "Analiza" aby wykryć wybrany typ komponentu
- Alternatywnie użyj "Analizuj wszystko" aby wykryć wszystkie typy komponentów
- Wyniki zostaną wyświetlone na liście komponentów i na obrazie
-
Porównanie z POS:
- Kliknij "Porównanie komponentów" aby porównać wykryte komponenty z pozycjami POS
- System pokaże dopasowane i niedopasowane komponenty
- Kliknij na element listy aby podświetlić go na obrazie
-
Zapisywanie wyników:
- Kliknij "Zapisz" aby zapisać wyniki detekcji
- Kliknij "Zapisz porównanie" aby zapisać wyniki porównania z POS
- Wprowadź kod PCB lub zaakceptuj proponowany kod
- Praca z kamerą - NIEZOPTYMALIZOWANE W TEJ FAZIE PROJEKTU - przyciski "Start kamery" i "Stop kamery"
- Czyszczenie - przycisk "Wyczyść" resetuje stan aplikacji
- Zmiana widoku - przycisk "Pokaż preprocessing/detekcję" przełącza widok
- Odbicie lustrzane - przycisk "Lustro" odbija pozycje z pliku POS
Aplikacja wykorzystuje bazę danych MySQL do przechowywania wyników. Plik db_config.py powinien zawierać:
DB_CONFIG = {
'host': 'localhost',
'user': 'twoj_uzytkownik',
'password': 'twoje_haslo',
'database': 'aoi_database'
}System tworzy następujące tabele:
pcb_records- rekordy analizowanych płytek PCBcomponents- wykryte komponentyaoi_pcb_ins_p_bboxs_comparisons- wyniki porównań z pozycjami POS
- Upewnij się, że płytka ma wyraźny kontrast z tłem
- Użyj jasnego, jednolitego oświetlenia
- Jeśli automatyczne wykrywanie zawodzi, można użyć funkcji ręcznego przycinania
- Sprawdź czy modele zostały poprawnie załadowane
- Dostosuj progi pewności w zależności od jakości obrazu
- Upewnij się, że obraz jest ostry i dobrze oświetlony
- System EasyOCR wymaga dobrej jakości obrazu
- Małe oznaczenia na komponentach mogą być trudne do odczytania
- Spróbuj użyć różnych kątów obrotu komponentu
- Wsparcie dla większej liczby typów komponentów
- Ulepszenie rozpoznawania tekstu na komponentach
- Zoptymalizowanie możlwiości wykrywania z wykorzystaniem kamery strumieniując obraz.
Autorzy: Karolina Szczepaniak, Łukasz Skrzypiec, Kacper Popko, Marek Pichniarczyk Prowadzący: Mgr inż. Nikodem Bulanda Przedmiot: Przedswiewięcie inżynierskie Data: Maj 2025