Opencv raspberry pi instalacija. Instalacija OpenCV (Linux)

10.09.2021

Nedavno, tokom realizacije jednog od projekata koji se odnosi na prepoznavanje slika, imali smo potrebu da instaliramo OpenCV biblioteku kompjuterskog vida na Raspberry PB2 mikroračunar sa jednom pločom.

Nakon što smo pretražili internet i proveli neko vrijeme na eksperimentima, uspješno smo riješili ovaj problem. Rezultat je mala instrukcija koju rado dijelimo sa svima koji odluče koristiti OpenCV na Raspberryju.

Dakle: instaliranje OpenCV-a:

U primjeru koristimo opencv verziju 2.4.9.

Prvo moramo ažurirati naš sistem:

sudo apt-dobi ažuriranje sudo apt-get upgrade

Sada moramo instalirati dodatne biblioteke:

sudo apt-get -y install build-essential cmake cmake-curses-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libpng04 igen3-dev sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgdevine-mpegx1 libgdevine-mpegx1 bin libunicap2 libunicap2-dev swig libv4l-0 libv4l-dev python-numpy libpython2.6 python-dev python2.6-dev libgtk2.0-dev swig libv4l-0 libv4l-dev libswscale-dev v4l-2.6 -0 libgtk2.0-dev pkg-config libxvidcore-dev libx264-dev libavcodec-dev libavformat-dev libqt4-dev libqt4-opengl-dev libjasper-dev

Nakon što smo završili sa instalacijom biblioteka, prelazimo na instalaciju OpenCV-a. Tokom instalacije može doći do situacije u kojoj možda neće postojati neka biblioteka za vaš sistem i morat ćete pogledati šta nedostaje i dodatno isporučiti.

Kreirajmo folder u koji ćemo preuzeti našu arhivu:

mkdir~/opt/opencv/cd ~/opt/opencv wget-O openCV-2.4.9.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip/download

Sada treba da raspakujemo našu arhivu. Za ovo koristimo naredbu:

raspakujte openCV-2.4.9.zip

Kao rezultat, kreiraćemo fasciklu openCV-2.4.9. Idite na njega i kreirajte folder za izdanje

CD openCV-2.4.9 mkdir pustiti CD pustiti

Vrijeme je da konfigurišete OpenCV. Ako vam nisu potrebna podešavanja treće strane, onda možete koristiti zadanu konfiguraciju (da biste to učinili, samo pritisnite tipku "c"). Kada pokrenete ccmake, pojavit će se lista postavki koje možete odrediti (kao što je prikazano na slici ispod)

I tako da počnemo:

ccmake ../

(Pritisnite "c" ako je konfiguracija keša prazna)

Pritisnite tipku "c".

Kada se instalacija završi, ponovo pritisnite tipku “c” da nastavite i tipku “g” da generišete makefile.

Sada je sve konfigurisano i sve što treba da uradite je da kliknete na napravi. Ovaj proces će u prosjeku trajati oko 10 sati.

napraviti sudo napravi instalaciju

Ovim je instalacija završena. Ostaje samo provjeriti funkcionalnost.

Kreirajte datoteku main.cpp

#include #include korištenje imenskog prostora cv; int main(int argc, char** argv) ( if (argc != 2) ( printf("usage: n"); return -1; ) Mat slika; image = imread(argv, 1); if (!image.data) ( printf("Nema podataka slike n"); return -1; ) imshow("Prikaži sliku" , slika); čekajKey(0); vrati 0; )

Sada morate kreirati datoteku CMakeLists.txt i u nju unijeti sljedeće:

Cmake_minimum_required(VERSION 2.8) project(DisplayImage) find_package(OpenCV REQUIRED) add_executable(DisplayImage main.cpp) target_link_libraries(DisplayImage $(OpenCV_LIBS))

Sve što treba da uradimo je da kompajliramo i pokrenemo

cmake . napraviti

Hajdemo

./DisplayImage path_to_photo.jpg

Ako je sve prošlo dobro, tada ćemo kao rezultat vidjeti sliku koju ste naveli u parametru putanje datoteke.

Leonid, programer u Sidstudio

Jedno vrijeme sam bio zainteresiran za sklapanje robotskih automobila koristeći Arduino i Raspberry Pi. Voleo sam da se igram sa konstrukcionim setom, ali sam želeo nešto više.

I jednog dana, lutajući Aliexpressom, naišao sam na aluminijumsku šasiju za tenk. Ova kreacija je u poređenju sa plastičnim automobilima izgledala kao Ferrari u poređenju sa kolicima.

Dao sam sebi poklon za Nova godina, tenk je stigao, sastavljen i onda ga je trebalo oživljavati. Uklonio sam sam Raspberry, pretvarač struje, kontroler motora i bateriju iz mašine. Sve je to bilo ugrađeno na rezervoar i radilo je sretno.

Tenk mora pucati, a sljedeći korak je bila pojava kamere. Nisam mogao pogoditi sa kućištem kamere - kada je bilo otvoreno nije držalo kameru, ali kada se zalupilo bilo je toliko čvrsto da je sočivo kamere odletjelo. Nakon patnje, jednostavno sam zalijepio kameru izolacijskom trakom za poklopac kućišta. Sada tenk nije mogao samo da se vozi po prostoriji, već i da fotografiše.

Vrijedi napomenuti ozbiljnu prednost tenka u odnosu na automobile kod kuće - na gusjeničnoj gusjenici nije bitno hoće li se voziti po tvrdom podu ili po tepihu. Vozila na točkovima klize po mekom tepihu do te mere da se ne mogu okrenuti.

Zatim sam htio razviti tenk u smjeru autonomne navigacije, oslanjajući se na fotografije s kamere. Morao sam zaroniti u svijet kompjuterskog vida i otkriti OpenCV. Sve je počelo sa prepoznavanjem boja i kontura - odštampao sam crveni krug na papir, zalijepio ga na TV i prisilio robota da se okreće dok se krug ne pronađe.

Ideja je bila da se uočljivi objekti u prostoriji (sofa, TV, sto) obeleže raznobojnim krugovima i nauči robot da se kreće po bojama.

Koristeći OpenCV, pretražene su konture željene boje (sa prihvatljivom tolerancijom), zatim je pretraživan krug među konturama.

Činilo se da bi glavni problem mogao biti nasumični krug željene boje na jednom od objekata.

Međutim, ispostavilo se da je glavni problem to što boja izgleda vrlo promjenjivo ovisno o osvjetljenju, pa je raspon u kojem se crvena (na primjer) prepoznavala morao biti rastegnut na nijanse koje vrlo nejasno podsjećaju na originalnu boju. Ili odaberite željenu boju sa slike, ali u svakom slučaju nije bila crvena, već smeđa nijansa.

Potražite crveni krug:

Uvezi cv2 import numpy kao np import sys def mask_color(img, c1, c2): img = cv2.medianBlur(img, 5) hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv,hsv c2) maska ​​= cv2.erode(mask, None, iterations=2) mask = cv2.dilate(mask, None, iterations=2) return maska ​​def find_contours(img): siva = cv2.cvtColor(img, cv2.COLOR_BGR2GREY) blurred = cv2.GaussianBlur(siva, (5, 5), 0) thresh = cv2.threshold(blurred, 30, 255, cv2.THRESH_BINARY) thresh = cv2.bitwise_not(thresh) im2, cnts, hier. thresh, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) cp_img = img.copy() cv2.drawContours(cp_img, cnts, -1, (0,255,0), 3) return cp_img def find_circles(img.cv2): img, cv2.COLOR_BGR2GREY) zamućeno = cv2.medianBlur(siva,5) krugovi = cv2.HoughCircles(zamagljeno,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadijus=0,0x) img ako krugovi nisu Ništa: krugovi = np.uint16(np.around(krugovi)) za i u krugovima: cv2.circle(img,(i,i),i,(255,0,0),2) cv2 .circle(img,(i,i),2,(0,0,255),3) print "C", i,i,i vraćam cimg def find_circle(img, rgb): tolerancija = 4 hsv = cv2.cvtColor( rgb, cv2.COLOR_BGR2HSV) H = hsv c1 = (H - tolerancija, 100, 100) c2 = (H + tolerancija, 255, 255) c_mask = mask_color(img, c1, c2) rgb = cv2.cvtColor(cv2_mask,clor .COLOR_GRAY2RGB) cont_img = find_contours(rgb) circ_img = find_circles(cont_img) cv2.imshow("Image", circ_img) cv2.waitKey(0) if __name__ == "__main_name__": img c img c img. img_name) rgb = np.uint8([[]]) find_circle(img, rgb)
Prepoznavanje boja počelo je da dolazi u ćorsokak, pažnju su mi odvukle Haarske kaskade, koristeći rezervoar za fotografisanje mačke. Mačka se dobro maskirala, uzrokujući da kaskada polovinu vremena pravi greške (ako neko ne zna, OpenCV dolazi sa Haar kaskadom posebno obučenom za mačke - uzmi je i koristi).

Lov na mačku imao je korisne posljedice za robota - pošto nije uvijek bilo moguće uhvatiti objekt lova u statičnu kameru, ugradio sam stativ sa dva servomotora (i PWM modul za upravljanje njima preko Raspberry-a).

Nastavljajući istraživanje o tome šta se može istisnuti iz fotografija sobe, prirodno sam došao do neuronskih mreža. Nakon što sam progutao Tensorflow tutorijal, obradio sam ga foto detektorom rezervoara i rezultati su bili obećavajući - televizor, sto, sofa, mačka i frižider su nepogrešivo prepoznati.

Ovi eksperimenti su izvedeni na kompjuteru, a preostalo je samo prebacivanje TF-a na Raspberry Pi. Srećom, postoji jedinstvena osoba koja živi na Githubu, koja je bila strpljiva i probila se kroz instaliranje svih ovisnosti i mnogo sati vremena kompilacije - i to objavila na opšti pristup sastavio Tensorflow za Raspberry Pi.

Međutim, dalje proučavanje teme otkrilo je da OpenCV ne miruje i da su njegovi saradnici objavili DNN (Deep Neural Networks) modul koji nudi integraciju sa neuronskim mrežama obučenim na TensorFlow-u. Ovo rješenje je mnogo pogodnije za razvoj, plus nema potrebe za samim TF-om. Morao sam da napravim malo magije, pošto najnovija verzija mobilne SSD neuronske mreže za TF više nije bila prihvaćena od strane najnovije verzije OpenCV-a. Morao sam pogledati
i provjerite radnu verziju Mobile SSD-a. Plus, DNN radi normalno samo pod OpenCV 3.4, a ja nisam našao ovu verziju za Raspberry. Morao sam ga sam sastaviti, jer je to mnogo lakše nego petljati oko TensorFlow-a. Istovremeno, nije bilo moguće kompajlirati OpenCV za najnoviju verziju Raspbian-a (Stretch), ali na najnoviju verziju prethodna generacija(Jessie) sve je krenulo kako treba.

Primjer koda koji koristi DNN i ne koristi Tensorflow.

Nekoliko datoteka odgovornih za nazive objekata je izvučeno iz TF-a i uklonjena je ovisnost o samom TF-u (bilo je samo čitanje iz datoteke).
Izvorni kod na GitHubu.

Uvezi cv2 kao cv import tf_labels import sys DNN_PATH = "--path-to:ssd_mobilenet_v1_coco_11_06_2017/frozen_inference_graph.pb" DNN_TXT_PATH = "--path-to:ssd_mobilenet"ScothpAv: mscoco_label_ map.pbtxt" tf_labels.initLabels(PATH_TO_LABELS) cvNet = cv.dnn.readNetFromTensorflow(pb_path, pb_txt) img = cv.imread(sys.argv) rows = img.shape cols = img.shape in cvNet.g.set. 1.0/127.5, (300, 300), (127.5, 127.5, 127.5), swapRB=True, crop=False)) cvOut = cvNet.forward() za detekciju u cvOut: rezultat = float(detekcija) ako rezultat: > 0. lijevo = int(detekcija * kolone) gore = int(detekcija * redovi) desno = int(detekcija * kolone) dolje = int(detekcija * redovi) label = tf_labels.getLabel(int(detekcija)) print(oznaka, rezultat, lijevo , gore, desno, dolje) text_color = (23, 230, 210) cv.rectangle(img, (lijevo, gore), (desno, dolje), text_color, debljina=2) cv.putText(img, label, (lijevo , vrh), cv.FONT_HERSHEY_SIMPLEX, 1, boja_ teksta, 2) cv.imshow("img", img) cv.waitKey()
Generalno, fotografije tenkova sada se mogu prepoznati putem neuronske mreže, a ovo je vrlo važan korak u navigaciji u smislu prepoznavanja orijentira. Međutim, same slike nisu bile dovoljne za potpunu navigaciju, bilo je potrebno izmjeriti udaljenosti do prepreka. Ovako je robot dobio ehosonder. Da biste spojili ribar na Raspberry, morate malo poraditi - ribar vraća signal na 5V, a Raspberry prima 3.3V. Na koljenu, ovaj problem se uglavnom rješava otpornicima na matičnoj ploči, ali nisam htio dizati toliku galamu na robotu. Kao rezultat, pronađen je čip Level Shifter, koji radi sve što je potrebno, a veličine je nokta.

Osim toga, zabrinut sam izgled robot - Nije mi se baš svidjelo što su mikrokrugovi i kamera sa eho sondom zalijepljeni za karton. Razvoj tehnologije u našem svijetu omogućava nam rezanje plastike laserom uz razumnu cijenu vremena i novca. Općenito, pronašao sam radionicu s laserskom mašinom, proveo malo vremena proučavajući upute za ovu divnu mašinu, a ne iz prvog pokušaja, izrezao sam ploče za mikro krugove i kameru sa eho sondom.

Sve je spremno za autonomnu navigaciju, ali se pokazalo da zadatak nije tako jednostavan i pri prvom pokušaju sam se malo izgubio. Odlučio sam da napravim pauzu, razmislim o svemu i proučim analoge. Možda će ova navigacija poslužiti kao tema za poseban članak.

REST interfejs koji robot pruža kao osnovu za dalju upotrebu:

GET /ping GET /verzija GET /name GET /dist POST /fwd/on POST /fwd/off POST /back/on POST /back/off POST /left/on POST /left/off POST /desno/on POST /desno /off POST /photo/make GET /photo/:phid GET /photo/list POST /cam/up POST /cam/down POST /cam/right POST /cam/left POST /detect/haar/:phid POST /detect/ dnn/:phid

Zaštitite svoje grudi od znatiželjnih očiju bez pamćenja kombinacije kodova ili korištenja ključa. Vaše lice će poslužiti kao ključ za otvaranje škrinje!

IN ovaj projekat pokazuje kako koristiti Raspberry Pi mikrokompjuter i Pi kameru za otvaranje škrinje koristeći tehnologiju prepoznavanja lica.

Softverski dio ovog projekta baziran je na algoritmu koji je predstavljen u biblioteci kompjuterskog vida OpenCV. Raspberry Pi je idealna platforma za ovaj projekat jer ima dovoljno procesorske snage za pokretanje OpenCV-a i male je veličine tako da može stati bilo gdje.

Ovaj projekat je srednje složenosti. Kompilira i instalira softver na Raspberry Pi mikroračunaru. Ako imate iskustva u kreiranju sličnih stvari i nemate problema s korištenjem komandne linije, onda ste potpuno spremni proći kroz sve korake ovog projekta. Također se možete obratiti na pomoćne materijale za sistem učenja Adafruit ako naiđete na bilo kakve probleme.

Korak #1: Priprema škrinje

  • Izbušite rupu od 7/16" na vrhu sanduka da umetnete Pi kameru.
  • Izbušite veću rupu na stražnjoj strani sanduka kako biste umetnuli dugme i kablove za napajanje.

Korak #2: Izrada reze

  • Ugradite iglu na prednju stranu sanduka koja će biti uhvaćena rezom kada se servo okrene.
  • Napravite mali okvir za podršku Pi i servo reze. Servo je pričvršćen na okvir pomoću drvene ploče i vijaka sa prorezima.
  • Napravite rezu od dva komada drveta zalijepljena pod pravim uglom i pričvršćena na servo ruku.

Korak #3: Završavanje sanduka

  • Provjerite da li okvir, Pi i kvaka na vrhu sanduka ostvaruju pravilan kontakt. Uvjerite se da se servo zasun rotira prema dolje i da zakači klin unutar prednjeg dijela sanduka.
  • Ugradite igle koje prolaze kroz vrh sanduka da podupru okvir.
  • Uklonite nedostatke na sanduku pomoću rašpe i brusnog papira, a zatim obojite drvenu površinu po želji.

Korak #4: Povezivanje elektronskih komponenti

  • Povežite liniju servo signala na GPIO pin 18 na Raspberry Pi. Napajanje i uzemljenje za servo moraju biti spojeni na terminale za napajanje baterije.
  • Spojite jedan pin dugmeta na Pi-ov GPIO 25 pin, a kroz otpornik od 10k oma na Pi-ov napon napajanja od 3.3V. Povežite drugi pin dugmeta na pin za uzemljenje Pi.
  • Spojite vodove uzemljenja baterije i Pi zajedno.
  • Montirajte Pi kameru kroz rupu na vrhu sanduka i spojite kabl na Pi mikroračunar.

Korak #5: Prevođenje OpenCV-a

  • U ovom trenutku morate instalirati najnoviju verziju OpenCV-a na svoj Raspberry Pi. Nažalost, prvo morate kompajlirati OpenCV iz izvora, budući da stara binarna verzija ne sadrži algoritme za prepoznavanje lica korištene u projektu. Prevođenje OpenCV-a na Pi traje oko 5 sati.
  • Uključite Pi i povežite se s njim kroz terminalsku sesiju.
  • Pokrenite sljedeće naredbe da instalirate OpenCV ovisnosti:

sudo apt-get update && sudo apt-get install build-essential cmake pkg-config python-dev libgtk2.0-dev libgtk2.0 zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libjasper-dev libavcodec-dev swig

  • Pokrenite sljedeće naredbe da preuzmete i raspakujete izvorni kod za najnoviju verziju OpenCV-a:

wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.7/opencv-2.4.7.tar.gz && tar zxvf opencv-2.4.7.tar.gz

  • Pokrenite sljedeće naredbe da se pripremite za kompajliranje OpenCV izvornog koda:

cd opencv-2.4.7 && cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_PERF_TESTS=ISKLJUČENO -DBUILD_opencv_gpu=ISKLJUČENO -DBUILD_opencv_ocl=ISKLJUČENO

  • Izvrši ovu naredbu da pokrenete OpenCV kompilaciju (imajte na umu da kompilacija traje oko 5 sati):
  • Kada OpenCV završi kompajliranje, pokrenite ovu naredbu da instalirate Pi:

Korak #6: Testirajte prepoznavanje lica

  • U ovoj fazi ćemo testirati algoritme za prepoznavanje lica koji će vam omogućiti da otvorite kovčeg.
  • Preuzmite softver za ovaj projekat iz github repozitorija (fusnota: https://github.com/tdicola/pi-facerec-box).
  • Raspakujte arhivu i kopirajte sadržaj u direktorijum na Pi.
  • Tokom terminalske sesije na Pi, pregledajte direktorij i pokrenite sljedeću naredbu da pokrenete test skriptu:

sudo python capture-positives.py

  • Dok je skripta pokrenuta, možete pritisnuti dugme koje se nalazi na grudima da biste snimili fotografije koristeći Pi kameru. Skripta će pokušati identificirati jedno lice na snimljenoj slici i sačuvati ga kao pravilno snimljeni okvir u poddirektorijumu ./training/positive.
  • Svaki put kada se slika snima, okvir se upisuje u datoteku capture.pgm. Možete ga pogledati na grafički editor da odredite kako Pi kamera snima i određuje sliku vašeg lica.
  • Koristite dugme da snimite 5 ili više slika vašeg lica kako biste dobili prave rezultate. Pokušajte da dobijete slike iz različitih uglova, različitog osvetljenja itd. Na fotografijama možete vidjeti slike lica koje sam dobio.
  • Ako ste zainteresirani, možete provjeriti direktorij ./training/negative, u kojem se nalaze slike iz AT&T-ove baze podataka za prepoznavanje lica koje se mogu koristiti kao primjeri ljudi koji ne bi trebali imati pristup otvaranju škrinje.
  • Nakon što primite ispravne slike, pokrenite sljedeće naredbe da obradite ispravne i netačne probne slike i da testirate algoritam za prepoznavanje lica (imajte na umu da ova probna operacija traje oko 10 minuta):

python train.py

Korak #7: Servo konfiguracija

  • U ovoj fazi potrebno je odrediti širine servo impulsa za zaključavanje i otključavanje zasuna.
  • Sa napajanjem na mikroračunaru Raspberry Pi i servo zasunom, povežite se na Pi u terminalskoj sesiji. Uvjerite se da je sanduk otvoren tako da možete vidjeti kako se servo kreće bez zaglavljivanja.
  • Pokrenite sljedeću naredbu da pokrenete interaktivnu Python sesiju kao root (morate imati pristup GPIO pinovima i mogućnost pomjeranja servo):

sudo python

  • IN komandna linija Python >>>, unesite ovu naredbu da učitate RPIO servo biblioteku:

iz RPIO import PWM

  • Zatim unesite sljedeću naredbu:

servo = PWM.Servo()

  • Konačno, pokrenite ovu naredbu da premjestite servo rezu u središnji položaj:

servo.set_servo(18, 1500)

  • Parametar 1500 za set_servo definira širinu impulsa za pogon u mikrosekundama. Ekstremne vrijednosti se kreću od 1000 do 2000.
  • Isprobajte funkciju set_servo s različitim širinama impulsa dok ne dobijete vrijednosti koje uzrokuju da se zasun pravilno zatvori i otvori, kao što je prikazano na fotografijama.
  • Ne zaboravite da možete ukloniti servo klackalicu i ponovo je pričvrstiti kako biste pravilno orijentirali rezu na servo.
  • Nakon što pogodite vrijednosti, otvorite config.py u uređivač teksta sa pravima superkorisnika i promijenite sljedeće vrijednosti:
  • Postavite LOCK_SERVO_UNLOCKED jednako vrijednosti širine impulsa za otključavanje položaja zasuna - otključavanje. Na mom hardveru prava vrijednost je 2000.
  • Postavite LOCK_SERVO_LOCKED da odredite da li je položaj zasuna zaključan - zaključan. U mom slučaju ova vrijednost je 1100.

Korak #8: Pokrenite softver

  • Nakon što provjerite prepoznavanje lica i kalibrirate servo, možete pokrenuti programski kod!
  • Sa napajanjem na mikroračunaru Raspberry Pi i servo zasunom, povežite se na Pi u terminalskoj sesiji i pretražite korijenski direktorij projekta.
  • Pokrenite sljedeću naredbu da pokrenete kod (budite oprezni jer će odmah zaključati škrinju):

sudo python box.py

  • Nakon preuzimanja testnih podataka (ovo traje nekoliko minuta), usmjerite kameru na svoje lice i pritisnite dugme da pokušate prepoznavanje lica.
  • Ako sanduk prepozna vaše lice, servo će raditi i otključati bravu. Ako vaše lice nije prepoznato, terminal će prikazati poruku koja pokazuje koliko je vaše lice bilo blizu probne slike.
  • Da biste prepoznali lice, potrebno je da snimljena slika odgovara probnoj slici sa nivoom pouzdanosti od 2000 ili manje. Ako se vaše lice podudara s podacima uzorka slike, ali je pouzdanost niska, možete promijeniti prag pouzdanosti u config.py (pod postavkom POSITIVE_THRESHOLD). Ako prepoznavanje i dalje nije pouzdano, otpremite prikladnije snimljene slike i ponovo pokrenite test prepoznavanja. Algoritam za prepoznavanje lica u ovom projektu u velikoj mjeri ovisi o osvjetljenju lica, pa pokušajte imati isti izvor svjetla kao u vašim probnim pokušajima (ili dodajte nekoliko dodatnih slika pod različitim uvjetima osvjetljenja).
  • Nakon otvaranja sanduka, ponovo pritisnite dugme da ga zatvorite. Za ovo nije potrebna operacija prepoznavanja lica.
  • Ako škrinja ima problema s otvaranjem i ne prepoznaje vaše lice, slijedite korake konfiguracije servoa da ručno pomaknete servo u položaj za otključavanje pomoću naredbe set_servo.

OpenCV je popularna biblioteka funkcija mašinski vid, koji omogućavaju robotima da prepoznaju objekte u okolnom svijetu. OpenCV se koristi za navigaciju, detekciju prepreka, prepoznavanje lica i pokreta. Ovaj članak će predložiti instrukcija korak po korak o instaliranju OpenCV-a na jednopločnom računaru Raspberry Pi 3. Ovaj članak također prethodi nizu lekcija usmjerenih na savladavanje osnovnih funkcija OpenCV-a.

Korak 1. Slobodni prostor

OpenCV i razni prateći paketi zajedno zauzimaju dosta prostora. Preporučljivo je koristiti SD karticu od najmanje 16 GB. Prva stvar koju trebate učiniti prije instaliranja OpenCV-a je proširiti sistem datoteka kako bi pokrio cijeli kapacitet SD kartice. Ovo se radi pomoću Raspbian menija konfiguracije. Odlazimo do terminala i unosimo naredbu: $ sudo raspi-config Otvara se meni u kojem treba da izaberete najgornju stavku: Pritisnite Enter, a zatim dugme . Nakon toga ponovo pokrećemo sistem naredbom: $ sudo reboot Ako je vaša SD kartica veličine samo 8 GB, možete ukloniti nešto nepotrebno, na primjer paket wolfram-engine. $ sudo apt-get purge wolfram-engine Ova operacija će osloboditi dodatnih 700 MB prostora.

Korak 2: Instalirajte zavisnosti

Da bismo u potpunosti radili s OpenCV-om, morat ćemo ažurirati postojeće pakete i instalirati nekoliko novih. Počnimo s ažuriranjem. $ sudo apt-get update $ sudo apt-get upgrade Ovisno o brzini interneta, ove operacije će trajati oko 5-10 minuta. Zatim instalirajte cmake i još nekoliko korisnih stvari u sistem: $ sudo apt-get install build-essential cmake pkg-config Sledeće su paketi za rad sa poznatim formatima slika: $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper -dev libpng12- dev Paketi za rad sa videom: $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev Paketi za kreiranje jednostavnih obrazaca na ekranu. Sve ovo će takođe biti potrebno kasnije. $ sudo apt-get install libgtk2.0-dev Posebne ubrzane operacije na matricama. $ sudo apt-get install libatlas-base-dev gfortran Python datoteke zaglavlja 2.7 i 3 $ sudo apt-get install python2.7-dev python3-dev

Korak 3. Preuzmite OpenCV iz spremišta

Prvo preuzmite arhivu sa samim OpenCV-om. Da biste to uradili, idite u folder /home/pi/Downloads: $ cd ~/Downloads Preuzmite arhivu koristeći wget i raspakujte je: $ wget -O opencv.zip https://github.com/opencv/opencv/archive/ master .zip $ unzip opencv.zip Zatim preuzmite paket sa dodatnim stvarima - opencv_contrib. $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip $ unzip opencv_contrib.zip

Korak 4: Virtuelno okruženje

Prije nego što dalje instaliramo OpenCV, malo ćemo počistiti stvari. Hajde da napravimo virtuelno okruženje koje će zaštititi naše dalje eksperimente od glavnog dela operativni sistem. Ovo je korisno u slučaju da trebate ukloniti trenutna verzija opencv i instalirajte novi. Počnimo sa instaliranjem menadžera paketa pip: $ wget https://bootstrap.pypa.io/get-pip.py $ sudo python get-pip.py Zatim instalirajte upravitelj virtualnog okruženja: $ sudo pip install virtualenv virtualenvwrapper $ sudo rm -rf ~ /.cache/pip Dodajmo nekoliko redova korisničkom profilu, koji je pohranjen u ~/.profile fajlu: $ echo -e "\n# virtualenv i virtualenvwrapper" >> ~/.profile $ echo "export WORKON_HOME=$HOME/.virtualenvs " >> ~/.profile $ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile Sada morate uraditi sljedeća tri koraka:
  1. zatvorite sve prozore terminala
  2. odjaviti se
  3. ponovo se prijavite
  4. otvorite terminal i unesite naredbu: $ source ~/.profile
Bilješka. Općenito, sada se preporučuje unos ove naredbe pri svakoj prijavi. Zatim kreiramo virtuelno okruženje sa imenom “cv”: $ mkvirtualenv cv -p python3 Da biste proverili da li je virtuelno okruženje ispravno instalirano, ponovo pokrenite Raspberry Pi: $ sudo reboot Otvorite terminal i idite u okruženje: $ source ~ /.profile $ workon cv Indikator da se nalazimo u virtuelnom okruženju biće prefiks (cv) na početku komandne linije.
Posljednja stvar koju treba učiniti prije izgradnje OpenCV-a je instaliranje NumPy matematičkog paketa: $ pip install numpy

Korak 5. Prevedite i instalirajte OpenCV

Dok ste u prethodno kreiranom virtuelnom okruženju, idemo u folder sa OpenCV izvornim kodovima i izvršimo naredbe: $ cd ~/Downloads/opencv-master $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX= /usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-master/modules -D BUILD_EXAMPLES=ON .. Na kraju procedure, pojavit će se lista OpenCV komponenti spremnih za instalaciju
Odjeljak posvećen Python-u je označen crvenom bojom. Pa, sada najzanimljiviji dio - sastavljanje binarnih datoteka. Bez napuštanja trenutnog foldera, pokrenite komandu make: $ make -j4 j4 znači da ćemo napraviti paket koristeći sva 4 Raspberry Pi jezgra. To će uvelike ubrzati proceduru, ali i pod takvim uvjetima montaža će trajati oko sat i po. Izrada bi trebala završiti nečim ovako:
Bilješka. Lično, tokom montaže, sistem se nekoliko puta zamrznuo. Odnosno, čak se ni miš nije pomerio. Pomoglo je isključivanje/uključivanje napajanja i ponovno pokretanje gradnje pomoću prekidača -j2. Poslednja stvar koju treba da uradite je da instalirate kompajlirani binarni fajl u python folder: $ sudo make install $ sudo ldconfig

Korak 6: Kompletna instalacija

Nakon instalacije, datoteka cv2.cpython-34m.so će se pojaviti u radnoj mapi python-a, koju treba preimenovati u nešto zvučnije: $ cd /usr/local/lib/python3.4/site-packages/ $ sudo mv cv2.cpython -34m.so cv2.so Da bismo mogli da koristimo OpenCV dok smo u virtuelnom okruženju, tamo ćemo napraviti vezu do rezultirajućeg cv2.so: $ cd ~/.virtualenvs/cv/lib/python3.4/ site-packages/ $ ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so

Korak 7: Provjerite

Da proverimo da li je instalacija ispravna, idemo u virtuelno okruženje, pokrenimo python interpreter i pokušajmo da uvezemo cv2 modul: $ source ~/.profile $ workon cv $ python >>> import cv2 >>> cv2.__version__ "3.1 .0" >>> To je sve - OpenCV je uspješno instaliran! U narednim lekcijama bavićemo se obradom slika sa video kamere u odnosu na robotiku.

Open Source Computer Vision Library

Ovo je biblioteka za programski jezik Python koja pojednostavljuje rad sa kompjuterskim vidom (odjeljak o mašinskom učenju).
Da bismo razumjeli, predlažem da razmotrimo proces prepoznavanja lica (klasični), ako OpenCV nije postojao:
  1. Prvo morate imati ogromnu kolekciju slika sa i bez lica ljudi.
  2. Da strukturiramo ovaj set - da svaku sliku uskladimo s objašnjenjem: da li se na njoj nalazi ljudsko lice.
  3. Ujednačeno i ispravno podijelite strukturiranu kolekciju na uzorke za obuku i kontrolne uzorke.
  4. Zatim, pretraživanjem i kombinovanjem različitih metoda mašinskog učenja („drvo“, „slučajna šuma“, „gradijentni pad“, „najbliži susedi“ itd.) da se stvori neuronska mreža koja daje prihvatljiv rezultat prepoznavanja i na treningu i na testu. uzorci. Ova faza može potrajati mjesecima (!) (u zavisnosti od raspoloživih računarskih resursa)
A OpenCV programeri pružaju svima besplatan skup prvoklasnih algoritama za kompjuterski vid za različite aplikacije - uzmite i koristite!)

UPOZORENJE:

  • U nastavku se raspravlja o zamršenosti instaliranja OpenCV-a na Raspbian, međutim, upute su prilično univerzalne za sve distribucije Debian porodice
  • Instalacija OpenCV-a traje dugo (2-3 sata), ali ne morate ići cijeli put u jednom potezu - možete stati i nastaviti s istog mjesta.
  • Bit će potrebno.
  • Izvršit ćemo instalaciju na Raspberry Pi 3 na čistom, svježe instaliranom Raspbian Desktopu najnovije verzije. cm.

Priprema

Trebaće vam 7 GB slobodnog prostora na fleš disku.
Da biste provjerili dostupnost slobodnog prostora na fleš disku, otvorite terminal (Ctrl + Alt + T) i unesite naredbu
df -h
Ako nema dovoljno prostora, iako bi veličina fleš diska to trebala dozvoliti, onda je vrijedno provjeriti je li proširen sistem podataka za cijeli raspoloživi volumen (u novim verzijama distribucije to se sada radi po defaultu - od aprila 2018.).
Ako sistem nije baš nov, onda možete otići na odjeljak glavnih postavki
sudo raspi-config
i odaberite prvu stavku „1. Proširi sistem datoteka”, a zatim ponovo pokrenite Raspberry

Instaliranje potrebnih paketa

Ako ažuriranja nisu vršena dugo vremena, preporučljivo je da ih napravite sada
sudo apt-get update -y && sudo apt-get upgrade -y
Instalirajte skup paketa za pravljenje programa iz izvora
sudo apt-get install build-essential cmake pkg-config -y
Zatim instaliramo set biblioteka za rad sa grafičkim sadržajem različitih formata
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev -y
Zatim, isto za video sadržaj.
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y sudo apt-get install libxvidcore-dev libx264-dev -y
Instalirajte kompilacijski paket highgui modula za prikaz slika i interfejsa na ekranu
sudo apt-get install libgtk2.0-dev -y
I na kraju, biblioteka linearne algebre i Fortran kompajler:
sudo apt-get install libatlas-base-dev gfortran -y

Python

Zatim instalirajte Python (ili Python). Osnovne verzije 2,7 i 3 su već ugrađeni u Raspbian, ali će biti potrebni dodatni paketi:
sudo apt-get install python2.7-dev python3-dev -y
Zatim, za Python (ili Python), preporučujem instaliranje uslužnih programa virtualenv i virtualenvwrapper - ovo je analog 'i samo za Python, oni vam omogućavaju da radite s Pythonom u odabranom "virtuelnom okruženju" - skup paketa određenih verzije (analozi Ruby gemsetova) - ovo je zgodno kada radite na nekoliko projekata sa različitim skupovima biblioteka (a posebno različitim verzijama biblioteka): da biste prešli na, recimo, Python 2.7 sa OpenCV 3.1, moraćete da unesete samo jedan naredbu u terminalu. Instaliraj:
sudo pip install virtualenv virtualenvwrapper sudo rm -rf ~/.cache/pip echo -e "\n# virtualenv i virtualenvwrapper" >> ~/.profile echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile izvor ~/.profile
Ovim se završavaju zavisnosti.
Mi kreiramo virtuelno okruženje koristeći virtualenv. A onda treba da se odlučite za verziju Pythona - ako je cilj kreiranje projekta od nule, onda bi trebalo da izaberete python3, u suprotnom - python2
U procesu istorijskog razvoja jezika Python, mnogo je napisano tokom aktuelnosti verzije 2.7 dobri programi. Čak i sada, u vrijeme stabilnih 3.5 verzija Pythona 2.7, još uvijek nije zaboravljen i aktivno se koristi i podržava - došlo je do grane. Isto je i sa Python bibliotekama - neće sve raditi jednako dobro i na 2.7 i na 3.5
mkvirtualenv cv -p python3
Uvjeravamo se da smo sada u kreiranom virtuelnom okruženju cv. Ovo se može prepoznati po kombinaciji "(cv)" u konzoli pored trenutno aktivne linije: I na kraju, instalirajte Numpy biblioteku za praktičan rad s nizovima i matricama velikih dimenzija
pip install numpy

Preuzimanje Open CV-a iz spremišta

Kreirajte fasciklu za biblioteku u svom kućnom direktorijumu i idite na nju
cd ~ mkdir opencv cd opencv/
Odlučimo se za OpenCV verziju.
Od izdavanja verzije 3.0, starije verzije 2.4.x nastavljaju biti podržane i objavljene i među njima postoje značajne razlike. Na primjer, 'contrib' paket dodatnih modula dostupan je samo za nove verzije 3+.
Idemo na početnu stranicu projekta u odjeljku “Izdanja”. Predlažem da dalje instalirate najnoviju verziju (3+ a ne 2.4.x.x) i da ne uzmete najnovije izdanje:
Stoga je izbor pao na verziju 3.4.0.
Da biste dobili link za preuzimanje, idite na offline. Otvorite spremište CV-a do odjeljka izdanja: https://github.com/opencv/opencv/releases i kopirajte vezu na zip arhivu odabrane verzije:
Vratimo se Raspberryju.
Dok ste u folderu /opencv, pokrenite naredbu za preuzimanje izvora:
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.0.zip
ova komanda će preuzeti arhivu i preimenovati je u opencv.zip
Hajde da raspakujemo preuzetu arhivu i zatim je izbrišemo:
raspakujte opencv.zip rm opencv.zip
Preuzmite i raspakujte istu verziju dodatnih modula doprinos(u ovom slučaju - 3.4.0). Van stranice izdanja. spremište: https://github.com/opencv/opencv_contrib/releases
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.0.zip raspakujte opencv_contrib.zip rm opencv_contrib.zip
Rezultat bi trebao biti sljedeći (naredba ls prikazuje sadržaj trenutnog foldera):

Kompajliranje i instalacija OpenCV-a

Uvjerimo se još jednom da smo u kreiranom virtuelnom okruženju za OpenCV (poglavlje o instalaciji Pythona). Ako je okruženje već kreirano, onda na njega možete otići pomoću naredbe workon cv
Idite na fasciklu raspakovane OpenCV arhive (verzija, a samim tim i naziv fascikle može se razlikovati):
cd opencv-3.4.0/
Zatim pokrećemo niz naredbi za pokretanje procesa izgradnje instalatera.
Ovo su 3 naredbe - posljednja je višelinijska, u njoj POSEBAN Obratite pažnju na putanju do foldera raspakovane contrib arhive:
mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH= ~/opencv/opencv_contrib-3.4.0/modules\ -D BUILD_EXAMPLES=ON ..
Ako izgradnja bude uspješna, vidjet ćemo sljedeće. Trenutno smo upravo ispunili sve uslove za kompajliranje OpenCV instalatera, pa obratite pažnju na odeljak Python3 (ili Python2), trebalo bi da bude kao na snimku ekrana, u suprotnom (ili u slučaju greške) proverite:
  • možda virtuelno okruženje (cv) nije bilo aktivirano tokom montaže - workon cv
  • Više mogući razlog neuspjeh: neispravna apsolutna putanja do foldera dodatnih modula doprinos
  • U krajnjoj nuždi, možete provjeriti trenutni direktorij - trebali biste biti u mapi za izgradnju neraspakirane OpenCV arhive odabrane verzije
  • Konačno, provjerite da li se izdanje verzije glavnog i doprinosnog paketa podudaraju
U svakom slučaju, u redu je) Trebali biste sve još jednom provjeriti i ponovo pokrenuti montažu
Ako je montaža prošla glatko, onda su svi uslovi za kompajliranje OpenCV instalatera ispunjeni i sada ćemo sastaviti sopstvenu svežu, stabilnu OpenCV distribuciju sa dodatnim modulima iz izvornog koda!
Počnimo sa kompilacijom
Parametar -j4 znači broj uključenih procesorskih jezgara, Raspberry Pi 3 ima 4.
PAŽNJA!! Ovaj proces će u najboljem slučaju trajati oko 1,5 sat!!!
make -j4
Ako primijetimo pad u prvih 5 minuta kompilacije, to se može dogoditi čak i pod idealnim uvjetima, tada resetujemo rezultat i pokrećemo kompilaciju na jednom jezgru:
napravi čist napravi
Ako bude uspješan, vidjet ćemo sljedeće - proces kompilacije je 100% završen
Ostaje samo da pokrenete sastavljeni instalater sa komandom
sudo make install sudo ldconfig
To je to, OpenCV je instaliran na Raspberry! Da biste ga učinili praktičnim za upotrebu, sve što je preostalo je da ga prosledite OpenCV-u u kreirano Python virtuelno okruženje (cv). Definirajmo direktorij - pošto je OpenCV Python biblioteka, trebao bi biti u folderu drugih biblioteka, provjerimo:
  • tim ls prikazuje sadržaj specificiranog direktorija u terminalu
  • ne zaboravite u naredbi navesti Python folder sa verzijom za koju ste zapravo instalirali OpenCV
ls /usr/local/lib/python3.5/site-packages/
U izuzetnim slučajevima, biblioteka se može nalaziti u obližnjoj fascikli dist-packages:
ls /usr/local/lib/python3.5/dist-packages/
Idemo na ovaj direktorij
cd /usr/local/lib/python3.5/site-packages/
Preimenujmo datoteku biblioteke - to će olakšati njeno pozivanje u Python kodu
sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
Kopirajmo punu putanju do datoteke.

Idemo u direktorij biblioteke virtuelnog okruženja cv:
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
Kreirajmo simboličku vezu ovdje na OpenCV:
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
Provjerimo rezultat naredbom ls:

Ispitivanje

Otvorite novi prozor terminala
izvor ~/.profile workon cv python import cv2 cv2.__version__
Ako je sve urađeno kako treba, onda se OpenCV biblioteka uvozi u Python konzolu bez grešaka

U slučaju greške pri uvozu, pažljivo provjerite da li je datoteka biblioteke ispravno preimenovana i da li je kreiran simbolički link na nju (extension - .so), kao i da li je prelazak na cv virtualno okruženje bio uspješan