W jednym z bieżących projektów sprawdziliśmy, jak daleko można zajść znacznie prostszymi środkami: zwykłą kamerą internetową USB, taką jak do wideokonferencji, komputerem PC i programem w Pythonie z biblioteką OpenCV, napisanym we współpracy z asystentem AI do programowania. Zadanie było konkretne – kamera obserwuje tor podajnika wibracyjnego, po którym jadą metalowe złączki, a program musi wskazać każdą źle ułożoną sztukę i uruchomić wyrzutnik, zanim detal trafi do montażu. Poniżej opisujemy, co się udało, gdzie tania kamera i AI pokazały ograniczenia i jakie liczby za tym stoją.
Czy zwykła kamera internetowa wystarczy do kontroli orientacji detali?
Zadanie nie było łatwe. Na torze podajnika wibracyjnego detale drgają, często jadą jeden przy drugim, stykając się czołami, a chromowana powierzchnia daje odblaski – na zdjęciach ze stanowiska od 2,5 do 5,3% pikseli detalu było całkowicie prześwietlonych. Pusta bieżnia ma na obrazie jasność od 67 do 132 poziomów szarości, zależnie od miejsca, czyli dokładnie w tym zakresie, w którym mieści się różnica między torem a detalem. Na stanowisku pracują cztery referencje: dwie złączki z sześciokątem na jednym końcu oraz dwie końcówki – gwintowana i stożkowa. Wspólna cecha, na której opiera się rozpoznawanie, to asymetria: jeden koniec każdego detalu jest wyraźnie szerszy. Detal ułożony szerszym końcem w złą stronę, postawiony pionowo albo odwrócony trafia do odrzutu.
Kamera internetowa poradziła sobie z tym lepiej, niż się spodziewaliśmy, pod kilkoma warunkami. Pierwszy to stałe ustawienia obrazu. Kamery konsumenckie same zmieniają ekspozycję, wzmocnienie i balans bieli, bo mają dobrze wyglądać w rozmowie wideo – w kontroli jakości to wada, bo ta sama scena raz jest jaśniejsza, raz ciemniejsza. Program wyłącza automatykę, o ile sterownik kamery na to pozwala. Drugi warunek to sprawdzenie, co kamera faktycznie widzi: w naszym przypadku rozdzielczości 1920×1080 i 1280×720 dawały to samo pole widzenia, bez przycinania, więc do obliczeń można było używać mniejszego obrazu bez utraty informacji.
Trzeci warunek wydaje się banalny, ale kosztował trochę czasu. Komputer na stanowisku ma też kamerę wbudowaną, a numeracja kamer w systemie potrafi się zmienić po ponownym podłączeniu. Program, który otwiera „kamerę numer 0”, potrafi nagle analizować obraz z kamery laptopa. Dlatego kamera otwierana jest po nazwie urządzenia, a nie po numerze.
Główne ograniczenia taniej kamery są dwa: odblaski od chromu, z którymi nie da się wiele zrobić bez zmiany oświetlenia, oraz migawka szczelinowa (rolling shutter), która przy szybkim ruchu lekko zniekształca detale. Na drgającym torze podajnika nie przeszkodziło to w rozpoznawaniu asymetrii. Takie zadania są częstym elementem automatyzacji montażu, a ogólne zasady doboru kamer i oświetlenia opisujemy w artykule Systemy wizyjne do kontroli jakości – kiedy się opłacają.
Jak AI pomogło napisać program do rozpoznawania orientacji?
Program powstał w dialogu z asystentem AI do programowania: inżynier opisywał problem, dostarczał nagrania i zdjęcia ze stanowiska, uruchamiał testy i oceniał wyniki, a asystent pisał i poprawiał kod, narzędzia pomiarowe i testy. Efektem jest program liczący ok. 3100 linii, z 29 testami automatycznymi, które sprawdzają cały tor przetwarzania na zapisanych obrazach bez podłączonej kamery i modułu wyjść. Do tego zestaw prostych skryptów dla operatora: kalibracja, uczenie tła, uruchomienie próbne i produkcyjne, test wyjścia.
Najcenniejsze okazało się to, że AI pozwala szybko budować narzędzia pomiarowe, a nie tylko sam program. Każda ważna decyzja konstrukcyjna wynikała z liczby zmierzonej na nagraniu:
- krawędź toru wykrywana w każdej klatce skakała pojedynczo nawet o 72,8 piksela; po zastąpieniu jej stałą kalibracją, ustawianą raz trzema kliknięciami, odchylenie spadło do 0,00 piksela, a czas obróbki klatki – z 26–32 ms do 11,8 ms,
- przy zmiennej jasności toru stały próg nie mógł działać; odejmowanie wyuczonego obrazu pustego toru pozwoliło poprawnie rozpoznać 293 klatki bez detali, wobec 41 przy stałym progu,
- cień na przejściu między sześciokątem a trzonem dzielił detal na dwie plamy; po zmianie progu minimalnej powierzchni z 1200 do 400 pikseli liczba poprawnie sklejonych par fragmentów wzrosła z 14 do 219,
- stykające się detale program dzieli na wszystkie możliwe odcinki o wiarygodnej długości i akceptuje wynik tylko wtedy, gdy dwa najlepsze podziały dają ten sam werdykt.
AI się jednak myli, i to w sposób przekonujący. W trakcie prac asystent ogłosił, że kamera ogranicza wydajność do 17,9 klatki na sekundę – kolejne pomiary dały 18, 48, 130 i 330 klatek na sekundę, więc wniosek był nieuprawniony. Kierunek orientacji jednej z referencji ocenił najpierw na odwrót, na podstawie oglądania nagrania; rozstrzygnął dopiero pomiar na żywo: 60 wyników ujemnych i 0 dodatnich. Skrypt uczący tło zapisywał nowy obraz przed sprawdzeniem jego poprawności i nadpisał dobre tło złym – przywrócono je z historii w systemie kontroli wersji Git. Wniosek jest prosty: AI znacząco przyspiesza pisanie kodu, ale o poprawności decydują pomiary, testy i inżynier, który zna proces. Bez repozytorium z historią zmian i testów automatycznych taka współpraca byłaby ryzykowna.
Jak program podejmuje decyzję i steruje wyrzutnikiem?
Pierwsza wersja oceniała detal na podstawie pojedynczej klatki. Skoro detal drga, a odblaski się zmieniają, ta sama sztuka raz wyglądała na poprawną, a raz na odwróconą. Teraz każdy detal jest śledzony od wejścia w pole widzenia aż do linii decyzji, a werdykt wynika z mediany asymetrii z całej trajektorii. Na nagraniu testowym odsetek poprawnych decyzji wzrósł z 27,2% do 73,8%, a dobrych detali niepotrzebnie wyrzuconych – spadł z 72,8% do 26,2%. W obu wersjach żaden źle ułożony detal nie przeszedł dalej i to jest kryterium nadrzędne.
Najważniejsze odkrycie dotyczyło kadru, a nie algorytmu. Detale jednej z referencji układały się od 10 do 70 pikseli poniżej krawędzi toru, a analizowany pas obejmował zakres od 0 do 66 pikseli. Pas „łapał” dziesięć linii jasnej krawędzi bieżni, które rozmywały różnicę między końcami detalu: średnia asymetria wynosiła 0,059, a znak wyniku był losowy – 30 pomiarów ujemnych i 30 dodatnich. Po przesunięciu pasa o 6 pikseli asymetria wzrosła do 0,227, a wszystkie 60 pomiarów miały ten sam znak. Gdy werdykty wyglądają na przypadkowe, pierwszym podejrzanym jest kadr.
Dwie zasady zostały wpisane w program na stałe:
- w razie wątpliwości detal jest wyrzucany – stan „nie wiem” traktowany jest jak NOK,
- detale przecięte krawędzią obrazu nie wywołują reakcji – 68% sylwetek za krótkich do oceny znajdowało się właśnie na brzegach, więc wcześniej powodowały niepotrzebne odrzuty.
Wyrzutnik sterowany jest z komputera przez przemysłowy moduł przekaźnikowy z interfejsem Modbus RTU (protokół komunikacji szeregowej), podłączony przez konwerter RS-485 – bez sterownika PLC pośrodku. Każdy zapis do modułu musi zostać potwierdzony odpowiedzią zwrotną, a wyjście włącza się od razu, gdy wymaga tego pierwsza klatka, i wyłącza dopiero po kilku spokojnych klatkach, żeby krótki impuls nie przepuścił detalu.
Strojenie progów to kompromis. Najlepszy dotychczasowy zestaw parametrów dawał 90,9% poprawnych decyzji i 8,1% niepotrzebnych odrzutów, ale na około 99 detali przepuścił jeden źle ułożony. Dla montażu to nie do przyjęcia, dlatego trwają prace nad wariantem, w którym pewny odrzut działa natychmiast, a wątpliwy czeka na potwierdzenie w kolejnej klatce.
Gdzie kończą się możliwości taniej kamery i kiedy dokupić sprzęt?
Słowo „AI” w kontroli wizyjnej zwykle oznacza sieci neuronowe rozpoznające obraz. Program przewiduje taki etap (model YOLO), ale na razie go nie stosujemy: w zebranym zbiorze było tylko 17 detali postawionych pionowo wobec 638 i 223 detali leżących w dwóch orientacjach – za mało do wiarygodnego uczenia. Klasyczne przetwarzanie obrazu w OpenCV przy dobrze ustawionej kalibracji daje przewidywalne wyniki i pozwala wyjaśnić każdą decyzję. AI pomogło więc przede wszystkim napisać program, a nie zastąpić go modelem.
Pomiary prześwietleń pokazały też, że część problemów rozwiązywanych w kodzie prościej rozwiązać sprzętem. W kolejności od największego efektu:
- polaryzacja skrzyżowana – filtr polaryzacyjny na obiektywie i na oświetlaczu, ok. 40 euro, najskuteczniejszy sposób na odblaski od chromu,
- matowe czarne tło na odcinku ok. 150 mm za strefą inspekcji,
- oświetlenie rozproszone, uzupełnione światłem bocznym wzdłuż kierunku ruchu, które pogłębia szczelinę między stykającymi się detalami,
- kamera ustawiona prostopadle do toru,
- kamera przemysłowa z migawką globalną (global shutter) i ręcznie ustawianą ekspozycją – przy produkcji wielozmianowej to wydatek, który się broni.
Najskuteczniejsza jest jednak mechanika: separator, który rozsuwa detale przed strefą inspekcji, usuwa najtrudniejszą część zadania – dzielenie stykających się sylwetek.
Zwykła kamera internetowa i asystent AI wystarczyły, żeby w krótkim czasie zbudować działający prototyp, zebrać dane i podjąć decyzje na podstawie pomiarów, a nie przeczuć. Pozwalają też szybko sprawdzić, czy kontrola wizyjna w danym miejscu w ogóle ma sens, zanim zainwestuje się w drogi sprzęt. Do pracy produkcyjnej kamera i oświetlenie zwykle i tak zostaną wymienione na przemysłowe – ale program, narzędzia pomiarowe i zebrane nagrania pozostaną.
Najczęściej zadawane pytania
Czy kamera do wideokonferencji nadaje się do kontroli jakości w produkcji?
Do prototypu, zbierania nagrań i prostych zadań – tak, pod warunkiem wyłączenia automatyki ekspozycji i balansu bieli oraz stałego mocowania. Do pracy wielozmianowej zalecamy kamerę przemysłową z migawką globalną i ręcznymi ustawieniami, bo kamery konsumenckie nie gwarantują stałych parametrów obrazu ani dostępności tego samego modelu za kilka lat.
Czy AI samo napisze program do systemu wizyjnego?
Napisze dużą część kodu, ale nie zastąpi inżyniera. W naszym projekcie asystent kilka razy wyciągnął błędne wnioski – o wydajności kamery czy kierunku orientacji detalu – które wychwyciły dopiero pomiary. Potrzebne są nagrania z rzeczywistego stanowiska, testy automatyczne, kontrola wersji i ktoś, kto rozumie proces.
Czy do rozpoznawania orientacji potrzebne są sieci neuronowe?
Nie zawsze. Jeśli detal ma wyraźną cechę geometryczną, np. szerszy koniec, klasyczne przetwarzanie obrazu w OpenCV wystarcza i jest łatwiejsze do sprawdzenia. Sieci neuronowe mają sens przy cechach trudnych do opisania regułami, ale wymagają setek oznaczonych przykładów każdej sytuacji, także rzadkich.
Jak szybko działa taki system na zwykłym komputerze?
Przetworzenie jednej klatki zajmuje ok. 12 ms na typowym komputerze PC, więc obliczenia nie ograniczają wydajności stanowiska. Ważniejsze jest to, ile klatek obejmuje przejazd detalu przez pole widzenia, bo decyzja zapada na podstawie całej trajektorii.
Co trzeba zrobić, żeby dodać nową referencję detalu?
Trzeba zmierzyć długość detalu i jego szerszy koniec, zapisać je jako nowy profil i nagrać kilka minut pracy podajnika z tą referencją – w normalnym ruchu, z detalami celowo odwróconymi i jadącymi w paczkach. Na tej podstawie ustawia się progi i sprawdza odsetek odrzutów, zanim referencja trafi do produkcji.






