Wróć do projektów
Stanowisko do zdjęć produktowych: aparat Canon na statywie i laptop z uruchomionym narzędziem

Camera Capture

Python

Narzędzie do automatyzacji fotografii produktowej dla sklepu internetowego Trixbrix. Jedno wciśnięcie ENTER w terminalu: aparat Canon EOS M50 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. Cały cykl trwa około siedmiu sekund - między zdjęciami wystarczy obrócić produkt na stoliku obrotowym. 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
  • 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
  • Opcjonalny upload prosto do panelu sklepu - galeria produktu aktualizuje się na żywo podczas sesji zdjęciowej

Zobacz w akcji

Po lewej surowe zdjęcie prosto z matrycy aparatu, po prawej to, co narzędzie 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

Surowe zdjęcie produktu prosto z aparatu
Gotowe zdjęcie katalogowe z białym tłem i logo
Surowe zdjęcie produktu prosto z aparatu, drugie ujęcie
Gotowe zdjęcie katalogowe, drugie ujęcie
Surowe zdjęcie produktu pod kątem
Gotowe zdjęcie katalogowe w kadrze trzy czwarte

Technologie

  • Python 3.12 - cały pipeline
  • python-gphoto2 - sterowanie aparatem Canon i pobieranie zdjęć przez USB
  • rembg (model u2netp) + onnxruntime - lokalne usuwanie tła przez AI
  • Pillow, numpy i scipy - maski, kadrowanie, wyostrzanie, nakładanie logo
  • rich - interaktywny interfejs w terminalu
  • requests + python-dotenv - opcjonalny 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.

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. Na koniec dodałem 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.