{"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 operativ <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>, dhe n\u00eb k\u00ebt\u00eb artikull do t\u00eb ndaj me ju m\u00ebnyr\u00ebn se si e kam realizuar hapjen e OpenCV n\u00eb pllak\u00ebn STM32746G.<\/p>\n<p><\/p>\n<p>N\u00ebse k\u00ebrkoni n\u00eb motor\u00ebt e k\u00ebrkimit di\u00e7ka si &#171;OpenCV on STM32 board&#187;, mund t\u00eb gjeni nj\u00eb num\u00ebr t\u00eb madh personash q\u00eb interesohet p\u00ebr p\u00ebrdorimin e k\u00ebsaj biblioteke n\u00eb bordet STM32 ose mikrokontroler\u00eb t\u00eb tjer\u00eb.<br \/>\nEkzistojn\u00eb disa video q\u00eb, sipas emrit, duhet t\u00eb demonstrojn\u00eb at\u00eb q\u00eb \u00ebsht\u00eb e nevojshme, por zakonisht (n\u00eb t\u00eb gjitha videot q\u00eb kam par\u00eb) n\u00eb pllak\u00ebn STM32 \u00ebsht\u00eb realizuar vet\u00ebm marrja e figurave nga kamera dhe shfaqja e rezultatit n\u00eb ekran, nd\u00ebrsa procesimi i imazhit \u00ebsht\u00eb b\u00ebr\u00eb ose n\u00eb nj\u00eb kompjuter t\u00eb zakonsh\u00ebm, ose n\u00eb pllaka m\u00eb t\u00eb fuqishme (si\u00e7 \u00ebsht\u00eb Raspberry Pi).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"pochemu-eto-slozhno\">Pse \u00ebsht\u00eb kjo e komplikuar?<\/h1>\n<p><\/p>\n<p>Popullariteti i k\u00ebrkesave n\u00eb k\u00ebrkimin shpjegohet me faktin se OpenCV \u00ebsht\u00eb biblioteka m\u00eb e njohur p\u00ebr vizionin kompjuterik, q\u00eb do t\u00eb thot\u00eb se shum\u00eb zhvillues e njohin at\u00eb, dhe gjithashtu mund\u00ebsia p\u00ebr t\u00eb ekzekutuar kodin e gatsh\u00ebm p\u00ebr desktop n\u00eb mikro-kontroller e thjeshton ndjesh\u00ebm procesin e zhvillimit. Por pse ende nuk ka receta t\u00eb njohura t\u00eb gatshme p\u00ebr zgjidhjen e k\u00ebsaj probleme?<\/p>\n<p><\/p>\n<p>Problemi i p\u00ebrdorimit t\u00eb OpenCV n\u00eb pllaka t\u00eb vogla lidhet me dy karakteristika:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00ebse e kompilon bibliotek\u00ebn edhe me nj\u00eb grup minimal modulash, ajo nuk do t\u00eb hyj\u00eb n\u00eb memorin\u00eb flash t\u00eb STM32F7Discovery (madje pa marr\u00eb parasysh sistemin operativ) p\u00ebr shkak t\u00eb kodit shum\u00eb t\u00eb madh (disa megabajt instruksionesh).<\/li>\n<li>Biblioteka vet\u00eb \u00ebsht\u00eb shkruar n\u00eb C++, pra\n<ul>\n<li>K\u00ebrkohet mb\u00ebshtetje p\u00ebr runtime-in e C++ (p\u00ebrjashtime dhe t\u00eb tjera).<\/li>\n<li>Ka pak mb\u00ebshtetje p\u00ebr LibC\/Posix, t\u00eb cilat zakonisht jan\u00eb t\u00eb pranishme n\u00eb sistemet operative p\u00ebr sisteme t\u00eb embedded \u2014 \u00ebsht\u00eb e nevojshme nj\u00eb bibliotek\u00eb standarde e C++ dhe biblioteka standarde e templating STL (vector 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 b\u00ebhet portimi i ndonj\u00eb programi n\u00eb nj\u00eb sistem operative, \u00ebsht\u00eb mir\u00eb ta provosh at\u00eb t\u00eb nd\u00ebrtosh n\u00eb at\u00eb form\u00eb si\u00e7 e kishin 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\u00ebrtohet n\u00ebn GNU\/Linux me cmake t\u00eb zakonsh\u00ebm.<\/p>\n<p><\/p>\n<p>Nga lajmet e mira \u2014 OpenCV mund t\u00eb nd\u00ebrtohet si nj\u00eb bibliotek\u00eb statike nga kutia, q\u00eb e b\u00ebn portimin m\u00eb t\u00eb leht\u00eb. Nd\u00ebrtojm\u00eb bibliotek\u00ebn me konfigurimin standard dhe shohim sa hap\u00ebsir\u00eb z\u00eb ajo. \u00c7do modul nd\u00ebrtohet si 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 mund t\u00eb shihet nga rreshti i fundit, .bss dhe .data nuk z\u00ebn\u00eb shum\u00eb vend, p\u00ebrkundrazi kodi \u00ebsht\u00eb mbi 70 MiB. E qart\u00eb se n\u00ebse e \u00e7ojm\u00eb k\u00ebt\u00eb n\u00eb lidhje statike me nj\u00eb aplikacion t\u00eb caktuar, kodi do t\u00eb b\u00ebhet m\u00eb i vog\u00ebl.<\/p>\n<p><\/p>\n<p>Do t\u00eb p\u00ebrpiqemi t\u00eb heqim sa m\u00eb shum\u00eb module, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb nd\u00ebrtojm\u00eb nj\u00eb shembull minimal (i cili, p\u00ebr shembull, thjesht do t\u00eb tregoj\u00eb versionin e OpenCV), k\u00ebshtu q\u00eb le t\u00eb shohim. <code>cmake .. -LA<\/code> dhe s\u00eb pari \u00e7aktivizojm\u00eb n\u00eb opsionet gjith\u00e7ka q\u00eb mund t\u00eb \u00e7aktivizohet.<\/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 modull i bibliotek\u00ebs, nga ana tjet\u00ebr, ky \u00ebsht\u00eb pa optimizim t\u00eb kompilatorit p\u00ebr madh\u00ebsin\u00eb e kodit (<code>-Os<\/code>). ~3 MiB kod \u2013 kjo ende \u00ebsht\u00eb nj\u00eb sasi 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>T\u00eb debuguar n\u00eb emulator \u00ebsht\u00eb shum\u00eb m\u00eb e leht\u00eb, prandaj s\u00eb pari t\u00eb sigurohemi q\u00eb biblioteka punon n\u00eb qemu. Si platform\u00eb e emuluar kam zgjedhur Integrator\/CP, sepse, p\u00ebrve\u00e7 k\u00ebsaj, \u00ebsht\u00eb gjithashtu ARM, dhe p\u00ebr m\u00eb tep\u00ebr, Embox mb\u00ebshtet daljen grafike p\u00ebr k\u00ebt\u00eb platform\u00eb.<\/p>\n<p><\/p>\n<p>N\u00eb Embox ka nj\u00eb mekaniz\u00ebm p\u00ebr nd\u00ebrtimin e bibliotekave t\u00eb jashtme, me t\u00eb cilin ne shtojm\u00eb OpenCV si modul (duke kaluar t\u00eb nj\u00ebjtat opsione p\u00ebr nd\u00ebrtimin &#171;minimal&#187; n\u00eb form\u00ebn e bibliotekave statike), pas k\u00ebsaj un\u00eb shtoj nj\u00eb aplikacion t\u00eb thjesht\u00eb q\u00eb duket k\u00ebshtu:<\/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 \u2013 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    Koha:                   2019-06-21T10:02:18Z\n    Kompjuteri:                        Linux 5.1.7-arch1-1-ARCH x86_64\n    Target:                      Generic arm-unknown-none\n    CMake:                       3.14.5\n    Generatori CMake:             Unix Makefiles\n    Mjeti i nd\u00ebrtimit CMake:            \/usr\/bin\/make\n    Konfigurimi:               Debug\n\n  Karakteristika CPU\/HW:\n    Baz\u00eb:\n      e k\u00ebrkuar:                 DETECT\n      e \u00e7aktivizuar:                  VFPV3 NEON\n\n  C\/C++:\n    Nd\u00ebrtuar si libra dinamik?:      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 e tyre<\/a><\/noindex>. Un\u00eb zgjodha <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.opencv.org\/4.1.0\/d6\/d56\/samples_2cpp_2edge_8cpp-example.html\">detektorin e kufijve K\u00ebnni<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Shembulli duhet t\u00eb ri-shkruhej pak, p\u00ebr t\u00eb shfaqur imazhin me rezultatin drejtp\u00ebrdrejt n\u00eb framebuffer. K\u00ebt\u00eb duhej ta b\u00ebja, pasi funksioni <code>imshow()<\/code> di t\u00eb vizatoj\u00eb imazhe p\u00ebrmes nd\u00ebrfaqeve QT, GTK dhe Windows, t\u00eb cilat, sigurisht, nuk do t\u00eb jen\u00eb n\u00eb konfigurimin p\u00ebr STM32. N\u00eb t\u00eb v\u00ebrtet\u00eb, QT gjithashtu mund t\u00eb iniciohet 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 verifikim t\u00eb shkurt\u00ebr t\u00eb formatit t\u00eb ruajtjes s\u00eb rezultatit t\u00eb detektorit t\u00eb skajit, ne 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\">Nj\u00eb p\u00ebrfillje n\u00eb STM32F7Discovery<\/h2>\n<p><\/p>\n<p>N\u00eb 32F746GDISCOVERY ka disa segmente memorjeje q\u00eb mund t'i p\u00ebrdorim n\u00eb nj\u00eb far\u00eb m\u00ebnyre.<\/p>\n<p><\/p>\n<ol>\n<li>320KiB memorie operative<\/li>\n<li>1MiB memorie flash p\u00ebr imazhin<\/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 shembujve minimal\u00eb, kjo nuk \u00ebsht\u00eb shum\u00eb e dobishme.<br \/>\nEkrani ka nj\u00eb rezolut\u00eb prej 480&#215;272, q\u00eb do t\u00eb thot\u00eb se memorie p\u00ebr frame buffer do t\u00eb p\u00ebrb\u00ebj\u00eb 522 240 byte me thell\u00ebsi 32 bit, pra, kjo \u00ebsht\u00eb m\u00eb shum\u00eb se sa madh\u00ebsia e memories RAM, k\u00ebshtu q\u00eb frame buffer dhe heap (q\u00eb do t\u00eb nevojitet gjithashtu p\u00ebr OpenCV, p\u00ebr t\u00eb ruajtur t\u00eb dh\u00ebnat p\u00ebr imazhet dhe struktura ndihm\u00ebse) do t\u00eb vendosen n\u00eb SDRAM, gjith\u00eb t\u00eb tjera (memoria p\u00ebr stek dhe nevoja t\u00eb tjera sistemore) do t\u00eb d\u00ebrgohen n\u00eb RAM.<\/p>\n<p><\/p>\n<p>N\u00ebse marrim konfigurimin minimal p\u00ebr STM32F7Discovery (heqim t\u00eb gjith\u00eb rrjetin, t\u00eb gjitha komandat, e b\u00ebjm\u00eb stek\u00ebt sa m\u00eb t\u00eb vegj\u00ebl dhe t\u00eb tjera) dhe t\u00eb shtojm\u00eb OpenCV me shembuj, at\u00ebher\u00eb k\u00ebrkesat p\u00ebr memorie do t\u00eb jen\u00eb si m\u00eb posht\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">   teksti    t\u00eb dh\u00ebna     bss     dec     hex emri i skedarit\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 se cilat seksione i p\u00ebrkasin, le t\u00eb shpjegoj: n\u00eb <code>.text<\/code> dhe <code>.rodata<\/code> jan\u00eb instruksionet dhe konstantet (n\u00eb terma t\u00eb thjeshta, t\u00eb dh\u00ebna readonly), n\u00eb <code>.data<\/code> jan\u00eb t\u00eb dh\u00ebnat e ndryshueshme, n\u00eb <code>.bss<\/code> ka variabla &#171;zero&#187;, p\u00ebr t\u00eb cilat, megjithat\u00eb, nevojitet hap\u00ebsir\u00eb (kjo seksion do t\u00eb &#171;d\u00ebrgohet&#187; n\u00eb RAM).<\/p>\n<p><\/p>\n<p>Lajmi i mir\u00eb \u00ebsht\u00eb se <code>.data<\/code>\/<code>.bss<\/code> duhen vendosur, por k\u00ebtu \u00ebsht\u00eb <code>.text<\/code> problemi \u2014 p\u00ebr imazhin ka vet\u00ebm 1MiB t\u00eb memories. Mund t\u00eb hiqni imazhin nga shembulli dhe ta lexoni, p\u00ebr shembull, nga nj\u00eb SD kart\u00eb n\u00eb memory gjat\u00eb nisjes, por fruits.png peshon rreth 330KiB, k\u00ebshtu q\u00eb kjo nuk zgjidh problemin: pjesa m\u00eb e madhe <code>.text<\/code> merrni imazhin nga shembulli dhe lexoni at\u00eb, p\u00ebr shembull, nga nj\u00eb kart\u00eb SD n\u00eb kujtes\u00eb gjat\u00eb nisjes, por fruits.png peshon rreth 330KiB, k\u00ebshtu q\u00eb kjo nuk do ta zgjidh\u00eb problemin: pjesa m\u00eb e madhe <code>.text<\/code> \u00ebsht\u00eb p\u00ebrb\u00ebr\u00eb pik\u00ebrisht nga kodi OpenCV.<\/p>\n<p><\/p>\n<p>N\u00eb thelb, ngelet vet\u00ebm nj\u00eb gj\u00eb - ngarkimi i nj\u00eb pjese t\u00eb kodit n\u00eb QSPI-flash (ajo ka nj\u00eb mod t\u00eb ve\u00e7ant\u00eb funksionimi p\u00ebr mapimin e memories n\u00eb autobus sistemor, n\u00eb m\u00ebnyr\u00eb q\u00eb procesori t\u00eb mund t\u00eb aksesoj\u00eb k\u00ebto t\u00eb dh\u00ebna drejtp\u00ebrdrejt). Megjithat\u00eb, shfaqet nj\u00eb problem: s\u00eb pari, memoria e QSPI-flash-it nuk \u00ebsht\u00eb e disponueshme menj\u00ebher\u00eb pas rivendosjes s\u00eb pajisjes (duhet t\u00eb inicializohet ve\u00e7mas moda memory-mapped), s\u00eb dyti, nuk mund t\u00eb &#171;programohet&#187; kjo memorie me nj\u00eb bootloader t\u00eb zakonsh\u00ebm.<\/p>\n<p><\/p>\n<p>P\u00ebrfundimisht, u vendos q\u00eb t\u00eb lidhim t\u00eb gjith\u00eb kodin n\u00eb QSPI dhe ta ngarkohet me nj\u00eb bootloader t\u00eb shkruar vet\u00eb, i cili do t\u00eb marr\u00eb binarin e nevojsh\u00ebm p\u00ebrmes TFTP.<\/p>\n<p><\/p>\n<h1 id=\"rezultat\">Rezultati<\/h1>\n<p><\/p>\n<p>Idea p\u00ebr t\u00eb portuar k\u00ebt\u00eb bibliotek\u00eb n\u00eb Embox ka lindur rreth nj\u00eb vit m\u00eb par\u00eb, por vazhdimisht \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 bibliotek\u00ebn standarde t\u00eb template. Problemi i mb\u00ebshtetjes s\u00eb C++ n\u00eb Embox kalon jasht\u00eb k\u00ebsaj artikulli, prandaj k\u00ebtu do t\u00eb thosha vet\u00ebm se arrit\u00ebm t\u00eb sigurojm\u00eb k\u00ebt\u00eb mb\u00ebshtetje n\u00eb p\u00ebrmasat e nevojshme p\u00ebr funksionimin e k\u00ebsaj biblioteke \ud83d\ude42<\/p>\n<p><\/p>\n<p>P\u00ebrfundimisht, k\u00ebto probleme u p\u00ebrball\u00ebn (t\u00eb pakt\u00ebn, n\u00eb mas\u00ebn e nevojshme p\u00ebr funksionimin e shembullit OpenCV), dhe shembulli filloi. 40 sekonda t\u00eb gjat\u00eb i duhen bordit p\u00ebr t\u00eb gjetur kufijt\u00eb me filtrin Canny. Kjo, sigurisht, \u00ebsht\u00eb shum\u00eb e gjat\u00eb (ka disa propozime se si ta optimizojm\u00eb k\u00ebt\u00eb, p\u00ebr t\u00eb cilat mund t\u00eb shkruajm\u00eb nj\u00eb artikull t\u00eb ve\u00e7ant\u00eb n\u00eb rast se kemi sukses). <\/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, synimi 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, k\u00ebshtu q\u00eb ky synim u arrit, urime!<\/p>\n<h4 id=\"tldr-poshagovaya-instrukciya\">tl;dr: udh\u00ebzime 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: Le t\u00eb fillojm\u00eb me nd\u00ebrtimin e bootloader-it, i cili do t\u00eb &#171;programoj\u00eb&#187; QSPI-flash-in.<\/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 t\u00eb ngarkojm\u00eb imazhin p\u00ebrmes TFTP. P\u00ebr t\u00eb caktuar adresat IP t\u00eb bordit dhe hostit, duhet t\u00eb ndryshoni skedarin conf\/rootfs\/network.<\/p>\n<p><\/p>\n<p>Shembulli i konfiguracionit:<\/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 e cila do t\u00eb ngarkohet imazhi, <code>adres\u00eb<\/code> \u2014 adresa e bordit.<\/p>\n<p><\/p>\n<p>Pas k\u00ebsaj, ne do t\u00eb rind\u00ebrtojm\u00eb bootloader-in:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    make<\/code><\/pre>\n<p><\/p>\n<p>2: Ngarkimi normal i bootloader-it (falni p\u00ebr loj\u00ebn me fjal\u00eb) n\u00eb bord \u2014 k\u00ebtu nuk ka asgj\u00eb specifike, duhet ta b\u00ebni si p\u00ebr \u00e7do aplikacion tjet\u00ebr p\u00ebr STM32F7Discovery. N\u00ebse nuk e dini si ta b\u00ebni k\u00ebt\u00eb, mund t\u00eb lexoni rreth saj <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 e sekzioneve nga ELF 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 direktoriumin conf \u00ebsht\u00eb skripti q\u00eb e b\u00ebn k\u00ebt\u00eb, k\u00ebshtu q\u00eb mund ta nisni 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 ngarkojm\u00eb qspi.bin.bin n\u00eb flash-in QSPI. N\u00eb host p\u00ebr k\u00ebt\u00eb, ne duhet t\u00eb kopjojm\u00eb qspi.bin n\u00eb folderin rr\u00ebnj\u00eb t\u00eb serverit tftp (zakonisht \u00ebsht\u00eb \/srv\/tftp\/ ose \/var\/lib\/tftpboot\/; paketat p\u00ebr serverin p\u00ebrkat\u00ebs jan\u00eb n\u00eb shumic\u00ebn e distribucioneve t\u00eb njohura, zakonisht quhet tftpd ose tftp-hpa, ndonj\u00ebher\u00eb duhet b\u00ebr\u00eb <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 (dmth. n\u00eb bootloader) duhet t\u00eb ekzekutohet nj\u00eb komand\u00eb t\u00eb till\u00eb (t\u00eb supozojm\u00eb q\u00eb 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> duhet t\u00eb &#171;k\u00ebrceni&#187; n\u00eb memorien QSPI. Lokacioni specifik do t\u00eb ndryshoj\u00eb var\u00ebsisht nga m\u00ebnyra se si p\u00ebrfundohet imazhi, ky adres\u00eb mund t\u00eb shikohet me komand\u00ebn <code>mem 0x90000000<\/code> (adresa e nisjes vendoset n\u00eb fjalin\u00eb e dyt\u00eb 32-bit t\u00eb imazhit); gjithashtu do t\u00eb k\u00ebrkohet q\u00eb t\u00eb vendosim stek-un me flagun <code>-s<\/code>, adresa e stek-ut \u00ebsht\u00eb n\u00eb adres\u00ebn 0x90000000, shembuj:<\/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 stek-ut        e par\u00eb\n                           instrukcioneve\n\n    embox&gt;goto -i 0x9000c27f -s 0x20023200 # Flag-u -i \u00ebsht\u00eb i nevojsh\u00eb p\u00ebr t\u00eb ndaluar nd\u00ebrprerjet gjat\u00eb inicimit t\u00eb sistemit<\/code><\/pre>\n<p><\/p>\n<p>7: Po fillojm\u00eb<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">    embox&gt; skaj 20<\/code><\/pre>\n<p><\/p>\n<p>dhe shijojm\u00eb nj\u00eb k\u00ebrkim 40-sekond\u00ebsh p\u00ebr kufij \ud83d\ude42<\/p>\n<p><\/p>\n<p>N\u00ebse di\u00e7ka nuk shkon si\u00e7 duhet \u2014 shkruani nj\u00eb issue n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">depon ton\u00eb<\/a><\/noindex>, ose n\u00eb list\u00ebn 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.0.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 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 &quot;OpenCV on STM32 board&quot;, \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\" \/>\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.0.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 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 &quot;OpenCV on STM32 board&quot;, \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\" \/>\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 operativ Embox, dhe n\u00eb k\u00ebt\u00eb artikull do t\u00eb tregoj se si kam arritur t\u00eb aktivizoj OpenCV n\u00eb bordin STM32746G. N\u00ebse shkruani n\u00eb motorin tuaj t\u00eb k\u00ebrkimit di\u00e7ka si \"OpenCV on STM32 board\", do t\u00eb gjeni shum\u00eb ata q\u00eb interesohen p\u00ebr p\u00ebrdorimin e k\u00ebsaj biblioteke n\u00eb platformat STM32 ose mikrocontroller t\u00eb tjer\u00eb. Ka disa video q\u00eb, gjykuar","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 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 &quot;OpenCV on STM32 board&quot;, \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","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}]}}