Pa si poglejmo eno od področij, ki izgleda ponuja rešitve za vsak nov izdelek. Gre za strojni vid.
Avtor: Boštjan Šuhel
E-pošta: bostjan.suhel@gmail.com
2022-306-44
Opencv (Vir:1) je skupek metod za delo s slikami in posnetki. Na TŠC Maribor imamo prvo vzorčno učilnico, ki temelji na kartičnih računalnikih (Vir:2). Pri prodaji blizu 50 Mkosov in trenutnem pomanjkanju, kljub polni proizvodnji v treh tovarnah, nas mora razveseliti. Gre za kos strojne opreme ki po znanem Spectrumu (Vir:3) zastopa barve Evrope v svetu. Od pred kratkim imamo Raspberry PI OS (Vir:4), ob bok Android, Linux, Apple, Windows OS. Tehnično gre za uporabo v pametnih telefonih razvitih čipih, nadgrajenih za kartične računalnike in druge industrijske razvoje (Vir:5). Za nas tehnične navdušence je to samo združevanje procesorja, grafične kartice in IO elektronike na eni silicijevi rezini. Niti delavnega pomnilnika še niso spravili na isto rezino. Pa kljub vsemu je ravno to združevanje in izključna uporaba CMOS (Vir:6) tehnologije prva bojna črta tehnološke revolucije. OK, morda moram omeniti še LiPo akumulatorje in to je to. Novi boljši parametri znanih tehnologij pa takšen napredek. Dnevno se pojavljajo novi izdelki (oz. vsaj ideje o novih izdelkih). Pojavljajo se tudi super uspešni izdelki , ki izgleda tako spreminjajo celotno civilizacijo. Pametni telefoni počnejo z nami to, kar si niso v svojih literarnih delih zamislili naj pisci znanstvene fantastike. Spremembe na bolje se obetajo tudi na področju industrije, pametne instalacije (ukinjanje signalnih linij), krmilni elementi v napravah, izumiranje mehanskih stikal, kontaktorjev in varovalk npr.
Ta vsebina je samo za naročnike
01_Prikaz_slike.py
Na slovenski izdaji imamo nameščene vse knjižnice, potrebne za delovanje strojnega vida. Opencv je samo eden od projektov strojnega vida, ki se je začel okoli 2015 in izgleda zmaguje.
Na /home/pi/Documents/Python/opencv imamo šolske vaje, nekatere so preverjene pri delu v razredu, nekatere še bodo. To so vaje za Gcc (C jezik), Python (tolmač), SmatSim in Wolfran Mathematica. Gre za drugo veliko skupino programov slovenske izdaje. Izkoriščamo odprtokodne zastonj vrhunske programske produkte.
import cv2,glob datoteke = glob.glob ('slike/*.jpg') for datoteka in datoteke: slika=cv2.imread(datoteka) cv2.imshow(datoteka, slika) cv2.waitKey(0) #čaka na katero koli tipko cv2.destroyAllWindows()
Slika 2: Program 01_Prikaz_slike.py
Predvsem je značilno, da slovenska izdaja ne potrebuje nobene licence.
V mapi python imamo, poleg tu že predstavljenih vaj, tudi mapo opencv s trenutno 19 vajami. Ta številka se spreminja s približno vajo na dva dni.
V mapi opencv imamo mapo slike. V to mapo zapišemo slike :). Zaenkrat imamo na mapi opencv posnetek.mp4. Gre za posnetek v mp4 zapisu. To je kar se tiče podatkov. Že iz tega vidimo, da se bomo ukvarjali s slikami in posnetki.
Prva vrstiva import cv2,glob napove uporabo knjižnic. Druga vrstica datoteke = glob.glob(‘slike/*.jpg’) shrani v tabelo datoteke relativne naslove datotek v podmapi slike s končnico *.jpg. Torej glob knjižnica nam pomaga preiskovati podatkovno drevo. Na začetku malo težko, vendar bomo hitro ugotovili, da so python programi zelo pregledni in logični:).
For datoteka: je prikaz poenostavljenega zapisa zanke v pythonu. Zanka izvede vse elemente tabele datoteke. Znotraj zanke imamo slika=cv2.imread (datoteka), ki prebere sliko v mapi slike. Drugi ukaz cv2.imshow (datoteka,slika) odpre okno s sliko in vodilnim tekstom datoteka, kar pomeni, da se izpiše datotečni naslov skupaj z imenom slike na vsako okno posebej. Zunaj zanke imamo ukaz cv2,waitKey(0) ki čaka na katero koli akcijo tipkovnice. Ko pritisnemo karkoli nam ukaz cv2.DestroyAllWindows() zapre vsa odprta okna in konča program 🙂
02_Zajem_slike.py
Sedaj potrebujemo bodisiRaspberry PI kamero, ki je v opuščanju ali bolje katero koli USB web kamero. Za preverjanje zaznave kamere uporabite ukaz lsusb. Doma sem našel štiri USB kamere od super starih (prastar USB mikroskop) do super modernih (USBFPV sprejemnik za 150 kanalov) in ne boste verjeli: vse kamere so delovale takoj. Program 02_Zajem_slike.py se priklopi na kamero in kot živo sliko prikazuje v oknu kar USB kamera pač snema. Vodilni napis okna je navodilo Presledek – zajem, ESC – konec, b – izbris. Če pritisnemo presledek se trenutna slika zapiše pod slike/slika_0.jpg. Ko pritisnemo presledek naslednjič zapišemo sliko pod slike/slika_1.jpg in tako naprej dokler ne pritisnemo ESC, ko se program konča. Če si vmes premislimo lahko s pritiskom na b zbrišemo vse slike in začnemo ponovno zapisovati slike pri slike/slika_0.jpg.
import cv2,os,glob,numpy,imutils kamera = cv2.VideoCapture(0);slik=0 if not kamera.isOpened(): print(»Ni kamere«);exit() else: kamera.set(cv2.CAP_PROP_FRAME_WIDTH, 640) kamera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) while True: vrne, slika = kamera.read() if not vrne: print(»Ne sprejmem slike, konec posnetka?«) break slika = imutils.resize(slika, width=480, height=360) h, w, l = slika.shape;rezolucija = (w,h) cv2.imshow('Presledek - zajem, ESC - konec, b - izbris', slika) k = cv2.waitKey(1) if k%256 == 27:#ESC - konec print(»Konec slikanja«) break elif k%256 == 32:#Presledek - vpis pot = »slike/«+«slika_{}.jpg«.format(slik) cv2.imwrite(pot, slika) print(»{} zapisano!«.format(pot));slik += 1 if k%256 == 98:#b - izbris print(»Vse slike izbrisane«);datoteke = glob.glob('slike/*.jpg');slik=0 for datoteka in datoteke: os.remove(datoteka) cv2.destroyAllWindows() print('Rezolucija'+str(rezolucija)) print('Slik '+str(slik))
Opisujem vedno v razredu preverjene vaje. To priporočam tudi drugim. Gre za poseben brain washing, kjer se pokažejo napake in jih s skupnimi močmi odpravimo. Tudi zajem samo ene slike in samo enega posnetka, se je v primeru slik pokazalo kot napaka, zato imamo posebno mapo slike in znotraj poljubno število oštevilčenih slik. Zna se pokazati, da je samo en posnetek premalo. To se do 19. vaje še ni zgodilo, če se bo to zgodilo, bomo pač popravljali vse vaje za nazaj.
Naslednjič
Pogledali si bomo zajem slik iz IP kamere. Pomembna metoda, še posebej v teh začetnih korakih v svet strojnega vida, ker nimamo dovolj USB kamer. V IP kamero lahko spremenimo vsak pametni telefon. Uporabimo aplikacijo IP webcam in to je to. Čaka nas prikaz posnetka in zopet zajem posnetka s pomočjo USB kamere in IP kamere. Kako se stvari logično odvijajo, ko si postavimo pot. Do takrat poizkusite kupit kartični računalnik, namestite si slovensko izdajo in poizkusite slediti članku v živo. Vse bomo počeli, zaznavali obraze, izrisovali meje objektov, sledili obrazu, prepoznavali obraze in merili razdalje od kamere do objektov. Tudi so to že vaje, ki ne uporabljajo preštevilne izpeljane knjižnice, ki sicer uporabljajo CV2 knjižnico, vendar poizkusijo skriti kako originalno metoda za knjižnico. Take poskuse sem rešil z lastnimi in odprtimi rešitvami v slovenski izdaji. Pa seveda kakršno koli genialno rešitev od vas spoštovani bralci bomo objavili in upoštevali z imenom in priimkom, jasno. Berite Svet elektrotehnike in boste v koraku (oziroma kak korak v prednosti) z napredkom.
Viri:
https://www.raspberrypi.org/
https://sl.wikipedia.org/wiki/ZX_Spectrum
https://www.raspberrypi.com/software/
https://www.raspberrypi.com/documentation/computers/processors.html
https://en.wikipedia.org/wiki/CMOS