
Camera Capture
Aplikacja desktopowa do automatyzacji fotografii produktowej dla sklepu internetowego Trixbrix. Na ekranie widać podgląd na żywo z aparatu Canon EOS M50, a jedno wciśnięcie ENTER uruchamia cały cykl: aparat robi zdjęcie, AI lokalnie usuwa tło, produkt zostaje wyśrodkowany, w rogu pojawia się logo sklepu, a gotowy plik 3000×3000 ląduje na dysku i w panelu sklepu. Cały cykl trwa około siedmiu sekund. Zobacz repo na GitHubie
Jakie problemy rozwiązuje?
- Każdy nowy produkt w sklepie potrzebuje zdjęć katalogowych - białe tło, wykadrowanie, logo. Ręczna obróbka partii produktów w Photoshopie zajmowała godziny, teraz to kwestia sekund
- Podgląd na żywo z siatką i kontrolą tła - fotograf widzi kadr przed zrobieniem zdjęcia, bez zaglądania w ekranik aparatu
- Usuwanie tła działa w całości lokalnie na CPU - bez GPU, bez płatnych chmurowych API, zdjęcia nie opuszczają komputera
- Spójny format każdego zdjęcia: wyśrodkowany produkt, stały margines, wymiar 3000×3000
- Surowe zdjęcie z aparatu zapisuje się obok przetworzonego - jeśli automat się pomyli, oryginał czeka na dysku
- Sesje zdjęciowe pobierane z panelu sklepu - wystarczy wpisać numer produktu, a zdjęcia zrobione wcześniej (nawet na innym komputerze) pojawiają się w aplikacji
- Upload prosto do panelu sklepu - galeria produktu aktualizuje się na żywo podczas sesji zdjęciowej
- Działa na macOS i Windows - na Windowsie jako gotowy plik .exe
Jak wygląda aplikacja?
Ekran startowy pokazuje wszystkie sesje zdjęciowe pogrupowane po dniach, z najnowszym zdjęciem jako okładką. Wewnątrz sesji jest podgląd na żywo z siatką, kompensacja ekspozycji i przełączniki obróbki, a na dole taśma ze zrobionymi zdjęciami. Spacja otwiera podgląd gotowego pliku na cały ekran. Kliknij zrzut, żeby go powiększyć.



Zobacz w akcji
Po lewej surowe zdjęcie prosto z matrycy aparatu, po prawej to, co aplikacja zapisuje na dysku: 3000×3000, białe tło, wyśrodkowany produkt, logo. Trzy ujęcia z jednej sesji, która trwała około 20 sekund. Kliknij zdjęcie, żeby je powiększyć.
Przed
Po






Technologie
- Python 3.12 - cały pipeline
- python-gphoto2 (macOS) i Canon EDSDK przez ctypes (Windows) - sterowanie aparatem, podgląd na żywo i pobieranie zdjęć przez USB
- pywebview - natywne okno systemowe z interfejsem w czystym HTML, CSS i JavaScripcie, bez Electrona i frameworków
- Wbudowany serwer HTTP z biblioteki standardowej - strumieniuje podgląd z aparatu jako MJPEG i obsługuje akcje interfejsu
- rembg (model u2netp) + onnxruntime - lokalne usuwanie tła przez AI
- Pillow, numpy i scipy - maski, kadrowanie, wyostrzanie, nakładanie logo
- requests + python-dotenv - upload do towarzyszącej aplikacji Rails
Jak wyglądała praca nad projektem?
Punktem wyjścia był konkretny, powtarzalny problem: każda partia nowych produktów w sklepie oznaczała sesję zdjęciową i długą, ręczną obróbkę w Photoshopie. Chciałem, żeby cała pętla - zdjęcie, obróbka, zapis - sprowadzała się do jednego klawisza. Pierwsza wersja działała w terminalu i przez kilka miesięcy w zupełności wystarczała.
Najciekawszą częścią okazało się dopracowanie masek z modelu AI. Surowa maska łapała drobne artefakty - pyłki, krawędzie tła - więc filtruję je po powierzchni. Osobnym wyzwaniem były cienie prześwitujące przez otwory w produkcie: te rozjaśniam do bieli, ale sam produkt zostawiam nietknięty. Wyostrzanie działa selektywnie tylko na produkcie, nigdy na tle - dzięki temu wokół krawędzi nie pojawia się jasna obwódka, która zdradzałaby, że tło było wycinane.
Pipeline pracuje na pełnej rozdzielczości matrycy (24 Mpix) w jednym przebiegu, z jednym finalnym skalowaniem, i działa w całości offline. Dodałem też integrację z aplikacją Rails obsługującą katalog sklepu: zaraz po naciśnięciu migawki narzędzie zgłasza nowe zdjęcie do panelu sklepu (od razu pojawia się tam miejsce na nie), a po zakończeniu obróbki wysyła gotowy plik przez API - podgląd sesji w sklepie aktualizuje się na żywo.
Kolejnym krokiem była aplikacja okienkowa. Z terminala nie było widać kadru, więc trzeba było zaglądać w ekranik aparatu, a narzędzia miały używać też osoby, które na co dzień nie pracują w konsoli. Zamiast ciężkiego frameworka postawiłem na natywne okno systemowe z interfejsem w zwykłym HTML: aparat, obróbka i ramię z aparatem pracują w wątkach Pythona, a interfejs jest po prostu stroną, którą w razie potrzeby można otworzyć nawet w przeglądarce. Przy okazji aplikacja dostała wersję na Windows, gdzie z aparatem rozmawia bezpośrednio przez oficjalne SDK Canona.
