Opencv raspberry pi uzstādīšana. OpenCV instalēšana (Linux)

10.09.2021

Nesen, realizējot vienu no projektiem, kas saistīti ar attēlu atpazīšanu, radās nepieciešamība uz Raspberry PB2 vienas plates mikrodatora instalēt OpenCV datorredzes bibliotēku.

Pēc interneta pārlūkošanas un eksperimentiem veltīta laika mēs veiksmīgi atrisinājām šo problēmu. Rezultāts ir neliels norādījums, ar kuru mēs labprāt dalāmies ar visiem, kas nolemj lietot OpenCV vietnē Raspberry.

Tātad: OpenCV instalēšana:

Piemērā mēs izmantojam opencv versiju 2.4.9.

Vispirms mums ir jāatjaunina mūsu sistēma:

sudo apt-get atjauninājumu sudo apt-get jauninājums

Tagad mums ir jāinstalē papildu bibliotēkas:

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 pngfftools libtiffx libtiffts libeigen3-dev sudo apt-get -y instalējiet libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer1-0.10 libxine1- 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-contil-fdev4 -0 libgtk2.0-dev pkg-config libxvidcore-dev libx264-dev libavcodec-dev libavformat-dev libqt4-dev libqt4-opengl-dev libjasper-dev

Kad esam pabeiguši bibliotēku instalēšanu, mēs pārejam pie OpenCV instalēšanas. Instalēšanas laikā var rasties situācija, ka jūsu sistēmai var nebūt kādas bibliotēkas un jums būs jāpaskatās, kas trūkst, un jāpiegādā papildus.

Izveidosim mapi, kurā lejupielādēsim mūsu arhīvu:

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

Tagad mums ir jāizpako mūsu arhīvs. Lai to izdarītu, mēs izmantojam komandu:

izņemiet rāvējslēdzēju openCV-2.4.9.zip

Rezultātā izveidosim mapi openCV-2.4.9. Dodieties uz to un izveidojiet izlaišanas mapi

CD openCV-2.4.9 mkdir atbrīvot CD atbrīvot

Ir pienācis laiks konfigurēt OpenCV. Ja jums nav nepieciešami trešās puses iestatījumi, varat izmantot noklusējuma konfigurāciju (lai to izdarītu, vienkārši nospiediet taustiņu “c”). Palaižot ccmake, tiks parādīts iestatījumu saraksts, ko varat norādīt (kā parādīts zemāk esošajā attēlā).

Un tā sāksim:

ccmake ../

(Ja kešatmiņas konfigurācija ir tukša, nospiediet "c")

Nospiediet taustiņu "c".

Kad instalēšana ir pabeigta, vēlreiz nospiediet taustiņu “c”, lai turpinātu, un taustiņu “g”, lai ģenerētu makefile.

Tagad viss ir konfigurēts, un viss, kas jums jādara, ir noklikšķiniet uz Izveidot. Šis process aizņems vidēji apmēram 10 stundas.

izgatavot sudo veikt uzstādīšanu

Tas pabeidz instalēšanu. Atliek tikai pārbaudīt funkcionalitāti.

Izveidojiet main.cpp failu

#iekļauts #iekļauts izmantojot nosaukumvietu cv; int main(int argc, char** argv) ( if (argc != 2) ( printf("lietojums: n"); return -1; ) Mat image; image = imread(argv, 1); if (!image.data) ( printf("Nav attēla datu n"); return -1; ) imshow("Rādīt attēlu" , attēls; gaidītKey(0);

Tagad jums ir jāizveido fails CMakeLists.txt un jāievada tajā:

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

Viss, kas mums jādara, ir apkopot un palaist

cmmake . izgatavot

Sāksim palaist

./DisplayImage path_to_photo.jpg

Ja viss noritēja labi, tad rezultātā mēs redzēsim attēlu, kuru norādījāt faila ceļa parametrā.

Leonīds, Sidstudio programmētājs

Savulaik mani interesēja robotizēto automašīnu montāža, izmantojot Arduino un Raspberry Pi. Man patika spēlēties ar konstruēšanas komplektu, bet gribējās kaut ko vairāk.

Un kādu dienu, klaiņojot pa Aliexpress, es uzgāju alumīnija šasiju tvertnei. Šis radījums salīdzinājumā ar plastmasas automašīnām izskatījās kā Ferrari salīdzinājumā ar ratiem.

Es uzdāvināju sev dāvanu Jaunais gads, tanks atbrauca, tika samontēts un tad vajadzēja to atdzīvināt. Izņēmu no mašīnas pašu Raspberry, strāvas pārveidotāju, motora kontrolieri un akumulatoru. Tas viss tika uzstādīts uz tvertnes un darbojās laimīgi.

Tankam ir jāšauj, un nākamais solis bija kameras parādīšanās. Ar kameras korpusu nevarēju uzminēt - kad tas bija atvērts, tas neturēja kameru, bet, kad to aizcirta, tas bija tik cieši, ka kameras objektīvs nolidoja. Pēc ciešanām vienkārši pielīmēju kameru pie korpusa vāka ar izolācijas lenti. Tagad tanks varēja ne tikai braukt pa istabu, bet arī fotografēt.

Ir vērts atzīmēt tvertnes nopietno priekšrocību salīdzinājumā ar automašīnām mājās - uz kāpurķēdēm nav nozīmes, vai tas brauc pa cietu grīdu vai paklāju. Riteņu transportlīdzekļi slīd uz mīksta paklāja, līdz nespēj pagriezties.

Tālāk es gribēju attīstīt tvertni autonomas navigācijas virzienā, paļaujoties uz fotoattēliem no kameras. Man nācās ienirt datorredzes pasaulē un atklāt OpenCV. Viss sākās ar krāsu un kontūru atpazīšanu – uz papīra izdrukāju sarkanu apli, pielīmēju pie televizora un liku robotam griezties, līdz aplis tika atrasts.

Ideja bija apzīmēt pamanāmus objektus telpā (dīvāns, televizors, galds) ar daudzkrāsainiem apļiem un iemācīt robotam orientēties pēc krāsas.

Izmantojot OpenCV, tika meklētas vēlamās krāsas kontūras (ar pieņemamu pielaidi), pēc tam starp kontūrām tika meklēts aplis.

Likās, ka galvenā problēma varētu būt nejaušs vajadzīgās krāsas aplis uz kāda no objektiem.

Tomēr galvenā problēma izrādījās tā, ka krāsa izskatās ļoti mainīga atkarībā no apgaismojuma, tāpēc diapazons, kurā tika atpazīts sarkanais (piemēram,) bija jāizstiepj līdz toņiem, kas ļoti neskaidri atgādina sākotnējo krāsu. Vai arī izvēlieties vajadzīgo krāsu no attēla, bet jebkurā gadījumā tā nebija sarkana, bet gan brūna nokrāsa.

Meklējiet sarkanu apli:

Importēt cv2 importēt numpy kā np importēt sys def maska_krāsu(img, c1, c2): img = cv2.medianBlur(img, 5) hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, c1) c2) maska ​​= cv2.erode(mask, None, iterations=2) mask = cv2.dilate(mask, None, iterations=2) return mask def find_contours(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) izplūdis = cv2.GaussianBlur(grey, (5, 5), 0) thresh = cv2.threshold(izplūdis, 30, 255, cv2.THRESH_BINARY) thresh = cv2.bitwise_not(thresh) im2, cnts, hierarchy(cnts, hierarchy thresh, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) cp_img = img.copy() cv2.drawContours(cp_img, cnts, -1, (0,255,0), 3) atgriež cp_img def find_circles(imCov2):(cvtCov2): img, cv2.COLOR_BGR2GRAY) aizmiglots = cv2.medianBlur(grey,5) apļi = cv2.HoughCircles(izpludināts,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRaimg =0) img, ja apļi nav Nav: circles = np.uint16(np.around(circles)) priekš i apļos: cv2.circle(img,(i,i),i,(255,0,0),2) cv2 .circle(img,(i,i),2,(0,0,255),3) drukāt "C", i,i,i atgriež cimg def find_circle(img, rgb): tolerance = 4 hsv = cv2.cvtColor( rgb, cv2.COLOR_BGR2HSV) H = hsv c1 = (H — pielaide, 100, 100) c2 = (H + pielaide, 255, 255) c_mask = maskas_krāsa(img, c1, c2) rgb = cv2.cvtColor(c_mask) .COLOR_GRAY2RGB) cont_img = find_contours(rgb) circ_img = find_circles(cont_img) cv2.imshow("Attēls", circ_img) cv2.waitKey(0) if __name__ == "__main___" sym = img.v. img_name) rgb = np.uint8([[]]) find_circle(img, rgb)
Krāsu atpazīšana sāka nonākt strupceļā, mani novērsa Hāras kaskādes, izmantojot tvertni, lai fotografētu kaķi. Kaķis labi maskējās, liekot kaskādei pusi no laika kļūdīties (ja kāds nezina, OpenCV nāk ar Haar kaskādi, kas īpaši apmācīta kaķiem - ņemiet to un izmantojiet).

Kaķa medībām bija noderīgas sekas robotam - tā kā ne vienmēr bija iespējams noķert medību objektu statiskā kamerā, uzstādīju statīvu ar diviem servomotoriem (un PWM moduli, lai tos vadītu caur Raspberry).

Turpinot pētījumu par to, ko var izspiest no istabas fotogrāfijām, es dabiski nonācu pie neironu tīkliem. Apēdis Tensorflow pamācību, apstrādāju to ar tanku fotodetektoru un rezultāti bija daudzsološi - nekļūdīgi tika atpazīts televizors, galds, dīvāns, kaķis, ledusskapis.

Šie eksperimenti tika veikti datorā, un atlika tikai pārsūtīt TF uz Raspberry Pi. Par laimi, vietnē Github dzīvo unikāls cilvēks, kurš bija pacietīgs un pārtrauca visu atkarību instalēšanu un daudzu stundu kompilācijas laiku, un ievietoja to vispārēja piekļuve sastādījis Tensorflow priekš Raspberry Pi.

Tomēr turpmāka tēmas izpēte atklāja, ka OpenCV nestāv uz vietas un tā dalībnieki ir izlaiduši DNN (Deep Neural Networks) moduli, kas piedāvā integrāciju ar neironu tīkliem, kas apmācīti TensorFlow. Šo risinājumu ir daudz ērtāk attīstīt, turklāt nav nepieciešams pats TF. Man nācās veikt nelielu maģiju, jo jaunākā Mobile SSD neironu tīkla versija TF vairs netika uztverta ar jaunāko OpenCV versiju. Man bija jāskatās
un pārbaudiet mobilā SSD darba versiju. Turklāt DNN normāli darbojas tikai ar OpenCV 3.4, un es neatradu šo Raspberry versiju. Man tas bija jāsamontē pašam, jo ​​tas ir daudz vienkāršāk nekā mīņāties ar TensorFlow. Tajā pašā laikā nebija iespējams kompilēt OpenCV jaunākajai Raspbian versijai (Stretch), bet jaunākā versija iepriekšējā paaudze(Džesija) viss pacēlās kā nākas.

Koda piemērs, izmantojot DNN, nevis Tensorflow.

Vairāki faili, kas atbild par objektu nosaukumiem, tika izņemti no TF un tika noņemta atkarība no paša TF (no faila bija tikai lasīšana).
Avota kods vietnē GitHub.

Importēt cv2 kā cv importēt 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_bLStco.co. etiķete _map.pbtxt " tf_labels.initLabels(PATH_TO_LABELS) cvNet = cv.dnn.readNetFromTensorflow(pb_path, pb_txt) img = cv.imgread(sys.argv) rows = img.shape cols = img.shapedFimman.Nectv. , 1.0/127.5, (300, 300), (127.5, 127.5, 127.5), swapRB = True, crop = False)) cvOut = cvNet.forward() noteikšanai cvOut: rezultāts = float(atklāšana)2, ja rezultāts > 0. : pa kreisi = int(atklāšana * cols) top = int(atklāšana * rindas) right = int(atklāšana * cols) bottom = int(atklāšana * rindas) etiķete = tf_labels.getLabel(int(atklāšana)) print(label, score, pa kreisi , augšā, pa labi, apakšā) text_color = (23, 230, 210) cv.rectangle(attēls, (pa kreisi, augšā), (pa labi, apakšā), teksta_krāsa, biezums=2) cv.putText(img, label, () pa kreisi , augšā), cv.FONT_HERSHEY_SIMPLEX, 1, teksta_krāsa, 2) cv.imshow("img", img) cv.waitKey()
Kopumā tvertnes fotogrāfijas tagad var atpazīt ar neironu tīklu, un tas ir ļoti svarīgs navigācijas solis orientieru atpazīšanas ziņā. Tomēr pilnīgai navigācijai ar attēliem vien nepietika, bija jāmēra attālumi līdz šķēršļiem. Tā robots ieguva eholoti. Lai zivju meklētāju savienotu ar Raspberry, ir nedaudz jāpastrādā - zivju meklētājs atgriež signālu pie 5V, bet Raspberry saņem 3,3 V. Ceļā šī problēma tiek atrisināta galvenokārt ar rezistoriem uz smadzeņu paneļa, taču es negribēju radīt tādu traci ar robotu. Rezultātā tika atrasta Level Shifter mikroshēma, kas izdara visu nepieciešamo un ir naga lielumā.

Turklāt es esmu noraizējies izskats robots - man ļoti nepatika, ka mikroshēmas un kamera ar eholoti bija pielipušas pie kartona. Tehnoloģiju attīstība mūsu pasaulē ļauj griezt plastmasu ar lāzeru par saprātīgām laika un naudas izmaksām. Kopumā es atradu darbnīcu ar lāzera iekārtu, pavadīju nedaudz laika, izpētot šīs brīnišķīgās mašīnas instrukcijas, un ne ar pirmo mēģinājumu es izgriezu paneļus mikroshēmām un kameru ar eholoti.

Viss ir gatavs autonomai navigācijai, taču uzdevums izrādījās ne tik vienkāršs un pirmajā mēģinājumā nedaudz apmaldījos. Es nolēmu ieturēt pauzi, visu rūpīgi pārdomāt un izpētīt analogus. Varbūt šī navigācija kalpos kā tēma atsevišķam rakstam.

REST interfeiss, ko robots nodrošina kā pamatu turpmākai lietošanai:

GET /ping GET /version GET /nosaukums GET /dist POST /fwd/on POST /fwd/off POST /back/on POST /back/off POST /left/on POST /left/off POST /right/on POST /right /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

Aizsargājiet savas krūtis no nevēlamiem skatieniem, neatceroties koda kombināciju vai neizmantojot atslēgu. Jūsu seja kalpos kā atslēga, lai atvērtu lādi!

IN šis projekts parāda, kā izmantot Raspberry Pi mikrodatoru un Pi kameru, lai atvērtu lādi, izmantojot sejas atpazīšanas tehnoloģiju.

Šī projekta programmatūras daļa ir balstīta uz algoritmu, kas ir parādīts OpenCV datora redzes bibliotēkā. Raspberry Pi ir ideāla platforma šim projektam, jo ​​tai ir pietiekami daudz apstrādes jaudas, lai palaistu OpenCV, un tas ir mazs izmērs, tāpēc tas var ietilpt jebkur.

Šis projekts ir vidējas sarežģītības pakāpes. Tas apkopo un instalē programmatūra Raspberry Pi mikrodatorā. Ja jums ir pieredze līdzīgu lietu veidošanā un nav problēmu ar komandrindas lietošanu, tad esat pilnībā gatavs veikt visas šī projekta darbības. Ja rodas kādas problēmas, varat arī atsaukties uz Adafruit mācību sistēmas palīdzības materiāliem.

1. darbība: lādes sagatavošana

  • Izurbiet 7/16 collu caurumu krūškurvja augšdaļā, lai ievietotu Pi kameru.
  • Izurbiet lielāku caurumu krūškurvja aizmugurē, lai ievietotu spiedpogu un strāvas kabeļus.

2. darbība: fiksatora izgatavošana

  • Uzstādiet krūškurvja priekšpusē tapu, ko fiksēs aizbīdnis, pagriežot servo.
  • Izveidojiet nelielu rāmi, lai atbalstītu Pi un servo fiksatoru. Servo tiek piestiprināts pie rāmja, izmantojot koka plāksni un skrūves ar rievotu galvu.
  • Izveidojiet aizbīdni no diviem koka gabaliem, kas salīmēti kopā taisnā leņķī un piestiprināti pie servo sviras.

3. darbība: lādes pabeigšana

  • Pārbaudiet, vai rāmis, Pi un fiksators krūškurvja augšdaļā pareizi saskaras. Pārliecinieties, vai servo fiksators griežas uz leju un nofiksē tapu krūškurvja priekšpusē.
  • Uzstādiet tapas, kas iet cauri lādes augšdaļai, lai atbalstītu rāmi.
  • Novērsiet krūškurvja defektus, izmantojot raspu un smilšpapīru, un pēc tam iekrāsojiet koka virsmu pēc vēlēšanās.

4. darbība: elektronisko komponentu pievienošana

  • Savienojiet servo signāla līniju ar Raspberry Pi GPIO kontaktu 18. Servo barošanai un zemei ​​jābūt savienotiem ar akumulatora strāvas spailēm.
  • Savienojiet vienu spiedpogas tapu ar Pi GPIO 25 tapu un caur 10 k omu rezistoru ar Pi 3,3 V barošanas sprieguma tapu. Savienojiet spiedpogas otro tapu ar Pi zemējuma tapu.
  • Savienojiet kopā akumulatora un Pi zemējuma vadus.
  • Uzstādiet Pi kameru caur caurumu lādes augšpusē un pievienojiet kabeli Pi mikrodatoram.

5. darbība: OpenCV kompilēšana

  • Šajā brīdī savā Raspberry Pi ir jāinstalē jaunākā OpenCV versija. Diemžēl vispirms ir jāapkopo OpenCV no avota, jo vecā binārā versija nesatur projektā izmantotos sejas atpazīšanas algoritmus. OpenCV kompilēšana uz Pi aizņem apmēram 5 stundas.
  • Ieslēdziet Pi un izveidojiet savienojumu ar to, izmantojot termināļa sesiju.
  • Lai instalētu OpenCV atkarības, palaidiet šādas komandas:

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

  • Izpildiet šādas komandas, lai lejupielādētu un izspiestu avota kodu jaunākajai OpenCV versijai:

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

  • Palaidiet šādas komandas, lai sagatavotos OpenCV avota koda kompilēšanai:

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

  • Izpildīt šo komandu lai palaistu OpenCV kompilāciju (lūdzu, ņemiet vērā, ka kompilācija aizņem apmēram 5 stundas):
  • Kad OpenCV ir pabeidzis kompilēšanu, palaidiet šo komandu, lai instalētu Pi:

6. darbība: pārbaudiet sejas atpazīšanu

  • Šajā posmā mēs pārbaudīsim sejas atpazīšanas algoritmus, kas ļaus jums atvērt lādi.
  • Lejupielādējiet šī projekta programmatūru no github repozitorija (zemsvītras piezīme: https://github.com/tdicola/pi-facerec-box).
  • Izpakojiet arhīvu un kopējiet saturu uz Pi direktoriju.
  • Pi termināļa sesijas laikā pārlūkojiet direktoriju un palaidiet šo komandu, lai palaistu testa skriptu:

sudo python capture-positives.py

  • Kamēr skripts darbojas, varat nospiest pogu, kas atrodas uz krūtīm, lai fotografētu, izmantojot Pi kameru. Skripts mēģinās identificēt vienu seju uzņemtajā attēlā un saglabāt to kā pareizi uzņemtu kadru apakšdirektorijā ./training/positive.
  • Katru reizi, kad tiek uzņemts attēls, failā capture.pgm tiek ierakstīts rāmis. Jūs varat to apskatīt vietnē grafiskais redaktors lai noteiktu, kā Pi kamera uzņem un nosaka jūsu sejas attēlu.
  • Izmantojiet pogu, lai uzņemtu 5 vai vairāk savas sejas attēlus, lai iegūtu pareizos rezultātus. Mēģiniet iegūt attēlus no dažādiem leņķiem, dažādu apgaismojumu utt. Fotogrāfijās var redzēt manis iegūtos sejas attēlus.
  • Ja jūs interesē, varat apskatīt direktoriju ./training/negative, kurā ir attēli no AT&T sejas atpazīšanas datu bāzes, ko var izmantot kā piemērus cilvēkiem, kuriem nevajadzētu piekļūt lādes atvēršanai.
  • Kad esat saņēmis pareizos attēlus, palaidiet šīs komandas, lai apstrādātu pareizos un nepareizos testa attēlus un pārbaudītu sejas atpazīšanas algoritmu (ņemiet vērā, ka šī izmēģinājuma darbība aizņem apmēram 10 minūtes):

python train.py

7. darbība: servo konfigurācija

  • Šajā posmā ir jānosaka servo impulsu platumi fiksatora bloķēšanai un atbloķēšanai.
  • Ar Raspberry Pi mikrodatora un fiksatora servo piegādāto strāvu savienojiet ar Pi termināļa sesijā. Pārliecinieties, vai lāde ir atvērta, lai jūs varētu redzēt, kā servo kustas bez iesprūšanas.
  • Palaidiet šo komandu, lai sāktu interaktīvu Python sesiju kā root (jums ir jābūt piekļuvei GPIO tapām un iespējai pārvietot servo):

sudo python

  • IN komandrinda Python >>>, ievadiet šo komandu, lai ielādētu RPIO servo bibliotēku:

no RPIO importa PWM

  • Pēc tam ievadiet šādu komandu:

servo = PWM.Servo()

  • Visbeidzot, palaidiet šo komandu, lai pārvietotu servo fiksatoru uz vidējo pozīciju:

servo.set_servo(18, 1500)

  • Set_servo parametrs 1500 nosaka diskdziņa impulsa platumu mikrosekundēs. Ekstrēmās vērtības svārstās no 1000 līdz 2000.
  • Izmēģiniet funkciju set_servo ar dažādiem impulsu platumiem, līdz iegūstat vērtības, kas liek fiksatoram pareizi aizvērt un atvērties, kā parādīts fotoattēlos.
  • Neaizmirstiet, ka varat noņemt servo sviru un atkal to piestiprināt, lai pareizi orientētu servo fiksatoru.
  • Kad vērtības ir uzminētas, atveriet config.py teksta redaktors ar superlietotāja tiesībām un mainiet šādas vērtības:
  • Iestatiet LOCK_SERVO_UNLOCKED vienādu ar impulsa platuma vērtību fiksatora stāvokļa atbloķēšanai — atbloķēšanai. Manā aparatūrā pareizā vērtība ir 2000.
  • Iestatiet LOCK_SERVO_LOCKED, lai noteiktu, vai fiksatora pozīcija ir bloķēta — bloķēta. Manā gadījumā šī vērtība ir 1100.

8. darbība: palaidiet programmatūru

  • Pēc sejas atpazīšanas pārbaudes un servo kalibrēšanas varat palaist programmas kodu!
  • Kad Raspberry Pi mikrodatoram un fiksatora servo tiek piegādāta strāva, savienojiet ar Pi termināļa sesijā un pārlūkojiet projekta saknes direktoriju.
  • Palaidiet šo komandu, lai palaistu kodu (esiet uzmanīgs, jo tas nekavējoties bloķēs lādi):

sudo python box.py

  • Pēc testa datu lejupielādes (tas aizņem dažas minūtes), pavērsiet kameru pret savu seju un nospiediet pogu, lai mēģinātu sejas atpazīšanu.
  • Ja krūtis atpazīst jūsu seju, servo darbosies un atbloķēs fiksatoru. Ja jūsu seja netiek atpazīta, terminālis parādīs ziņojumu, norādot, cik tuvu jūsu seja atradās testa attēlam.
  • Lai atpazītu seju, uzņemtajam attēlam ir jāatbilst testa attēlam ar ticamības līmeni 2000 vai mazāku. Ja jūsu seja atbilst attēla parauga datiem, bet ticamība ir zema, varat mainīt uzticamības slieksni failā config.py (iestatījumā POSITIVE_THRESHOLD). Ja atpazīšana joprojām nav uzticama, augšupielādējiet atbilstošākus uzņemtos attēlus un vēlreiz palaidiet atpazīšanas testu. Sejas atpazīšanas algoritms šajā projektā ir ļoti atkarīgs no sejas apgaismojuma, tāpēc mēģiniet izmantot tādu pašu apgaismojuma avotu kā izmēģinājuma mēģinājumos (vai pievienojiet dažus papildu attēlus dažādos apgaismojuma apstākļos).
  • Pēc lādes atvēršanas vēlreiz nospiediet pogu, lai to aizvērtu. Šim nolūkam nav nepieciešama sejas atpazīšanas darbība.
  • Ja lādei ir problēmas ar atvēršanu un tā neatpazīst jūsu seju, izpildiet servo konfigurācijas darbības, lai manuāli pārvietotu servo atbloķēšanas pozīcijā, izmantojot komandu set_servo.

OpenCV ir populāra funkciju bibliotēka mašīnredze, kas ļauj robotiem atpazīt objektus apkārtējā pasaulē. OpenCV tiek izmantots navigācijai, šķēršļu noteikšanai, sejas un žestu atpazīšanai. Šis raksts ieteiks soli pa solim instrukcijas par OpenCV instalēšanu uz Raspberry Pi 3 vienas plates datorā Šis raksts ir arī pirms vairākām nodarbību sērijām, kuru mērķis ir apgūt OpenCV pamatfunkcijas.

Solis 1. Brīva vieta

OpenCV un dažādas atbalsta paketes kopā aizņem diezgan daudz vietas. Ļoti ieteicams izmantot vismaz 16 GB SD karti. Pirmā lieta, kas jums jādara pirms OpenCV instalēšanas, ir paplašināt failu sistēmu, lai aptvertu visu SD kartes ietilpību. Tas tiek darīts, izmantojot Raspbian konfigurācijas izvēlni. Mēs ejam uz termināli un ievadām komandu: $ sudo raspi-config Tiks atvērta izvēlne, kurā jāizvēlas augšējais vienums: Nospiediet Enter un pēc tam pogu . Pēc tam mēs restartējam sistēmu ar komandu: $ sudo reboot Ja jūsu SD karte ir tikai 8 GB liela, varat izņemt kaut ko nevajadzīgu, piemēram, wolfram-engine pakotni.

2. darbība: instalējiet atkarības

Par pilnvērtīgu darbu ar OpenCV mums būs jāatjaunina esošās pakotnes un jāinstalē vairākas jaunas. Sāksim ar atjauninājumu.

$ sudo apt-get update $ sudo apt-get upgrade Atkarībā no interneta ātruma šīs darbības aizņems aptuveni 5-10 minūtes. Pēc tam sistēmā instalējiet cmake un dažas citas noderīgas lietas: $ sudo apt-get install build-essential cmake pkg-config Tālāk ir pakotnes darbam ar zināmiem attēlu formātiem: $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper -dev libpng12- dev Paketes darbam ar video: $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev Paketes vienkāršu ekrāna formu izveidei. Tas viss būs vajadzīgs arī vēlāk.

$ sudo apt-get install libgtk2.0-dev Īpašas paātrinātas darbības ar matricām.

$ sudo apt-get instalēt libatlas-base-dev gfortran Python galvenes faili 2.7 un 3 $ sudo apt-get install python2.7-dev python3-dev

3. darbība. Lejupielādējiet OpenCV no repozitorija Vispirms lejupielādējiet arhīvu ar pašu OpenCV. Lai to izdarītu, dodieties uz mapi /home/pi/Downloads: $ cd ~/Downloads Lejupielādējiet arhīvu, izmantojot wget, un izpakojiet to: $ wget -O opencv.zip https://github.com/opencv/opencv/archive/ master .zip $ unzip opencv.zip Pēc tam lejupielādējiet pakotni ar papildu lietām - opencv_contrib.$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip $ unzip opencv_contrib.zip 4. darbība: virtuālā vide Pirms OpenCV tālākas instalēšanas mēs nedaudz iztīrīsim lietas. Izveidosim virtuālo vidi, kas pasargās mūsu turpmākos eksperimentus no galvenās daļas
  1. operētājsistēma
  2. . Tas ir noderīgi, ja nepieciešams noņemt
  3. pašreizējā versija
  4. opencv un instalējiet jaunu. Sāksim ar pip pakotņu pārvaldnieka instalēšanu: $ wget https://bootstrap.pypa.io/get-pip.py $ sudo python get-pip.py Pēc tam instalējiet virtuālās vides pārvaldnieku: $ sudo pip install virtualenv virtualenvwrapper $ sudo rm -rf ~ /.cache/pip Pievienosim pāris rindiņas lietotāja profilam, kas tiek saglabāts failā ~/.profile: $ echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile $ echo "eksportēt WORKON_HOME=$HOME/.virtualenvs " >> ~/.profile $ echo "avots /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile Tagad jums ir jāveic šādas trīs darbības:
aizveriet visus termināļa logus Kopumā tagad ir ieteicams ievadīt šo komandu katrā pieteikšanās reizē. Tālāk mēs izveidojam virtuālo vidi ar nosaukumu “cv”: $ mkvirtualenv cv -p python3 Lai pārbaudītu, vai virtuālā vide ir pareizi instalēta, restartējiet Raspberry Pi: $ sudo reboot Atveriet termināli un dodieties uz vidi: $ avots ~ /.profile $ workon cv Indikators, ka atrodamies virtuālajā vidē, komandrindas sākumā būs prefikss (cv).
Pēdējā lieta, kas jādara pirms OpenCV izveides, ir NumPy matemātikas pakotnes instalēšana: $ pip install numpy

Solis 5. Kompilējiet un instalējiet OpenCV

Atrodoties iepriekš izveidotajā virtuālajā vidē, dosimies uz mapi ar pirmkodi OpenCV un palaidiet komandas: $ 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 ~ EXAMPLES = MOV. Lejupielādes /opencv_contrib-master/modules -D BUILD_EXAMPLES=ON .. Procedūras beigās parādīsies instalēšanai gatavu OpenCV komponentu saraksts.
Sadaļa, kas veltīta pitonam, ir iezīmēta sarkanā krāsā. Nu, tagad interesantākā daļa - bināro failu salikšana. Neatstājot pašreizējo mapi, palaidiet komandu make: $ make -j4 j4 nozīmē, ka mēs veidosim pakotni, izmantojot visus 4 Raspberry Pi kodolus. Tas ievērojami paātrinās procedūru, taču pat šādos apstākļos montāža prasīs apmēram pusotru stundu. Būvēšanai vajadzētu beigties ar kaut ko līdzīgu:
aizveriet visus termināļa logus Personīgi montāžas laikā sistēma pāris reizes sastinga. Tas ir, pat pele nekustējās. Palīdzēja strāvas izslēgšana/ieslēgšana un būvēšanas restartēšana ar slēdzi -j2. Pēdējā lieta, kas jādara, ir instalēt kompilēto bināro failu mapē python: $ sudo make install $ sudo ldconfig

6. darbība: pabeidziet instalēšanu

Pēc instalēšanas python darba mapē parādīsies fails cv2.cpython-34m.so, kas ir jāpārdēvē uz kaut ko jaukāku: $ cd /usr/local/lib/python3.4/site-packages/ $ sudo mv cv2.cpython -34m.so cv2.so Lai mēs varētu izmantot OpenCV, atrodoties virtuālajā vidē, mēs tur izveidosim saiti uz iegūto cv2.so: $ cd ~/.virtualenvs/cv/lib/python3.4/ site-packages/ $ ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so

7. darbība: pārbaudiet

Lai pārbaudītu, vai instalācija ir pareiza, ieejam virtuālajā vidē, palaidīsim python interpretatoru un mēģināsim importēt cv2 moduli: $ avots ~/.profile $ workon cv $ python >>> importēt cv2 >>> cv2.__version__ "3.1 .0" >>> Tas arī viss - OpenCV veiksmīgi instalēts! Turpmākajās nodarbībās aplūkosim videokameras attēlu apstrādi saistībā ar robotiku.

Atvērtā pirmkoda Computer Vision bibliotēka

Šī ir Python programmēšanas valodas bibliotēka, kas vienkāršo darbu ar datorredzi (mašīnmācības sadaļa).
Lai saprastu, es ierosinu apsvērt sejas atpazīšanas procesu (klasisko), ja OpenCV nepastāvētu:
  1. Pirmkārt, jums ir jābūt milzīgai attēlu kolekcijai ar cilvēku sejām un bez tām.
  2. Strukturēt šo komplektu - saistīt katru attēlu ar skaidrojumu: vai uz tā ir cilvēka seja.
  3. Vienmērīgi un pareizi sadaliet strukturētu kolekciju apmācības un kontroles komplektā.
  4. Tālāk, meklējot un kombinējot dažādas mašīnmācīšanās metodes (“koks”, “gadījuma mežs”, “gradienta nolaišanās”, “tuvākie kaimiņi” utt.), lai izveidotu neironu tīklu, kas dod pieņemamu atpazīšanas rezultātu gan apmācībā, gan testā. paraugi. Šis posms var ilgt mēnešus(!) (atkarībā no pieejamajiem skaitļošanas resursiem)
Un OpenCV izstrādātāji nodrošina ikvienam bezmaksas pirmās klases datorredzes algoritmu komplektu dažādām lietojumprogrammām - ņemiet to un izmantojiet!)

BRĪDINĀJUMS:

  • Tālāk ir apskatītas OpenCV instalēšanas sarežģītības uz Raspbian, tomēr instrukcijas ir diezgan universālas visiem Debian saimes izplatījumiem.
  • OpenCV instalēšana aizņem ilgu laiku (2-3 stundas), taču jums nav jāiet viss ceļš vienā piegājienā - varat apstāties un turpināt no tās pašas vietas.
  • Būs prasīts.
  • Mēs veiksim Raspberry Pi 3 instalēšanu uz tīras, tikko instalētas jaunākās versijas Raspbian Desktop. cm.

Sagatavošana

Nepieciešams 7 GB brīva vieta zibatmiņas diskā.
Lai pārbaudītu brīvas vietas pieejamību zibatmiņas diskā, atveriet termināli (Ctrl + Alt + T) un ievadiet komandu
df -h
Ja vietas nepietiek, lai gan zibatmiņas diska izmēram tas būtu jāatļauj, tad ir vērts pārbaudīt, vai tas ir paplašināts failu sistēma visam pieejamajam apjomam (jaunajās izplatīšanas versijās tagad tas tiek darīts pēc noklusējuma — no 2018. gada aprīļa).
Ja sistēma nav ļoti jauna, varat doties uz galveno iestatījumu sadaļu
sudo raspi-config
un atlasiet pirmo vienumu “1. Izvērst failu sistēmu” un pēc tam restartējiet Raspberry

Nepieciešamo pakotņu instalēšana

Ja atjauninājumi nav veikti ilgu laiku, ieteicams tos veikt tagad
sudo apt-get update -y && sudo apt-get upgrade -y
Instalējiet pakotņu komplektu, lai izveidotu programmas no avota
sudo apt-get install build-essential cmake pkg-config -y
Pēc tam mēs instalējam bibliotēku komplektu darbam ar dažādu formātu grafisko saturu
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev -y
Tālāk tas pats attiecas uz video saturu.
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y sudo apt-get install libxvidcore-dev libx264-dev -y
Instalējiet highgui moduļa kompilācijas pakotni attēlu un saskarņu parādīšanai ekrānā
sudo apt-get install libgtk2.0-dev -y
Un visbeidzot, lineārā algebras bibliotēka un Fortran kompilators:
sudo apt-get instalējiet libatlas-base-dev gfortran -y

Python

Pēc tam instalējiet Python (vai Python). Pamata versijas 2,7 un 3 jau ir iebūvēti Raspbian, taču būs nepieciešamas papildu pakotnes:
sudo apt-get instalējiet python2.7-dev python3-dev -y
Tālāk Python (vai Python) es iesaku instalēt utilītas virtualenv un virtualenvwrapper - tas ir analogs 'un tikai Python, tie ļauj strādāt ar Python izvēlētajā "virtuālajā vidē" - noteiktu pakotņu komplektā. versijas (Ruby dārgakmeņu komplektu analogi) - tas ir ērti, strādājot pie vairākiem projektiem ar dažādām bibliotēku kopām (un jo īpaši dažādām bibliotēku versijām): lai pārslēgtos, piemēram, uz Python 2.7 ar OpenCV 3.1, jums būs jāievada tikai viens komanda terminālī. Instalēt:
sudo pip instalēt virtualenv virtualenvwrapper sudo rm -rf ~/.cache/pip echo -e "\n# virtualenv un virtualenvwrapper" >> ~/.profile echo "eksportēt WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile echo "avots /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile avots ~/.profile
Tas pabeidz atkarības.
Mēs veidojam virtuālo vidi, izmantojot virtualenv. Un tad vajadzētu izlemt par Python versiju - ja mērķis ir izveidot projektu no nulles, tad jāizvēlas python3, pretējā gadījumā - python2
Python valodas vēsturiskās attīstības procesā versijas 2.7 aktualitātes laikā ir daudz rakstīts labas programmas. Un pat tagad, Python 2.7 stabilo 3.5 versiju laikā, tas joprojām nav aizmirsts un tiek aktīvi izmantots un atbalstīts - ir noticis atzars. Tas pats ir ar Python bibliotēkām — ne visas darbosies vienlīdz labi gan versijā 2.7, gan 3.5
mkvirtualenv cv -p python3
Pārliecināmies, ka tagad esam izveidotajā virtuālajā vidē cv. To var atpazīt pēc kombinācijas “(cv)” konsolē blakus pašreizējai aktīvajai rindai: Visbeidzot, instalējiet Numpy bibliotēku, lai ērti strādātu ar lielu izmēru masīviem un matricām
pip install numpy

Atvērtā CV lejupielāde no repozitorija

Izveidojiet bibliotēkas mapi savā mājas direktorijā un dodieties uz to
cd ~ mkdir opencv cd opencv/
Izlemsim par OpenCV versiju.
Kopš versijas 3.0 izlaišanas joprojām tiek atbalstītas un izlaistas vecākas versijas 2.4.x versijas, un starp tām ir būtiskas atšķirības. Piemēram, papildu moduļu pakotne “contrib” ir pieejama tikai jaunajām versijām 3+.
Dosimies uz projekta mājas lapu sadaļā “Izlaidumi”. Es iesaku turpināt instalēt jaunāko versiju (3+, nevis 2.4.x.x) un neizmantot jaunāko versiju:
Tādējādi izvēle krita uz versiju 3.4.0.
Lai iegūtu lejupielādes saiti, atveriet bezsaistē. Atveriet CV repozitoriju izlaidumu sadaļā: https://github.com/opencv/opencv/releases un nokopējiet saiti uz atlasītās versijas zip arhīvu:
Atgriezīsimies pie Raspberry.
Atrodoties mapē /opencv, palaidiet komandu, lai lejupielādētu avotus:
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.0.zip
šī komanda lejupielādēs arhīvu un pārdēvēs to uz opencv.zip
Izpakosim lejupielādēto arhīvu un pēc tam izdzēsīsim to:
unzip opencv.zip rm opencv.zip
Lejupielādējiet un izpakojiet to pašu papildu moduļu versiju ieguldījums(šajā gadījumā - 3.4.0). Izlaidumu lapa. repozitorijs: https://github.com/opencv/opencv_contrib/releases
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.0.zip unzip opencv_contrib.zip rm opencv_contrib.zip
Rezultātam jābūt šādam (komanda ls parāda pašreizējās mapes saturu):

OpenCV kompilēšana un instalēšana

Vēlreiz pārliecināsimies, ka esam izveidotajā OpenCV virtuālajā vidē (Python instalācijas nodaļa). Ja vide jau ir izveidota, tad uz to var doties ar workon cv komandu
Dodieties uz neizpakotā OpenCV arhīva mapi (versija un attiecīgi arī mapes nosaukums var atšķirties):
CD opencv-3.4.0/
Pēc tam mēs izpildām vairākas komandas, lai sāktu instalētāja veidošanas procesu.
Tās ir 3 komandas - pēdējā ir vairāku rindu ĪPAŠS Pievērsiet uzmanību ceļam uz neizpakotā ieguldījumu arhīva mapi:
mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=IESLĒGTS \ -D OPENCV_EXTRA_MODULES_PATH= ~/opencv/opencv_contrib-3.4.0/modules\ -D BUILD_EXAMPLES=IESLĒGTS ..
Ja izveide ir veiksmīga, mēs redzēsim sekojošo. Ieslēgts šobrīd mēs tikko izpildījām visus OpenCV instalētāja kompilēšanas nosacījumus, tāpēc pievērsiet uzmanību Python3 (vai Python2) sadaļai, tai vajadzētu būt kā ekrānuzņēmumā, pretējā gadījumā (vai neveiksmes gadījumā) pārbaudiet:
  • varbūt montāžas laikā netika aktivizēta virtuālā vide (cv) - workon cv
  • Vairāk iespējamais iemesls fails: nepareizs absolūtais ceļš uz papildu moduļu mapi ieguldījums
  • Kā pēdējo līdzekli varat pārbaudīt pašreizējo direktoriju - jums jāatrodas atlasītās versijas neizpakotā OpenCV arhīva būvmapē
  • Visbeidzot, pārliecinieties, vai galvenās un ieguldījumu pakotnes izlaiduma versijas atbilst
Jebkurā gadījumā viss ir kārtībā) Jums ir vēlreiz jāpārbauda viss un jāsāk veidot no jauna
Ja montāža noritēja gludi, tad visi nosacījumi OpenCV instalēšanas programmas sastādīšanai ir izpildīti un tagad saliksim paši savu svaigo, stabilo OpenCV distribūciju ar papildus moduļiem no pirmkoda!
Sāksim kompilāciju
Parametrs -j4 nozīmē iesaistīto procesora kodolu skaitu, Raspberry Pi 3 ir 4.
UZMANĪBU!! Šis process labākajā gadījumā prasīs apmēram 1,5 stundas!!!
padarīt -j4
Ja mēs novērojam avāriju pirmajās 5 kompilācijas minūtēs, tas var notikt pat ideālos apstākļos, tad mēs atiestatām rezultātu un palaižam kompilāciju vienā kodolā:
padarīt tīru padarīt
Veiksmes gadījumā redzēsim sekojošo – kompilācijas process ir 100% pabeigts
Atliek tikai palaist samontēto instalētāju ar komandu
sudo make instalēt sudo ldconfig
Tas arī viss, OpenCV ir instalēts Raspberry! Lai to ērti izmantotu, atliek vien pārsūtīt to uz OpenCV izveidotajā Python virtuālajā vidē (cv). Definēsim direktoriju - tā kā OpenCV ir Python bibliotēka, tai vajadzētu būt citu bibliotēku mapē, pārbaudīsim:
  • komanda ls parāda terminālī norādītā direktorija saturu
  • neaizmirstiet komandā norādīt Python mapi ar versiju, kurai jūs faktiski instalējāt OpenCV
ls /usr/local/lib/python3.5/site-packages/
Izņēmuma gadījumos bibliotēka var atrasties tuvējā mapē dist-pakas:
ls /usr/local/lib/python3.5/dist-packages/
Dosimies uz šo direktoriju
cd /usr/local/lib/python3.5/site-packages/
Pārdēvēsim bibliotēkas failu – tas atvieglos tā izsaukšanu Python kodā
sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
Kopēsim pilnu ceļu uz failu.

Dosimies uz virtuālās vides cv bibliotēkas direktoriju:
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
Izveidosim saiti šeit OpenCV:
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
Pārbaudīsim rezultātu ar komandu ls:

Pārbaude

Atveriet jaunu termināļa logu
avots ~/.profile workon cv python import cv2 cv2.__version__
Ja viss ir izdarīts pareizi, OpenCV bibliotēka tiek importēta Python konsolē bez kļūdām

Importēšanas kļūdas gadījumā rūpīgi pārbaudiet, vai bibliotēkas fails ir pareizi pārdēvēts un ir izveidota saite uz to (paplašinājums - .so), kā arī veiksmīga pāreja uz cv virtuālo vidi.