{"id":37914,"date":"2019-10-31T22:20:31","date_gmt":"2019-10-31T19:20:31","guid":{"rendered":"https:\/\/prohoster.info\/blog\/opencv-na-stm32f7-discovery\/"},"modified":"2019-10-31T22:20:31","modified_gmt":"2019-10-31T19:20:31","slug":"opencv-na-stm32f7-discovery","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/opencv-na-stm32f7-discovery","title":{"rendered":"OpenCV n\u00eb STM32F7-Discovery","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"OpenCV n\u00eb STM32F7-Discovery\" src=\"\/wp-content\/uploads\/2019\/09\/a2248ee685ee210ce8f7781435dd1d5a.jpg\" style=\"display:block;margin: 0 auto;\" \/> Un\u00eb jam nj\u00eb nga zhvilluesit e sistemit t\u00eb operimit <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>, dhe n\u00eb k\u00ebt\u00eb artikull do t\u00eb flas p\u00ebr m\u00ebnyr\u00ebn se si arrita t\u00eb aktivizoj OpenCV n\u00eb pllak\u00ebn STM32746G.<\/p>\n<p><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0431\u0438\u0442\u044c \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 &#171;OpenCV on STM32 board&#187;, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0430\u0445 STM32 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445.<br \/>\nEkzistojn\u00eb disa video q\u00eb, sipas titullit, duhet t\u00eb demonstrojn\u00eb at\u00eb q\u00eb duhet, por zakonisht (n\u00eb t\u00eb gjitha videoto q\u00eb kam par\u00eb) n\u00eb pllak\u00ebn STM32 \u00ebsht\u00eb kryer vet\u00ebm marrja e pamjes nga Kamera dhe shfaqja e rezultatit n\u00eb ekran, nd\u00ebrsa vet\u00eb p\u00ebrpunimi i imazhit b\u00ebhej ose n\u00eb nj\u00eb kompjuter t\u00eb zakonsh\u00ebm, ose n\u00eb pllaka m\u00eb t\u00eb fuqishme (p.sh., Raspberry Pi).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"pochemu-eto-slozhno\">Pse \u00ebsht\u00eb e v\u00ebshtir\u00eb?<\/h1>\n<p><\/p>\n<p>Popullariteti i k\u00ebrkimeve shpjegohet me faktin se OpenCV \u00ebsht\u00eb biblioteka m\u00eb popullore e vizionit kompjuterik, dhe kjo do t\u00eb thot\u00eb se shum\u00eb m\u00eb shum\u00eb zhvillues jan\u00eb t\u00eb njohur me t\u00eb, dhe mund\u00ebsia p\u00ebr t\u00eb aktivizuar kodin e gatsh\u00ebm p\u00ebr desktop n\u00eb mikrokontroller e thjeshton ndjesh\u00ebm procesin e zhvillimit. Por pse ende nuk ka ndonj\u00eb recet\u00eb t\u00eb njohur t\u00eb gatshme p\u00ebr zgjidhjen e k\u00ebsaj problemi?<\/p>\n<p><\/p>\n<p>Problemi i p\u00ebrdorimit t\u00eb OpenCV n\u00eb pllaka t\u00eb vogla \u00ebsht\u00eb i lidhur me dy karakteristika:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00ebse e kompiloni bibliotek\u00ebn madje edhe me nj\u00eb grup minimal module, n\u00eb memorien flash t\u00eb po asaj STM32F7Discovery ajo thjesht nuk do t\u00eb hyj\u00eb (madje pa marr\u00eb parasysh OS-n\u00eb) p\u00ebr shkak t\u00eb kodit shum\u00eb t\u00eb madh (disa megabajt instrukcionesh)<\/li>\n<li>Biblioteka vet\u00eb \u00ebsht\u00eb shkruar n\u00eb C++, dhe kjo do t\u00eb thot\u00eb\n<ul>\n<li>Duhet mb\u00ebshtetje p\u00ebr runtime-in e C++ (p\u00ebrjashtime etj.)<\/li>\n<li>Ka pak mb\u00ebshtetje LibC\/Posix, t\u00eb cilat zakonisht jan\u00eb n\u00eb OS-t\u00eb p\u00ebr sisteme t\u00eb integruara \u2014 nevojitet biblioteka standarde e C++ dhe biblioteka standarde e templatit STL (vektori etj.)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"portirovanie-na-embox\">Portimi n\u00eb Embox<\/h1>\n<p><\/p>\n<p>Si zakonisht, para se t\u00eb portoni ndonj\u00eb program n\u00eb nj\u00eb sistem operativ, nuk do t\u00eb ishte keq t\u00eb provoni ta nd\u00ebrtoni at\u00eb n\u00eb form\u00ebn q\u00eb e kan\u00eb menduar zhvilluesit. N\u00eb rastin ton\u00eb nuk ka probleme me k\u00ebt\u00eb \u2014 burimet mund t\u00eb gjenden n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opencv\/opencv\">GitHub<\/a><\/noindex>, biblioteka nd\u00ebrtrohet n\u00ebn GNU\/Linux me cmake t\u00eb zakonsh\u00ebm.<\/p>\n<p><\/p>\n<p>Nga lajmet e mira \u2014 OpenCV nga kutia mund t\u00eb nd\u00ebrtohet n\u00eb form\u00ebn e nj\u00eb biblioteke statike, gj\u00eb q\u00eb e b\u00ebn portimin m\u00eb t\u00eb leht\u00eb. Nd\u00ebrtojm\u00eb bibliotek\u00ebn me konfigurimin standard dhe shikojm\u00eb sa hap\u00ebsir\u00eb po z\u00eb. \u00c7do modul nd\u00ebrtohet n\u00eb nj\u00eb bibliotek\u00eb t\u00eb ve\u00e7ant\u00eb.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">&gt; size lib\/*so --totals\n   text    data     bss     dec     hex filename\n1945822   15431     960 1962213  1df0e5 lib\/libopencv_calib3d.so\n17081885     170312   25640 17277837    107a38d lib\/libopencv_core.so\n10928229     137640   20192 11086061     a928ed lib\/libopencv_dnn.so\n 842311   25680    1968  869959   d4647 lib\/libopencv_features2d.so\n 423660    8552     184  432396   6990c lib\/libopencv_flann.so\n8034733   54872    1416 8091021  7b758d lib\/libopencv_gapi.so\n  90741    3452     304   94497   17121 lib\/libopencv_highgui.so\n6338414   53152     968 6392534  618ad6 lib\/libopencv_imgcodecs.so\n21323564     155912  652056 22131532    151b34c lib\/libopencv_imgproc.so\n 724323   12176     376  736875   b3e6b lib\/libopencv_ml.so\n 429036    6864     464  436364   6a88c lib\/libopencv_objdetect.so\n6866973   50176    1064 6918213  699045 lib\/libopencv_photo.so\n 698531   13640     160  712331   ade8b lib\/libopencv_stitching.so\n 466295    6688     168  473151   7383f lib\/libopencv_video.so\n 315858    6972   11576  334406   51a46 lib\/libopencv_videoio.so\n76510375     721519  717496 77949390    4a569ce (TOTALS)<\/code><\/pre>\n<p><\/p>\n<p>Si\u00e7 duket nga rreshti i fundit, .bss dhe .data nuk z\u00ebn\u00eb aq shum\u00eb hap\u00ebsir\u00eb, por ka mbi 70 MiB kod. E qart\u00eb \u00ebsht\u00eb se n\u00ebse kjo lidhet statikisht me nj\u00eb aplikacion t\u00eb caktuar, kodi do t\u00eb zvog\u00eblohet.<\/p>\n<p><\/p>\n<p>Le t\u00eb p\u00ebrpiqemi t\u00eb heqim sa m\u00eb shum\u00eb module q\u00eb t\u00eb jet\u00eb e mundur, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb krijojm\u00eb nj\u00eb shembull minimal (i cili, p\u00ebr shembull, thjesht do t\u00eb tregoj\u00eb versionin e OpenCV), k\u00ebshtu q\u00eb po shohim <code>cmake .. -LA<\/code> dhe fikim n\u00eb opsione gjith\u00e7ka q\u00eb mund t\u00eb fiket.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">        -DBUILD_opencv_java_bindings_generator=OFF \n        -DBUILD_opencv_stitching=OFF \n        -DWITH_PROTOBUF=OFF \n        -DWITH_PTHREADS_PF=OFF \n        -DWITH_QUIRC=OFF \n        -DWITH_TIFF=OFF \n        -DWITH_V4L=OFF \n        -DWITH_VTK=OFF \n        -DWITH_WEBP=OFF<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">&gt; size lib\/libopencv_core.a --totals\n   text    data     bss     dec     hex filename\n3317069   36425   17987 3371481  3371d9 (TOTALS)<\/code><\/pre>\n<p><\/p>\n<p>Nga nj\u00ebra an\u00eb, ky \u00ebsht\u00eb vet\u00ebm nj\u00eb modul i bibliotek\u00ebs, nga ana tjet\u00ebr, ky \u00ebsht\u00eb pa optimizimin e kompilerit p\u00ebr madh\u00ebsin\u00eb e kodit (<code>-Os<\/code>). ~3 MiB kod \u2014 kjo \u00ebsht\u00eb ende e konsiderueshme, por tashm\u00eb jep shpres\u00eb p\u00ebr sukses.<\/p>\n<p><\/p>\n<h2 id=\"zapusk-v-emulyatore\">Ekzekutimi n\u00eb emulator<\/h2>\n<p><\/p>\n<p>N\u00eb emulator \u00ebsht\u00eb shum\u00eb m\u00eb e leht\u00eb t\u00eb b\u00ebsh debug, prandaj, fillimisht sigurohemi q\u00eb biblioteka funksionon n\u00eb qemu. Si platform\u00eb e emuluar kam zgjedhur Integrator\/CP, sepse, nga nj\u00ebra an\u00eb, \u00ebsht\u00eb gjithashtu ARM dhe, nga ana tjet\u00ebr, Embox mb\u00ebshtet daljen grafike p\u00ebr k\u00ebt\u00eb platform\u00eb.<\/p>\n<p><\/p>\n<p>\u0412 Embox \u0435\u0441\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c OpenCV \u043a\u0430\u043a \u043c\u043e\u0434\u0443\u043b\u044c (\u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u043e\u043f\u0446\u0438\u0438 \u0434\u043b\u044f &#171;\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439&#187; \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a), \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">version.cpp:\n\n#include \n#include \n\nint main() {\n    printf(\"OpenCV: %s\", cv::getBuildInformation().c_str());\n\n    return 0;\n}<\/code><\/pre>\n<p><\/p>\n<p>Nd\u00ebrtojm\u00eb sistemin, e ekzekutojm\u00eb \u2014 dhe marrim rezultatin e pritur.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">root@embox:\/*opencv_version *\/\nOpenCV: \nKonfigurimi i p\u00ebrgjithsh\u00ebm p\u00ebr OpenCV 4.0.1 =====================================\n  Kontrolli i versionit:               bd6927bdf-dirty\n\n  Platforma:\n    Data e koh\u00ebs:                   2019-06-21T10:02:18Z\n    Host:                        Linux 5.1.7-arch1-1-ARCH x86_64\n    Objektivi:                      Generic arm-unknown-none\n    CMake:                       3.14.5\n    Generatori i CMake:             Unix Makefiles\n    Instrumenti p\u00ebr nd\u00ebrtimin e CMake:            \/usr\/bin\/make\n    Konfigurimi:               Debug\n\n  Tiparet e CPU\/HW:\n    Baz\u00eb:\n      e k\u00ebrkuar:                 DETECT\n      e ndaluar:                  VFPV3 NEON\n\n  C\/C++:\n    Nd\u00ebrtuar si biblioteka dinamike?:      JO<\/code><\/pre>\n<p><\/p>\n<p>Hapi tjet\u00ebr \u00ebsht\u00eb t\u00eb ekzekutoni nj\u00eb shembull, m\u00eb mir\u00eb ndonj\u00eb standard nga ata q\u00eb ofrohen nga vet\u00eb zhvilluesit <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.opencv.org\/4.1.0\/examples.html\">n\u00eb faqen tuaj<\/a><\/noindex>. Kam zgjedhur <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.opencv.org\/4.1.0\/d6\/d56\/samples_2cpp_2edge_8cpp-example.html\">detektor t\u00eb skajeve K\u00ebni<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Shembulli ishte paksa e nevojshme ta rregulloja, p\u00ebr t\u00eb shfaqur imazhin me rezultatin direkt n\u00eb frame-buffer. Duhej ta b\u00ebja k\u00ebt\u00eb, pasi funksioni <code>imshow()<\/code> di t\u00eb vizatoj\u00eb imazhe p\u00ebrmes interface-ve QT, GTK dhe Windows, t\u00eb cilat, natyrisht, n\u00eb konfigurimin p\u00ebr STM32 nuk do t\u00eb jen\u00eb. N\u00eb t\u00eb v\u00ebrtet\u00eb, QT gjithashtu mund t\u00eb ekzekutohet n\u00eb STM32F7Discovery, por p\u00ebr k\u00ebt\u00eb do t\u00eb flitet n\u00eb nj\u00eb artikull tjet\u00ebr \ud83d\ude42<\/p>\n<p><\/p>\n<p>Pas nj\u00eb sqarimi t\u00eb shkurt\u00ebr mbi se n\u00eb cilin format ruhet rezultati i pun\u00ebs s\u00eb detektorit t\u00eb skajeve, marrim imazhin.<\/p>\n<p>\n<img decoding=\"async\" alt=\"OpenCV n\u00eb STM32F7-Discovery\" src=\"\/wp-content\/uploads\/2019\/09\/127f90ad8008340d73feb6ece02e52b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Imazhi origjinal<\/p>\n<p>\n<img decoding=\"async\" alt=\"OpenCV n\u00eb STM32F7-Discovery\" src=\"\/wp-content\/uploads\/2019\/09\/da34b3ac2561ae9f223acc5c4fe2a597.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Rezultati<\/em><\/p>\n<p><\/p>\n<h2 id=\"zapusk-na-stm32f7discovery\">Ekzekutimi n\u00eb STM32F7Discovery<\/h2>\n<p><\/p>\n<p>N\u00eb 32F746GDISCOVERY ka disa seksione t\u00eb ndryshme t\u00eb memories q\u00eb mund t'i p\u00ebrdorim n\u00eb nj\u00eb m\u00ebnyr\u00eb ose n\u00eb nj\u00eb tjet\u00ebr<\/p>\n<p><\/p>\n<ol>\n<li>320KiB memorie t\u00eb p\u00ebrkohshme<\/li>\n<li>1MiB memorie flash p\u00ebr figur\u00ebn<\/li>\n<li>8MiB SDRAM<\/li>\n<li>16MiB QSPI NAND-flash<\/li>\n<li>Priza p\u00ebr kart\u00ebn microSD<\/li>\n<\/ol>\n<p><\/p>\n<p>SD-karta mund t\u00eb p\u00ebrdoret p\u00ebr ruajtjen e imazheve, por n\u00eb kontekstin e ekzekutimit t\u00eb nj\u00eb shembulli minimal nuk \u00ebsht\u00eb shum\u00eb e dobishme.<br \/>\n\u0414\u0438\u0441\u043f\u043b\u0435\u0439 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 480&#215;272, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0444\u0435\u0440 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 522 240 \u0431\u0430\u0439\u0442 \u043f\u0440\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 32 \u0431\u0438\u0442\u0430, \u0442.\u0435. \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0444\u0435\u0440 \u0438 \u043a\u0443\u0447\u0443 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u043b\u044f OpenCV, \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440) \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0432 SDRAM, \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 (\u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u0441\u0442\u044d\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043d\u0443\u0436\u0434\u044b) \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432 RAM.<\/p>\n<p><\/p>\n<p>N\u00ebse merrni konfigurimin minimal p\u00ebr STM32F7Discovery (hiqni t\u00eb gjith\u00eb rrjetin, t\u00eb gjitha komandat, b\u00ebni stekat sa m\u00eb t\u00eb vogla dhe etj.) dhe e shtoni OpenCV me shembuj, kjo do t\u00eb ishte p\u00ebr sa i p\u00ebrket memories s\u00eb k\u00ebrkuar:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">   text    data     bss     dec     hex filename\n2876890  459208  312736 3648834  37ad42 build\/base\/bin\/embox<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebr ata q\u00eb nuk jan\u00eb shum\u00eb t\u00eb njohur me sekuencat q\u00eb shkojn\u00eb ku, le t\u00eb shpjegoj: n\u00eb <code>.text<\/code> dhe <code>.rodata<\/code> jan\u00eb ruajtur instruksionet dhe konstantet (p\u00ebr ta th\u00ebn\u00eb thjesht, t\u00eb dh\u00ebnat pa lexim), n\u00eb <code>.data<\/code> jan\u00eb t\u00eb dh\u00ebnat e ndryshueshme, n\u00eb <code>.bss<\/code> \u043b\u0435\u0436\u0438\u0442 &#171;\u0437\u0430\u043d\u0443\u043b\u0451\u043d\u043d\u044b\u0435&#187; \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043d\u0443\u0436\u043d\u043e \u043c\u0435\u0441\u0442\u043e (\u044d\u0442\u0430 \u0441\u0435\u043a\u0446\u0438\u044f &#171;\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f&#187; \u0432 RAM).<\/p>\n<p><\/p>\n<p>Lajmi i mir\u00eb \u00ebsht\u00eb se <code>.data<\/code>\/<code>.bss<\/code> duhen vendosur, por me <code>.text<\/code> problem \u2014 p\u00ebr imazhin ka vet\u00ebm 1MiB memorie. Mund ta heqim nga <code>.text<\/code> imazhin e shembujve dhe ta lexojm\u00eb, p\u00ebr shembull, nga karta SD n\u00eb memorie gjat\u00eb aktivizimit, por fruits.png ka pesh\u00eb rreth 330KiB, k\u00ebshtu q\u00eb kjo problem nuk e zgjidh: pjesa m\u00eb e madhe <code>.text<\/code> p\u00ebrb\u00ebhet pik\u00ebrisht nga kodi OpenCV.<\/p>\n<p><\/p>\n<p>\u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443, \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 QSPI-\u0444\u043b\u044d\u0448\u043a\u0443 (\u0443 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446. \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043b\u044f \u043c\u044d\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0448\u0438\u043d\u0443, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0430\u043c\u044f\u0442\u044c QSPI-\u0444\u043b\u044d\u0448\u043a\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c memory-mapped-\u0440\u0435\u0436\u0438\u043c), \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0435\u043b\u044c\u0437\u044f &#171;\u043f\u0440\u043e\u0448\u0438\u0442\u044c&#187; \u044d\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c.<\/p>\n<p><\/p>\n<p>N\u00eb fund, u vendos t\u00eb lidhet i gjith\u00eb kodi n\u00eb QSPI, dhe ta flashojm\u00eb me nj\u00eb boot loader t\u00eb shkruar nga vet\u00eb, i cili do t\u00eb merrte binarin e nevojsh\u00ebm p\u00ebrmes TFTP.<\/p>\n<p><\/p>\n<h1 id=\"rezultat\">Rezultati<\/h1>\n<p><\/p>\n<p>Ideja p\u00ebr t\u00eb portuar k\u00ebt\u00eb bibliotek\u00eb n\u00eb Embox ka lindur rreth nj\u00eb viti m\u00eb par\u00eb, por her\u00eb pas here \u00ebsht\u00eb shtyr\u00eb p\u00ebr shkak t\u00eb arsyeve t\u00eb ndryshme. Nj\u00ebra prej tyre \u00ebsht\u00eb mb\u00ebshtetje p\u00ebr libstdc++ dhe standardin e bibliotekave t\u00eb templatuara. Problemi i mb\u00ebshtetjes C++ n\u00eb Embox del p\u00ebrtej k\u00ebtij artikulli, ndaj k\u00ebtu do t\u00eb them vet\u00ebm se arrit\u00ebm t\u00eb sigurojm\u00eb k\u00ebt\u00eb mb\u00ebshtetje n\u00eb mas\u00ebn e nevojshme p\u00ebr funksionimin e k\u00ebsaj biblioteke \ud83d\ude42<\/p>\n<p><\/p>\n<p>N\u00eb fund, k\u00ebto probleme u kap\u00ebrcyen (t\u00eb pakt\u00ebn, n\u00eb mas\u00ebn e mjaftueshme p\u00ebr funksionimin e shembujve OpenCV), dhe shembulli u aktivizua. 40 sekonda t\u00eb gjata k\u00ebrkon blloku p\u00ebr t\u00eb gjetur kufijt\u00eb me filtrin Canny. Kjo, natyrisht, \u00ebsht\u00eb shum\u00eb e gjat\u00eb (ka propozime se si ta optimizojm\u00eb k\u00ebt\u00eb proces, p\u00ebr k\u00ebt\u00eb mund t\u00eb shkruajm\u00eb nj\u00eb artikull t\u00eb ve\u00e7ant\u00eb n\u00eb rast suksesi). <\/p>\n<p>\n<img decoding=\"async\" alt=\"OpenCV n\u00eb STM32F7-Discovery\" src=\"\/wp-content\/uploads\/2019\/09\/a400c72865ec17094efc985908914463.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Megjithat\u00eb, q\u00ebllimi nd\u00ebrmjet\u00ebs ishte krijimi i nj\u00eb prototipi q\u00eb do t\u00eb tregonte mund\u00ebsin\u00eb themelore t\u00eb aktivizimit t\u00eb OpenCV n\u00eb STM32, p\u00ebrkat\u00ebsisht, ky q\u00ebllim u arrit, urime!<\/p>\n<h4 id=\"tldr-poshagovaya-instrukciya\">tl;dr: udh\u00ebzim hap pas hapi<\/h4>\n<p><\/p>\n<p>0: Shkarkoni burimet e Embox, p\u00ebr shembull k\u00ebshtu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    git clone https:\/\/github.com\/embox\/embox &amp;&amp; cd .\/embox<\/code><\/pre>\n<p><\/p>\n<p>1: \u041d\u0430\u0447\u043d\u0451\u043c \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 &#171;\u043f\u0440\u043e\u0448\u044c\u0451\u0442&#187; QSPI-\u0444\u043b\u044d\u0448\u043a\u0443.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    make confload-arm\/stm32f7cube<\/code><\/pre>\n<p><\/p>\n<p>Tani duhet t\u00eb konfiguroni rrjetin, sepse do ta ngarkojm\u00eb imazhin p\u00ebrmes TFTP. P\u00ebr t\u00eb caktuar adresat IP t\u00eb kart\u00ebs dhe hostit, duhet t\u00eb modifikoni skedarin conf\/rootfs\/network.<\/p>\n<p><\/p>\n<p>Shembulli i konfigurimit:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">iface eth0 inet static\n    address 192.168.2.2\n    netmask 255.255.255.0\n    gateway 192.168.2.1\n    hwaddress aa:bb:cc:dd:ee:02<\/code><\/pre>\n<p><\/p>\n<p><code>gateway<\/code> \u2014 adresa e hostit nga ku do t\u00eb ngarkohet imazhi, <code>address<\/code> \u2014 adresa e kart\u00ebs.<\/p>\n<p><\/p>\n<p>Pasi t\u00eb keni b\u00ebr\u00eb k\u00ebt\u00eb, ndjekim krijimin e ngarkuesit:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    make<\/code><\/pre>\n<p><\/p>\n<p>2: Ngarkimi normal i ngarkuesit (falni p\u00ebr loj\u00ebn me fjal\u00eb) n\u00eb kart\u00eb \u2014 k\u00ebtu nuk ka asgj\u00eb specifike, duhet b\u00ebr\u00eb si p\u00ebr \u00e7do tjet\u00ebr aplikacion p\u00ebr STM32F7Discovery. N\u00ebse nuk e dini se si b\u00ebhet, mund t\u00eb lexoni p\u00ebr k\u00ebt\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/embox\/blog\/349034\/\">k\u00ebtu<\/a><\/noindex>.<br \/>\n3: Kompilimi i imazhit me konfigurimin p\u00ebr OpenCV.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    make confload-platform\/opencv\/stm32f7discovery\n    make<\/code><\/pre>\n<p><\/p>\n<p>4: Nxjerrja nga ELF e seksioneve q\u00eb duhet t\u00eb shkruhen n\u00eb QSPI, n\u00eb qspi.bin<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    arm-none-eabi-objcopy -O binary build\/base\/bin\/embox build\/base\/bin\/qspi.bin \n        --only-section=.text --only-section=.rodata \n        --only-section='.ARM.ex*' \n        --only-section=.data<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb direktorin\u00eb conf ndodhet nj\u00eb skript q\u00eb e b\u00ebn k\u00ebt\u00eb, k\u00ebshtu q\u00eb mund ta filloni at\u00eb<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    ..\/conf\/qspi_objcopy.sh # Binaries i nevojsh\u00ebm -- build\/base\/bin\/qspi.bin<\/code><\/pre>\n<p><\/p>\n<p>5: Me ndihm\u00ebn e tftp ngarkoni qspi.bin.bin n\u00eb QSPI-flash. N\u00eb host, p\u00ebr k\u00ebt\u00eb duhet t\u00eb kopjoni qspi.bin n\u00eb dosjen rr\u00ebnj\u00ebsore t\u00eb serverit tftp (zakonisht \u00ebsht\u00eb \/srv\/tftp\/ ose \/var\/lib\/tftpboot\/; paketat p\u00ebr serverin p\u00ebrkat\u00ebs jan\u00eb t\u00eb disponueshme n\u00eb shumic\u00ebn e shp\u00ebrndarjeve popullore, zakonisht quhen tftpd ose tftp-hpa, ndonj\u00ebher\u00eb duhet t\u00eb b\u00ebni <code>systemctl start tftpd.service<\/code> p\u00ebr t\u00eb filluar).<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    # \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f tftpd\n    sudo cp build\/base\/bin\/qspi.bin \/srv\/tftp\n    # \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f tftp-hpa\n    sudo cp build\/base\/bin\/qspi.bin \/var\/lib\/tftpboot<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb Embox (pra, n\u00eb ngarkues) duhet t\u00eb ekzekutoni k\u00ebt\u00eb komand\u00eb (duke supozuar se adresa e serverit \u00ebsht\u00eb 192.168.2.1):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    embox&gt; qspi_loader qspi.bin 192.168.2.1<\/code><\/pre>\n<p><\/p>\n<p>6: Me ndihm\u00ebn e komand\u00ebs <code>goto<\/code> \u043d\u0443\u0436\u043d\u043e &#171;\u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c&#187; \u0432 QSPI-\u043f\u0430\u043c\u044f\u0442\u044c. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0437 \u0441\u043b\u0438\u043d\u043a\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>mem 0x90000000<\/code> (adresa e fillimit p\u00ebrdoret n\u00eb fjal\u00ebn e dyt\u00eb 32-bit t\u00eb imazhit); gjithashtu do t\u00eb k\u00ebrkohet t\u00eb vendosni flamurin e stack-ut <code>-s<\/code>, adresa e stack-ut ndodhet n\u00eb adres\u00ebn 0x90000000, shembull:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    embox&gt;mem 0x90000000\n    0x90000000:     0x20023200  0x9000c27f  0x9000c275  0x9000c275\n                      \u2191           \u2191\n              kjo \u00ebsht\u00eb adresa    kjo \u00ebsht\u00eb  adresa \n                e stack-ut        e par\u00eb\n                           e instrukcionit\n\n    embox&gt;goto -i 0x9000c27f -s 0x20023200 # Flamuri -i \u00ebsht\u00eb i nevojsh\u00ebm p\u00ebr t\u00eb ndaluar nd\u00ebrprerjet gjat\u00eb inicimit t\u00eb sistemit<\/code><\/pre>\n<p><\/p>\n<p>7: Nisim<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    embox&gt; edges 20<\/code><\/pre>\n<p><\/p>\n<p>dhe shijoni k\u00ebrkimin e kufijve p\u00ebr 40 sekonda \ud83d\ude42<\/p>\n<p><\/p>\n<p>N\u00ebse ndodhi ndonj\u00eb problem \u2014 shkruani nj\u00eb \u00e7\u00ebshtje n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">repositori yn\u00eb<\/a><\/noindex>, ose n\u00eb list\u00ebn e postimeve embox-devel@googlegroups.com, ose n\u00eb komentet k\u00ebtu.<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/embox\/blog\/457724\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Embox, \u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c OpenCV \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 STM32746G. \u0415\u0441\u043b\u0438 \u0432\u0431\u0438\u0442\u044c \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 &#171;OpenCV on STM32 board&#187;, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0430\u0445 STM32 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0435\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0441\u0443\u0434\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28450,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37914","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/opencv-na-stm32f7-discovery\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47OpenCV \u043d\u0430 STM32F7-Discovery | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/opencv-na-stm32f7-discovery\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:20:31+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:31+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47OpenCV n\u00eb STM32F7-Discovery | ProHoster","description":"Un\u00eb jam nj\u00eb nga zhvilluesit e sistemit t\u00eb operimit","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/opencv-na-stm32f7-discovery","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47OpenCV \u043d\u0430 STM32F7-Discovery | ProHoster","og:description":"\u042f \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/opencv-na-stm32f7-discovery","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:20:31+00:00","article:modified_time":"2019-10-31T19:20:31+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37914","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:45:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:18:22","updated":"2026-01-23 19:45:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37914","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=37914"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37914\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/28450"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=37914"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=37914"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=37914"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}