VISIO

Ara tenim el control sobre el moviment del braç robòtic, i podem programar-lo per a fer feines repetitives.

Doncs, afegint la llibreria OPENCV, al nostre projecte, ara podem afegir al braç la capacitat de discriminar diferents formes. D’aquesta manera, podem passar de respondre de manera fixa a una entrada (necessariament igual i constant) a adaptar el moviment al tipus d’entrada que es tingui.

OPENCV, és una llibreria de programació de codi obert dirigida principalment a la visió per computador en temps real (Viquipèdia).

Nosaltres n’utilitzarem la versió CV2 amb la intenció que el braç robòtic identifiqui formes geomètriques bàsiques, les pugui referenciar visualment, i així, pugui aplicar una acció diferent segons quina sigui.

1R CODI: Aquest primer codi ens permet carregar imatges i llegir-les (cv2.imread()) de diferents maneres segons interessi (color, grayscale, unchanged). En el nostre cas la escala de grisos (grayscale) és la que ens serà útil.

Sobre aquesta imatge creada, aplicarem la funció cv2.threshold. Aquesta funció estableix un valor llindar (threshold), a partir del qual es classificaran els píxels i un valor maxim que es donarà a aquellas píxels que estiguin per sobre del llindar. Aquest valor llindar, és el que haurem d’ajustar segons les condicions de presa d’imatges que tinguem per a que resulti una millor classificació.

Amb aquesta imatge ja podrem aplicar cv2.findcontours, que unirà tots els punts d’un mateix color pel seu límit. I finalment amb cv2.aproxPolyDP aproximarem el contorn a un altre contorn amb menys vertex amb una precisió específicada. El paràmetre epsilon de la funció, ens determinarà quanta distància pot existir entre el contorn i el contorn aproximat. D’aquesta manera una epsilon més petita, ens aproximarà un contorn més detallat (amb errors inclosos). És epsilon el paràmetre que haurem d’ajustar perque la aproximació sigui adecuada.

Pel nombre de vertexs, podrem diferenciar les formes geomètriques. I usant cv2.putText escriure el tipus de figura en la imatge sortida.

2N CODI: Amb aquest segon codi, aconseguirem treballar amb imatges preses directament per la nostra càmara. Per tant, anirà abans de la creació de contorns i identificació de figures.

Iniciarem la càmara amb cv2.VideoCapture(). I començant amb (100,100,100), ajustarem els paràmetres de matiç, saturació i brillo per aplicar cv2.cvtColor amb que passarem d’una imatge RGB a una HSV (EXPLICACIÓ HSV, cv2.createtrackbar, cv2.cvtColor). Un bon ajust d’aquests valors h, s i v ens permetran una millor detecció de les figures. Doncs seran, els valors HSV de cada pixel, els que utilitzarem en l’algoritme d’enmascarament (cv2.inRange).

En el 3r codi, trobareu junt 1r i 2n codi.

4RT CODI: En el 4rt codi introduïm les dades espaials al programa per a que visualment tinguem els objectes referenciats (posicions conegudes dins d’un marc controlat en la imatge). Per això definirem amb coordenades el marc de la imatge, i el punts central de les posicions de cada peça.

Aquests punt els identificarem en la imatge (posició XY), introduïnt aquesta informació al programa.

Les posicions de les figures les guardem en un array. Mentres que amb els límits de la base crearem una matriu (np.float32[]) per poder definir la perspectiva (cv2.getPerspectiveTransform() i cv2.warpPerspective()) en que tenim situada la càmara respecte la vertical de la base.

El programa amb tot el codi unificat el pots descarregar del següent enllaç:

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out /  Canvia )

Google photo

Esteu comentant fent servir el compte Google. Log Out /  Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out /  Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out /  Canvia )

S'està connectant a %s