Opencv raspberry pi инсталация. Инсталиране на OpenCV (Linux)

10.09.2021

Наскоро, докато изпълнявахме един от проектите, свързани с разпознаването на изображения, имахме нужда да инсталираме библиотеката за компютърно зрение OpenCV на едноплатков микрокомпютър Raspberry PB2.

След като се разровихме из мрежата и прекарахме известно време в експерименти, ние успешно решихме този проблем. Резултатът е малка инструкция, която с удоволствие споделяме с всеки, който реши да използва OpenCV на Raspberry.

И така: инсталиране на OpenCV:

В примера използваме opencv версия 2.4.9.

Първо трябва да актуализираме нашата система:

sudo apt-get актуализация sudo apt-get надграждане

Сега трябва да инсталираме допълнителни библиотеки:

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 libtiff4-dev libtiff4 libtiffxx0c2 libtiff-gen3-dev libe sudo apt-get -y инсталирате libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine 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-conf v4l-utils libgtk2.0 - 0 libgtk2.0-dev pkg-config libxvidcore-dev libx264-dev libavcodec-dev libavformat-dev libqt4-dev libqt4-opengl-dev libjasper-dev

След като приключим с инсталирането на библиотеките, преминаваме към инсталиране на OpenCV. По време на инсталацията може да възникне ситуация, при която може да няма някаква библиотека за вашата система и ще трябва да погледнете какво липсва и да го доставите допълнително.

Създайте папка, в която ще изтеглим нашия архив:

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/изтегляне

Сега трябва да разопаковаме нашия архив. За целта използваме командата:

разархивирайте openCV-2.4.9.zip

В резултат на това ще създадем папка openCV-2.4.9. Влезте в него и създайте папка за освобождаване

cd openCV-2.4.9 mkdirосвобождаване cdосвобождаване

Време е да конфигурирате OpenCV. Ако не се нуждаете от настройки на трети страни, можете да използвате конфигурацията по подразбиране (за това просто натиснете клавиша „c“). Когато стартирате ccmake, ще се появи списък с опции, които можете да посочите (както е показано на снимката по-долу)

И така, нека да започнем:

ccmake ../

(Натиснете "c", ако конфигурацията на кеша е празна)

Натиснете клавиша "c".

Когато инсталацията приключи, натиснете отново клавиша "c", за да продължите, и клавиша "g", за да генерирате make-файла.

Сега всичко е конфигурирано и остава да натиснете make. Този процес ще отнеме средно около 10 часа.

направи sudoнаправете инсталиране

Това завършва инсталацията. Остава да проверим производителността.

Създайте файл main.cpp

#включи #включи използване на пространство от имена cv; int main(int argc, char** argv) ( if (argc != 2) ( printf("използване: n"); return -1; ) Mat image; image = imread(argv, 1); if (!image.data) ( printf("Няма данни за изображение n"); return -1; ) imshow("Показване на изображение" , изображение); waitKey(0); връщане 0; )

Сега трябва да създадете файл CMakeLists.txt и да въведете следното в него:

Cmake_minimum_required(ВЕРСИЯ 2.8) project(DisplayImage) find_package(OpenCV ИЗИСКВА) add_executable(DisplayImage main.cpp) target_link_libraries(DisplayImage $(OpenCV_LIBS))

Просто трябва да компилираме и стартираме

cmake . направи

Ние стартираме

./DisplayImage path_to_photo.jpg

Ако всичко върви добре, тогава в резултат ще видим картината, която сте посочили в параметъра на пътя на файла.

Леонид, програмист в Sidstudio

По едно време обичах да сглобявам роботизирани коли на Arduino и Raspberry Pi. Харесваше ми да играя на конструктор, но исках нещо повече.

И веднъж, лутайки се из Aliexpress, попаднах на алуминиево шаси за резервоар. Това творение изглеждаше като Ferrari в сравнение с количка в сравнение с пластмасовите коли.

Направих си подарък за Нова година, резервоарът пристигна, беше сглобен и след това беше необходимо да го съживим. Махнах самия Raspberry, преобразувателя на захранването, контролера на двигателя и батерията от машината. Всичко това беше поставено на резервоара и радостно заслужено.

Резервоарът трябва да стреля, а следващата стъпка беше появата на камера. Не успях да позная с кутията на камерата - тя не държеше камерата в отворено състояние, но в затворено състояние беше толкова стегната, че обективът излетя от камерата. След като страдах, просто завързах камерата с лента към капака на кутията. Сега резервоарът можеше не само да кара из стаята, но и да прави снимки.

Заслужава да се отбележи сериозното предимство на танка пред колите у дома - на гъсеница няма значение дали се движи по твърд под или по килим. Колесните превозни средства се плъзгат по мек килим, до невъзможност за обръщане.

Освен това исках да развия танка в посока автономна навигация, базирайки се на снимки от камерата. Трябваше да се потопя в света на компютърното зрение и да открия OpenCV. Всичко започна с разпознаване на цвят и контур – отпечатах червен кръг върху хартия, залепих го на телевизора и накарах робота да се върти, докато кръгът се намери.

Идеята беше да се маркират забележими предмети в стаята (диван, телевизор, маса) с многоцветни кръгове и да се научи роботът да се ориентира по цвят.

С помощта на OpenCV се търсят контури с желания цвят (с приемлив толеранс), след което се търси кръг сред контурите.

Изглеждаше, че основният проблем може да бъде случаен кръг с правилния цвят върху един от обектите.

Основният проблем обаче се оказа, че цветът изглежда много променлив в зависимост от осветлението, така че диапазонът, в който се разпознава червеното (например), трябваше да се разтегне до нюанси, които много смътно наподобяват оригиналния цвят. Или изберете желания цвят от снимката, но във всеки случай не е вече червено, а нюанс на кафяво.

Търсене на червена чаша:

Импортирайте cv2 import numpy като 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, c1, c2) mask = 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) blurred = cv2.GaussianBlur(gray, (5, 5), 0) thresh = cv2.threshold(blurred, 30, 255, cv2.THRESH_BINARY) thresh = cv2.bitwise_not(thresh) im2, cnts, йерархия = cv2.findContours( 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.cvtColor( img, cv2.COLOR_BGR2GRAY) замъглено = cv2.medianBlur(сиво,5) кръгове = cv2.HoughCircles(замъглено,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0) cimg = img ако кръговете не са Няма: кръгове = np.uint16(np.around(кръгове)) за i в кръгове: 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 return cimg def find_circle(img, rgb): толеранс = 4 hsv = cv2.cvtColor(rgb, cv2.COLOR_BGR2HSV) H = hsv c1 = (H - толеранс, 100, 100) c2 = (H + толеранс, 255, 255) c_mask = mask_color(img, c1, c2) rgb = cv2.cvtColor(c_mask,cv2.COLOR_GRAY2RGB) cont_img = find_contours(rgb) circ_img = find_circles(cont_img) cv2.imshow("Image", circ_img) cv2.waitKey(0) if __name__ == "__main__": img_name = sys. argv img = cv2.imread(img_name) rgb = np.uint8([[]]) find_circle(img, rgb)
Разпознаването на цветовете започна да се забива, бях разсеян от каскадите на Хаар, използвайки резервоара за лов на снимки на котки. Котката се маскира добре, принуждавайки каскадата да прави грешки в половината от случаите (ако някой не знае, OpenCV идва с каскада на Хаар, специално обучена върху котки - вземете я и я използвайте).

Ловът на котка имаше благоприятни последици за робота - тъй като не винаги беше възможно да се хване обектът на лов в статична камера, поставих триножник с два сервомотора (и PWM модул за управлението им чрез Raspberry).

Продължавайки проучването какво може да се изтръгне от снимките на стаята, естествено стигнах до невронните мрежи. След като погълнах урока на Tensorflow, го обработих с фотодетектор за резервоари и резултатите бяха обещаващи - телевизор, маса, диван, котка, хладилник бяха разпознати безпогрешно.

Тези експерименти бяха проведени на компютър и единственото, което остана, беше да се прехвърли TF към Raspberry Pi. За щастие, има уникален човек в github, който имаше търпението и проби инсталацията на всички зависимости и много часове време за компилиране - и публикува компилирания Tensorflow за Raspberry Pi публично.

По-нататъшното проучване на темата обаче разкри, че OpenCV не стои неподвижно и неговите сътрудници пуснаха модула DNN (Deep Neural Networks), който предлага интеграция с невронни мрежи, обучени на TensorFlow. Това решение е много по-удобно за разработване, освен това няма нужда от самия TF. Трябваше да направя малко магия, тъй като най-новата версия на мобилната SSD невронна мрежа за TF вече не се приемаше от най-новата версия на OpenCV. Трябваше да погледна
и проверете работещата версия на Mobile SSD. Освен това DNN работи добре само под OpenCV 3.4 и не намерих тази версия за Raspberry. Трябваше да го сглобя сам, тъй като е много по-лесно, отколкото да си играем с TensorFlow. В същото време не беше възможно да се изгради OpenCV за най-новата версия на Raspbian (Stretch), но на последна версия предишно поколение(Джеси) Всичко тръгна както трябва.

Пример за код, използващ DNN и не използващ Tensorflow.

Няколко файла, отговорни за имената на обектите, бяха изтеглени от TF и ​​зависимостта от самия TF беше премахната (имаше само четене от файла).
Изходен код в github.

Импортирайте cv2 като 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_v1_coco.pbtxt" LABELS_PATH = "--path-to:mscop_b" tf_tmap_b initLabels(PATH_TO_LABELS) cvNet = cv.dnn.readNetFromTensorflow(pb_path, pb_txt) img = cv.imread(sys.argv) rows = img.shape cols = img.shape cvNet.setInput(cv.dnn.blobFromImage(img, 1.0/ 127.5, (300, 300), (127.5, 127.5, 127.5), swapRB=True, crop=False)) cvOut = cvNet.forward() за откриване в cvOut: резултат = float(откриване), ако резултат > 0,25: ляво = int(откриване * cols) горе = int(откриване * редове) дясно = int(откриване * cols) bottom = int(откриване * редове) label = tf_labels.getLabel(int(откриване)) print(label, score, left, top , дясно, долу) text_color = (23, 230, 210) cv.rectangle(img, (ляво, горе), (дясно, долу), text_color, дебелина=2) cv.putText(img, етикет, (ляво, горе ), cv.FONT_HERSHEY_SIMPLEX, 1, цвят на текста, 2) cv.imshow("img", img) cv.waitKey()
Като цяло сега снимките на танка могат да бъдат разпознати от невронната мрежа и това е много важна стъпка в навигацията по отношение на разпознаването на ориентири. Само снимките обаче не бяха достатъчни за пълноценна навигация, беше необходимо да се измерват разстоянията до препятствията. Така че роботът получи ехолот. Свързването на риботърсача към Raspberry отнема малко работа - риботърсачът връща сигнал при 5V, докато Raspberry приема 3,3V. На коляното този проблем се решава главно от резистори на мозъчната платка, но не исках да ограждам такова занаятчийство на робота. В резултат на това беше открит чипът Level Shifter, който прави всичко необходимо и е с размер на нокът.

Освен това се погрижих външен видробот - не ми хареса много, че микросхемите и камерата с ехолота бяха залепени за картона. Развитието на технологиите в нашия свят ни позволява да режем пластмаса с лазер с разумна инвестиция на време и пари. Като цяло намерих работилница с лазерна машина, отделих малко време за изучаване на инструкциите за тази прекрасна машина и далеч от първия опит изрязах панели за микросхеми и камера с ехолот.

Всичко е готово за офлайн навигация, но задачата не беше толкова проста и при първия опит се разрових малко. Реших да си дам почивка, да помисля добре, да проуча аналозите. Може би тази навигация ще послужи като тема за отделна статия.

REST интерфейс, който предоставя на робота като база за по-нататъшна употреба:

GET /ping GET /версия GET /име 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

Защитете гърдите си от любопитни очи, без да помните кодовата комбинация или да използвате ключ. Вашето лице ще служи като ключ за отваряне на сандъка!

AT този проектпоказва как да използвате микрокомпютър Raspberry Pi и камера Pi, за да отворите сандък с помощта на технология за лицево разпознаване.

Софтуерната част на този проект е базирана на алгоритъма, представен в библиотеката за компютърно зрение OpenCV. Raspberry Pi е перфектната платформа за този проект, тъй като има достатъчно мощност за обработка, за да работи с OpenCV и е достатъчно малък, за да се побере навсякъде.

Този проект е със средна сложност. Той компилира и инсталира софтуерна микрокомпютър Raspberry Pi. Ако имате опит в изграждането на тези неща и нямате проблеми с използването на командния ред, тогава сте напълно готови да преминете през всички стъпки на този проект. Можете също така да се обърнете към помощните материали на учебната система Adafruit, ако срещнете някакви проблеми.

Стъпка 1: Подготовка на сандъка

  • Пробийте 7/16-инчов отвор в горната част на гърдите, за да поставите камерата Pi.
  • Пробийте по-голям отвор в задната част на гърдите, за да поставите бутона и захранващите кабели.

Стъпка 2: Направете резето

  • Инсталирайте щифт в предната част на гърдите, който ще бъде захванат от резето, когато сервото се завърти.
  • Направете малка рамка, за да поддържате Pi и серво резето. Сервото е прикрепено към рамката с дървена плоча и винтове с прорези.
  • Направете резе от две дървени плочи, залепени под прав ъгъл и прикрепени към серво рамото.

Стъпка #3: Завършване на сандъка

  • Проверете правилния контакт на рамката, Pi и резето в горната част на гърдите. Уверете се, че серво резето се завърта надолу и хваща щифта в предната част на гърдите.
  • Поставете щифтове, които минават през горната част на гърдите, за да поддържат рамката.
  • Поправете несъвършенствата в гърдите със стъргало и шкурка и след това шлайфайте дървената повърхност по желание.

Стъпка #4: Свързване на електронни компоненти

  • Свържете серво сигналната линия към GPIO пин 18 на Raspberry Pi. Захранването и заземяването на сервото трябва да бъдат свързани към клемите за захранване на батерията.
  • Свържете един щифт за бутон към щифта GPIO 25 на Pi и чрез резистор 10K към щифта за захранващо напрежение 3,3 V на Pi. Свържете втория щифт на бутона към заземяващия щифт на Pi.
  • Свържете заземяващите клеми на батерията и Pi заедно.
  • Инсталирайте камерата Pi през отвора в горната част на сандъка и свържете кабела към микрокомпютъра Pi.

Стъпка #5: Компилиране на OpenCV

  • На този етап трябва да инсталирате най-новата версия на OpenCV на вашия Raspberry Pi. За съжаление, първо трябва да компилирате OpenCV от изходния код, тъй като старата двоична версия не съдържа алгоритмите за разпознаване на лица, използвани в проекта. Компилирането на OpenCV на Pi отнема около 5 часа.
  • Включете Pi и се свържете с него чрез терминална сесия.
  • Изпълнете следните команди, за да инсталирате зависимости на OpenCV:

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

  • Изпълнете следните команди, за да изтеглите и разархивирате изходния код за най-новата версия на OpenCV:

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

  • Изпълнете следните команди, за да се подготвите за компилиране на изходния код на OpenCV:

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

  • Изпълнете следната команда, за да започнете да компилирате OpenCV (имайте предвид, че компилирането отнема около 5 часа):
  • След като компилирате OpenCV, изпълнете следната команда, за да инсталирате Pi:

Стъпка #6: Пробно разпознаване на лица

  • На този етап ще изпробваме алгоритми за лицево разпознаване, които ще ни позволят да отворим сандъка.
  • Изтеглете софтуера за този проект от хранилището на github (бележка под линия: https://github.com/tdicola/pi-facerec-box).
  • Разархивирайте архива и копирайте съдържанието в директория на Pi.
  • Докато сте в терминална сесия на Pi, прегледайте директорията и изпълнете следната команда, за да стартирате тестовия скрипт:

sudo python capture-positives.py

  • Докато скриптът работи, можете да натиснете бутона на гърдите, за да направите снимка с камерата на Pi. Скриптът ще се опита да открие едно лице в заснетото изображение и ще го запази като правилно заснет кадър в поддиректорията ./training/positive.
  • Всеки път, когато се заснеме изображение, във файла capture.pgm се записва рамка. Можете да го видите в графичен редактор, за да видите как камерата на Pi улавя и определя изображението на вашето лице.
  • Използвайте бутона, за да заснемете 5 или повече изображения на лицето си за правилни резултати. Опитайте се да получите изображения от различни ъгли, различно осветление и т.н. На снимките виждате изображенията на лицето, което получих.
  • Ако се интересувате, можете да прегледате директорията ./training/negative, която съдържа изображения от базата данни за лицево разпознаване на AT&T, които могат да се използват като примери за хора, които не трябва да имат достъп, за да отворят сандъка.
  • След като получите правилните изображения, изпълнете следните команди, за да обработите правилните и неправилните тестови изображения и да тествате алгоритъма за разпознаване на лица (имайте предвид, че тази тестова операция отнема около 10 минути):

python train.py

Стъпка #7: Серво конфигурация

  • На този етап е необходимо да се определи ширината на сервоимпулсите за заключване и отключване на резето.
  • С включено захранване на Raspberry Pi и сервото на резето, свържете се с Pi в терминална сесия. Уверете се, че сандъкът е отворен, за да можете да видите как сервото се движи без блокиране.
  • Изпълнете следната команда, за да стартирате интерактивна сесия на Python като root (трябва да имате достъп до GPIO пинове и да можете да премествате сервото):

sudo python

  • AT командна линия Python >>>, въведете тази команда, за да заредите RPIO серво библиотеката:

от RPIO импортирайте ШИМ

  • След това въведете следната команда:

серво = PWM.servo()

  • И накрая, изпълнете тази команда, за да преместите серво резето в централна позиция:

servo.set_servo(18, 1500)

  • Параметър 1500 за настройка на функцията set_servo определя ширината на импулса за задвижването в микросекунди. Екстремните стойности са в диапазона от 1000 до 2000.
  • Опитайте функцията set_servo с различна ширина на импулса, докато получите стойности, които затварят и отварят правилно ключалката, както е показано на снимките.
  • Не забравяйте, че можете да премахнете рамото на сервото и да го закрепите отново, за да ориентирате правилно ключалката на сервото.
  • След като стойностите бъдат взети, отворете config.py в текстов редакторс права на суперпотребител и променете следните стойности:
  • Задайте LOCK_SERVO_UNLOCKED на стойността на ширината на импулса, за да отключите позицията на ключалката - отключване. На моя хардуер правилната стойност е 2000.
  • Задайте LOCK_SERVO_LOCKED, за да определите позицията на ключалката - заключване. В моя случай тази стойност е 1100.

Стъпка #8: Стартиране на софтуера

  • След като проверите разпознаването на лица и калибрирате сервото, можете да стартирате програмния код!
  • С включено захранване на Raspberry Pi и сервото на ключалката, свържете се с Pi в терминална сесия и прегледайте основната директория на проекта.
  • Изпълнете следната команда, за да стартирате програмния код (бъдете внимателни, защото сандъкът веднага ще се заключи):

sudo python box.py

  • След като изтеглите тестовите данни (отнема няколко минути), насочете камерата към лицето си и натиснете бутона, за да опитате разпознаване на лица.
  • Ако сандъкът разпознае лицето ви, сервото ще работи и ще отключи резето. Ако лицето ви не бъде разпознато, терминалът ще покаже съобщение, показващо колко близо е било лицето ви до тестовото изображение.
  • Разпознаването на лица изисква заснетото изображение да съответства на тестовото изображение с ниво на сигурност 2000 или по-малко. Ако лицето ви съвпада с примерните данни за изображение, но степента на достоверност е ниска, можете да промените прага на достоверност в config.py (под настройката POSITIVE_THRESHOLD). Ако разпознаването все още не е надеждно, качете повече правилни заснети изображения и изпълнете тестово разпознаване отново. Алгоритъмът за разпознаване на лица в този проект е силно зависим от осветлението на лицето, така че опитайте да имате същия източник на светлина като при пробните изпълнения (или добавете някои допълнителни изображения при различни условия на осветление).
  • След като отворите сандъка, натиснете отново бутона, за да го затворите. Това не изисква операция за разпознаване на лица.
  • Ако сандъкът не се отваря добре и не разпознава лицето ви, следвайте стъпките за конфигуриране на серво, за да преместите ръчно сервото в отключена позиция, като използвате командата set_servo.

OpenCV е популярна функционална библиотека машинно зрение, които позволяват на роботите да разпознават обекти в света около тях. OpenCV се използва за навигация, откриване на препятствия, разпознаване на лица и жестове. Тази статия ще предложи стъпка по стъпка инструкцияза инсталиране на OpenCV на едноплатков компютър Raspberry Pi 3. Тази статия предшества и поредица от уроци, насочени към овладяване на основните функции на OpenCV.

Стъпка 1. Свободно пространство

OpenCV и различните поддържащи пакети заемат общо доста място. Силно препоръчително е да използвате SD карта с поне 16 GB. Първото нещо, което трябва да направите, преди да инсталирате OpenCV, е да разширите файловата система до целия размер на SD картата. Това става с помощта на конфигурационното меню на Raspbian. Влизаме в терминала и въвеждаме командата: $ sudo raspi-config Ще се отвори меню, в което трябва да изберете най-горния елемент: Натиснете Enter и след това бутона . След това рестартираме системата с командата: $ sudo reboot Ако имате SD карта с размер само 8 GB, можете да премахнете нещо допълнително, като например пакета wolfram-engine. $ sudo apt-get purge wolfram-engine Тази операция ще освободи допълнително 700 MB пространство.

Стъпка 2 Инсталирайте зависимости

За да работим напълно с OpenCV, ще трябва да актуализираме съществуващите пакети и да инсталираме няколко нови. Да започнем с актуализацията. $ sudo apt-get update $ sudo apt-get upgrade В зависимост от скоростта на интернет, тези операции ще отнемат около 5-10 минути. След това инсталирайте cmake в системата и още няколко полезни неща: $ sudo apt-get install build-essential cmake pkg-config След това пакети за работа с известни формати на изображения: $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper -dev libpng12- dev Видео пакети: $ sudo apt-get инсталирате libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get инсталирате libxvidcore-dev libx264-dev Пакети за създаване на прости екранни форми. Всичко това ще е необходимо по-късно. $ sudo apt-get install libgtk2.0-dev Специални ускорени матрични операции. $ sudo apt-get инсталирате libatlas-base-dev gfortran python 2.7 и 3 заглавни файлове $ sudo apt-get инсталирате python2.7-dev python3-dev

Стъпка 3 Изтеглете OpenCV от хранилището

Първо изтеглете архива със самия OpenCV. За да направите това, отидете в папката /home/pi/Downloads: $ cd ~/Downloads Изтеглете архива с помощта на wget и го разархивирайте: $ wget -O opencv.zip https://github.com/opencv/opencv/archive/ master .zip $ unzip opencv.zip След това изтеглете пакет с допълнителни неща - opencv_contrib. $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip $ разархивирайте opencv_contrib.zip

Стъпка 4. Виртуална среда

Преди да инсталираме OpenCV допълнително, ще изчистим малко нещата. Нека създадем виртуална среда, която ще защити по-нататъшните ни експерименти от основната част операционна система. Това е полезно в случай, че трябва да премахнете текущата версия на opencv и да инсталирате нова. Нека започнем с инсталирането на мениджъра на пакетите pip: $ wget https://bootstrap.pypa.io/get-pip.py $ sudo python get-pip.py След това инсталирайте мениджъра на виртуална среда: $ sudo pip install virtualenv virtualenvwrapper $ sudo rm -rf ~ /.cache/pip Добавяне на няколко реда към потребителския профил, който се съхранява във файла ~/.profile: $ echo -e "\n# virtualenv и virtualenvwrapper" >> ~/.profile $ echo " export WORKON_HOME=$HOME/.virtualenvs " >> ~/.profile $ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile Сега трябва да предприемете три стъпки:
  1. затворете всички терминални прозорци
  2. излез от профила си
  3. влезте отново
  4. отворете терминал и въведете командата: $ source ~/.profile
Забележка.По принцип тази команда сега се препоръчва да се въвежда всеки път, когато влизате в системата. След това създайте виртуална среда с име "cv": $ mkvirtualenv cv -p python3 За да проверите дали виртуалната среда е настроена правилно, рестартирайте Raspberry Pi: $ sudo reboot Отворете терминал и влезте в средата: $ source ~/.profile $ workon cv Индикатор, че сме във виртуална среда, ще има префикс (cv) в началото на командния ред.
Последното нещо, което трябва да направите, преди да създадете OpenCV, е да инсталирате математическия пакет NumPy: $ pip install numpy

Стъпка 5 Компилиране и инсталиране на OpenCV

Като сте в предварително създадената виртуална среда, отидете в папката източник на OpenCV и изпълнете командите: $ 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 .. В края на процедурата ще се появи списък с компоненти на OpenCV, готови за инсталиране.
Разделът, посветен на Python, е маркиран в червено. Е, сега най-интересното е сглобяването на двоични файлове. Без да напускате текущата папка, изпълнете командата make: $ make -j4 j4 означава, че ще изградим пакета, използвайки всичките 4 ядра на Raspberry Pi. Това значително ще ускори процедурата, но дори и при такива условия сглобяването ще отнеме около час и половина. Изграждането трябва да завърши с нещо подобно:
Забележка.Лично по време на монтажа системата висеше плътно няколко пъти. Тоест дори мишката не е мръднала. Изключването/включването на захранването и рестартирането на сборката с ключа -j2 помогна. Последното нещо, което трябва да направите, е да инсталирате вградения двоичен файл в папката на python: $ sudo make install $ sudo ldconfig

Стъпка 6: Завършване на инсталацията

След инсталирането файлът cv2.cpython-34m.so ще се появи в работещата папка на python, която трябва да бъде преименувана на нещо по-хармонично: $ cd /usr/local/lib/python3.4/site-packages/ $ sudo mv cv2.cpython -34m.so cv2.so За да можем да използваме OpenCV във виртуална среда, ще направим връзка там към получения cv2.so: $ cd ~/.virtualenvs/cv/lib/python3.4/ сайт-пакети/ $ ln -s /usr/local/lib/python3.4/сайт-пакети/cv2.so cv2.so

Стъпка 7. Проверете

За да проверите дали инсталацията е правилна, нека отидем във виртуалната среда, стартирайте интерпретатора на python и опитайте да импортирате cv2 модула: $ source ~/.profile $ workon cv $ python >>> import cv2 >>> cv2.__version__ " 3.1.0" >>> Това е - OpenCV е инсталиран успешно! В следващите уроци ще се занимаваме с обработката на изображения от видеокамера във връзка с роботиката.

Библиотека за компютърно зрение с отворен код

Това е библиотека за езика за програмиране Python, която опростява работата с машинно зрение (раздел за машинно обучение - Machine Learning).
За разбиране предлагам да разгледаме процеса на разпознаване на лица (класически), ако OpenCV не съществува:
  1. Първо, трябва да имате огромна колекция от изображения с и без лица на хора.
  2. Да структурирате този набор - да съпоставите всяко изображение с обяснение: има ли човешко лице на него.
  3. Разделете структурираната колекция равномерно и правилно на тренировъчни и контролни проби.
  4. След това, чрез изброяване и комбиниране на различни методи за машинно обучение („дърво“, „произволна гора“, „градиентно спускане“, „най-близки съседи“ и т.н.), създайте невронна мрежа, която дава приемлив резултат за разпознаване както на обучението, така и на контрола проби. Тази стъпка може да отнеме месеци (!) (в зависимост от наличните компютърни ресурси)
И разработчиците на OpenCV предоставят на всеки безплатен набор от първокласни алгоритми за машинно зрение за различни приложения - вземете го и го използвайте!)

ВНИМАНИЕ:

  • Подробностите за инсталиране на OpenCV на Raspbian са разгледани по-долу, но инструкциите са доста универсални за всички дистрибуции на семейството на Debian
  • инсталирането на OpenCV отнема много време (2-3 часа), но не е необходимо да извървите целия път наведнъж - можете да спрете и да продължите от същото място.
  • Ще се изисква.
  • Ние ще инсталираме на Raspberry Pi 3 на чист, прясно инсталиран Raspbian Desktop на най-новата версия. см.

Подготовка

Ще ви трябват 7 GB свободно място на флаш устройството.
За да проверите свободното място на флаш устройството, отворете терминала (Ctrl + Alt + T) и въведете командата
df-h
Ако няма достатъчно място, въпреки че обемът на флаш устройството трябва да позволява, тогава си струва да проверите дали файлова системаза целия наличен обем (в новите версии на комплекта за разпространение това вече се прави по подразбиране - от април 2018 г.).
Ако системата не е много нова, можете да отидете в раздела с основни настройки
sudo raspi-config
и изберете първия елемент „1. Разширете файловата система" и след това рестартирайте Raspberry

Инсталиране на необходимите пакети

Ако актуализации не са правени дълго време, тогава е препоръчително да ги направите сега.
sudo apt-get update -y && sudo apt-get upgrade -y
Инсталиране на набор от пакети за изграждане на програми от изходния код
sudo apt-get install build-essential cmake pkg-config -y
След това инсталирайте набор от библиотеки за работа с графично съдържание от различни формати
sudo apt-get инсталирате libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev -y
Същото важи и за видео съдържанието.
sudo apt-get инсталирате libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y sudo apt-get инсталирате libxvidcore-dev libx264-dev -y
Поставяме пакета за компилация на модула highgui за показване на изображения и интерфейси на екрана
sudo apt-get инсталирате libgtk2.0-dev -y
И накрая, библиотеката за линейна алгебра и компилаторът Fortran:
sudo apt-get инсталирате libatlas-base-dev gfortran -y

Python

След това инсталирайте Python (добре или Python). Базовите версии 2,7 и 3 вече са вградени в Raspbian, но ще са необходими допълнителни пакети:
sudo apt-get инсталирате python2.7-dev python3-dev -y
Освен това, за Python (добре, или Python), препоръчвам да инсталирате помощните програми virtualenv и virtualenvwrapper - това е аналог на „но само за Python, те ви позволяват да работите с Python в избраната „виртуална среда“ - набор от пакети на определени версии (аналози на Ruby gemsets) - това е удобно, когато работите върху няколко проекта с различни набори от библиотеки (и особено различни версии на библиотеки): за да преминете към, да речем, Python 2.7 с OpenCV 3.1, ще бъде достатъчно да въведете само една команда в терминала. Инсталирай:
sudo pip инсталирайте virtualenv virtualenvwrapper sudo rm -rf ~/.cache/pip echo -e "\n# virtualenv и virtualenvwrapper" >> ~/.profile echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile echo "източник /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile източник ~/.profile
Това има инсталирани зависимости.
Създайте виртуална среда с помощта на virtualenv. След това трябва да вземете решение за версията на Python - ако целта е да създадете проект от нулата, тогава трябва да изберете python3, в противен случай - python2
По време на историческото развитие на езика Python по време на уместността на версия 2.7, много от добри програми. И дори сега, в дните на стабилни 3.5 версии на Python 2.7, той все още не е забравен и се използва активно и се поддържа - имаше разклоняване. Същото е и с библиотеките на Python - не всички ще работят еднакво добре както на 2.7, така и на 3.5
mkvirtualenv cv -p python3
Уверяваме се, че вече сме в създадената виртуална среда cv. Това може да бъде разпознато от комбинацията “(cv)” в конзолата на текущия активен ред: И накрая, инсталирайте библиотеката Numpy за удобна работа с масиви и матрици с големи размери
pip инсталирайте numpy

Изтегляне на OpenCV от хранилище

Нека създадем папка за библиотеката в домашната директория и отидем в нея
cd ~ mkdir opencv cd opencv/
Нека вземем решение за версията на OpenCV.
След пускането на версия 3.0 по-старите версии 2.4.x продължават да се поддържат и пускат и има значителни разлики между тях. Например пакетът с плъгини 'contrib' е достъпен само за нови версии 3+.
Нека отидем на началната страница на проекта в секцията „Издания“. Предлагам допълнително да инсталирате най-новата версия (3+, а не 2.4.x.x) и да не вземете най-екстремната версия:
Така изборът падна върху версия 3.4.0.
За да получите връзка за изтегляне, отидете на изкл. Отворете хранилището на CV в раздела за версии: https://github.com/opencv/opencv/releases и копирайте връзката към zip архива на избраната версия:
Обратно към Raspberry.
Като сте в папката /opencv, изпълнете командата, за да изтеглите източниците:
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.0.zip
тази команда ще изтегли архива и ще го преименува на opencv.zip
Разопаковайте изтегления архив и след това го изтрийте:
разархивирайте opencv.zip rm opencv.zip
Изтеглете и разопаковайте същата версия на допълнителни модули принос(в случая - 3.4.0). Изключена страница за издания. хранилище: https://github.com/opencv/opencv_contrib/releases
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.0.zip разархивирайте opencv_contrib.zip rm opencv_contrib.zip
Резултатът трябва да е следният (командата ls показва съдържанието на текущата папка):

Компилиране и инсталиране на OpenCV

Още веднъж се уверете, че сме в създадената виртуална среда за OpenCV (глава за инсталиране на Python). Ако средата вече е създадена със сигурност, тогава можете да отидете до нея с командата workon cv
Отидете в папката на разопакования OpenCV архив (версия и съответно името на папката може да се различава):
cd opencv-3.4.0/
След това изпълняваме серия от команди, за да стартираме процеса на изграждане на инсталатора.
Това са 3 команди - последната многоредова, в нея СПЕЦИАЛЕНобърнете внимание на пътя до папката на разопакования архив на приноса:
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/модули\ -D BUILD_EXAMPLES=ON ..
В случай на успешно сглобяване ще видим следното. В момента току-що изпълнихме всички условия за компилиране на инсталатора на OpenCV, така че обърнете внимание на секцията Python3 (или Python2), трябва да е като на екранната снимка, в противен случай (или в случай на неуспех) проверете:
  • може би виртуалната среда (cv) не е била активирана по време на изграждането - workon cv
  • | Повече ▼ възможна причинанеуспешно: невалиден абсолютен път към папката с добавки принос
  • В краен случай можете да проверите текущата директория - трябва да сте в папката за изграждане на разопакования OpenCV архив на избраната версия
  • И накрая, уверете се, че версиите на основните и contrib пакетите съвпадат
Във всеки случай, всичко е наред) Трябва да проверите отново всичко и да започнете сглобяването отново
Ако изграждането е минало гладко, тогава всички условия за компилиране на инсталатора на OpenCV са изпълнени и сега ще изградим наша собствена свежа стабилна дистрибуция на OpenCV с допълнителни модули от източниците!
Започваме компилация
Параметър -j4означава броя на включените процесорни ядра, Raspberry Pi 3 има 4.
ВНИМАНИЕ!! Този процес ще отнеме в най-добрия случай около 1,5 часа!!!
направи-j4
Ако наблюдаваме срив през първите 5 минути от компилацията, това може да се случи дори при идеални условия, след което нулираме резултата и започваме компилация на едно ядро:
направи чист направи
Ако успеем, ще видим следното - процесът на компилация е 100% завършен
Остава да стартирате сглобения инсталатор с командата
sudo make install sudo ldconfig
Това е всичко, OpenCV е инсталиран на Raspberry! За удобното му използване единственото, което остава, е да го препратите към OpenCV в създадената Python виртуална среда (cv). Нека дефинираме директорията - тъй като OpenCV е библиотека на Python, тя трябва да е в папката на други библиотеки, проверете:
  • команда lsотпечатва съдържанието на указаната директория на терминала
  • не забравяйте да посочите в командата папката Python с версията, за която всъщност сте инсталирали OpenCV
ls /usr/local/lib/python3.5/site-packages/
В изключителни случаи библиотеката може да се намира в съседна папка dist пакети:
ls /usr/local/lib/python3.5/dist-packages/
Да отидем в тази директория
cd /usr/local/lib/python3.5/site-packages/
Преименувайте библиотечния файл - това ще улесни извикването му в Python код
sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
Копирайте пълния път до файла.

Нека отидем в библиотечната директория на виртуалната среда cv:
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
Нека създадем символна връзка към OpenCV тук:
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
Проверете резултата с командата ls:

Преглед

Отворете нов прозорец на терминала
източник ~/.profile workon cv python import cv2 cv2.__version__
Ако всичко е направено правилно, тогава в конзолата на Python библиотеката OpenCV се импортира без грешки.

В случай на грешка при импортиране, внимателно проверете правилността на преименуването на библиотечния файл и създаването на символна връзка към него (разширение - .so), както и успеха на прехода към cv виртуална среда