FurCV ee STM32F7-Daahfurka

FurCV ee STM32F7-Daahfurka Waxaan ahay mid ka mid ah kuwa horumariya nidaamka qalliinka Ebox-ka, iyo in this article waxaan ka hadli doonaa oo ku saabsan sida aan u suurtagashay in ay maamulaan OpenCV on guddiga STM32746G.

Haddii aad ku qorto wax sida "OpenCV on board STM32" mashiinka raadinta, waxaad ka heli kartaa dad aad u tiro yar oo xiiseynaya isticmaalka maktabadan sabuuradaha STM32 ama kuwa kale ee yar yar.
Waxaa jira dhowr fiidiyow oo, ku xukumaya magaca, waa inay muujiyaan waxa loo baahan yahay, laakiin sida caadiga ah (dhammaan fiidiyowyada aan arkay) ee guddiga STM32, kaliya sawirka ayaa laga helay kamarada natiijadana waxaa lagu soo bandhigay shaashadda, iyo habaynta sawirka lafteeda waxaa lagu sameeyay kombuyuutar caadi ah, ama loox ka awood badan (tusaale, Raspberry Pi).

Maxay u adag tahay?

Caannimada weydiimaha raadinta waxaa lagu macneeyay xaqiiqda ah in OpenCV ay tahay maktabadda aragga kumbuyuutarka ee ugu caansan, taas oo macnaheedu yahay in horumariyayaal badan ay yaqaanaan, iyo awoodda lagu socodsiiyo koodhka diyaarsan ee desktop-ka ee microcontroller ayaa si weyn u fududeynaya geeddi-socodka horumarka. Laakiin sababta weli loo waayay cuntooyin diyaarsan oo caan ah oo lagu xallinayo dhibaatadan?

Dhibaatada isticmaalka OpenCV ee shawlyada yaryar waxay la xiriirtaa laba sifo:

  • Haddii aad ururiso maktabadda xitaa iyada oo leh qaybo yar oo ka mid ah cutubyada, si fudud kuma habboonaan doonto xusuusta flash-ka ee isla STM32F7Discovery (xitaa iyada oo aan xisaabta lagu darin OS) sababtuna tahay kood aad u weyn (dhowr megabyte oo tilmaamo ah)
  • Maktabadda lafteedu waxay ku qoran tahay C++, taas oo macnaheedu yahay
    • Waxay u baahan tahay taageero wakhti runtime wanaagsan (ka reeban, iwm.)
    • Taageero yar oo loogu talagalay LibC/Posix, oo inta badan laga helo OS ee nidaamyada ku-xidhan - waxaad u baahan tahay maktabad caadi ah oo lagu daray iyo maktabad qaab STL oo caadi ah (vector, iwm.)

Udiraya Embox

Sida caadiga ah, ka hor inta aanad u gudbin wax barnaamij ah nidaamka hawlgalka, waxaa fiican inaad isku daydo inaad ku dhisto qaabka ay horumariyayaashu ugu tala galeen. Xaaladeena, ma jiraan wax dhibaato ah oo tan ah - koodhka isha ayaa laga heli karaa github, maktabadda waxaa lagu hoos dhisay GNU/Linux oo leh cmake caadiga ah.

Akhbaarta wanaagsan ayaa ah in OpenCV loo dhisi karo sidii maktabad joogto ah oo ka baxsan sanduuqa, taas oo fududeyneysa gudbinta. Waxaan aruurineynaa maktabad leh qaabeyn caadi ah waxaanan aragnaa inta boos ee ay qaadanayaan. Qayb walba waxa lagu ururiyaa maktabad gaar ah.

> size lib/*so --totals
   text    data     bss     dec     hex filename
1945822   15431     960 1962213  1df0e5 lib/libopencv_calib3d.so
17081885     170312   25640 17277837    107a38d lib/libopencv_core.so
10928229     137640   20192 11086061     a928ed lib/libopencv_dnn.so
 842311   25680    1968  869959   d4647 lib/libopencv_features2d.so
 423660    8552     184  432396   6990c lib/libopencv_flann.so
8034733   54872    1416 8091021  7b758d lib/libopencv_gapi.so
  90741    3452     304   94497   17121 lib/libopencv_highgui.so
6338414   53152     968 6392534  618ad6 lib/libopencv_imgcodecs.so
21323564     155912  652056 22131532    151b34c lib/libopencv_imgproc.so
 724323   12176     376  736875   b3e6b lib/libopencv_ml.so
 429036    6864     464  436364   6a88c lib/libopencv_objdetect.so
6866973   50176    1064 6918213  699045 lib/libopencv_photo.so
 698531   13640     160  712331   ade8b lib/libopencv_stitching.so
 466295    6688     168  473151   7383f lib/libopencv_video.so
 315858    6972   11576  334406   51a46 lib/libopencv_videoio.so
76510375     721519  717496 77949390    4a569ce (TOTALS)

Sida aad ka arki karto safka ugu dambeeya, .bss iyo .data ma qaataan meel badan, laakiin koodka ayaa ka badan 70 MiB. Way caddahay in haddii tani ay si joogto ah ugu xidhan tahay codsi gaar ah, koodku wuu yaraan doonaa.

Aan isku dayno inaan tuurno inta ugu badan ee suurtogalka ah si tusaale ugu yar la isugu keeno (kaas oo, tusaale ahaan, si fudud u soo saari doona nooca OpenCV), markaa waxaan eegnaa cmake .. -LA oo dami ikhtiyaaraadka wax kasta oo dami.

        -DBUILD_opencv_java_bindings_generator=OFF 
        -DBUILD_opencv_stitching=OFF 
        -DWITH_PROTOBUF=OFF 
        -DWITH_PTHREADS_PF=OFF 
        -DWITH_QUIRC=OFF 
        -DWITH_TIFF=OFF 
        -DWITH_V4L=OFF 
        -DWITH_VTK=OFF 
        -DWITH_WEBP=OFF 
        <...>

> size lib/libopencv_core.a --totals
   text    data     bss     dec     hex filename
3317069   36425   17987 3371481  3371d9 (TOTALS)

Dhanka kale, kani waa hal cutub oo maktabadda ah, dhanka kale, tani waa iyada oo aan la hagaajin kombuyuutarrada cabbirka koodka (-Os). ~ 3 MiB ee koodka ayaa weli ah wax badan, laakiin mar hore waxay siisaa rajo guul.

Ku orod emulator-ka

Aad bay u fududahay in lagu saxo emulator-ka, markaa marka hore iska hubi in maktabaddu ku shaqeyso qemu. Sida madal lagu daydo, waxaan doortay Integrator / CP, sababtoo ah Marka hore, sidoo kale waa ARM, marka labaadna, Embox waxay taageertaa wax soo saarka garaafyada ee goobtan.

Embox waxay leedahay hannaan lagu dhiso maktabado dibadda ah, annagoo adeegsanayna waxaan ku darnaa OpenCV module ahaan (in la dhaafiyo dhammaan xulashooyinka isku midka ah ee "ugu yar" dhismaha qaab maktabado taagan), intaas ka dib waxaan ku darayaa codsi fudud oo sidan u eg:

version.cpp:

#include <stdio.h>
#include <opencv2/core/utility.hpp>

int main() {
    printf("OpenCV: %s", cv::getBuildInformation().c_str());

    return 0;
}

Waxaan soo ururineynaa nidaamka, socodsiin - waxaan helnaa wax soo saarka la filayo.

root@embox:/#opencv_version                                                     
OpenCV: 
General configuration for OpenCV 4.0.1 =====================================
  Version control:               bd6927bdf-dirty

  Platform:
    Timestamp:                   2019-06-21T10:02:18Z
    Host:                        Linux 5.1.7-arch1-1-ARCH x86_64
    Target:                      Generic arm-unknown-none
    CMake:                       3.14.5
    CMake generator:             Unix Makefiles
    CMake build tool:            /usr/bin/make
    Configuration:               Debug

  CPU/HW features:
    Baseline:
      requested:                 DETECT
      disabled:                  VFPV3 NEON

  C/C++:
    Built as dynamic libs?:      NO
< Π”Π°Π»ΡŒΡˆΠ΅ ΠΈΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сборки -- с ΠΊΠ°ΠΊΠΈΠΌΠΈ Ρ„Π»Π°Π³Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ,
  ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ OpenCV Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² сборку ΠΈ Ρ‚.ΠΏ.>

Talaabada xigta waa inaad socodsiiso tusaale ahaan, gaar ahaan mid ka mid ah kuwa caadiga ah ee ay bixiyaan horumariyayaashu laftooda. goobtaada. Waxaan doortay nacnac baare xuduud.

Tusaalaha waa in dib loo qoraa si loo muujiyo sawirka oo natiijadu si toos ah ugu dhex jirto barafka. Waa inaan tan sameeyo, sababtoo ah. shaqayn imshow() waxay ku sawiri kartaa sawirada QT, GTK iyo Windows interfaces, kuwaas oo, dabcan, aysan ku jiri doonin qaabka STM32. Dhab ahaantii, QT sidoo kale waxaa lagu socon karaa STM32F7Discovery, laakiin tan waxaa looga hadli doonaa maqaal kale πŸ™‚

Ka dib caddayn gaaban oo qaabka natiijada baaritaanka cidhifka lagu kaydiyo, waxaan helnaa sawir.

FurCV ee STM32F7-Daahfurka

sawirka asalka ah

FurCV ee STM32F7-Daahfurka

natiijada

Ku shaqeeya STM32F7Discovery

On 32F746GDISCOVERY waxaa jira dhowr qaybood oo xusuusta hardware ah oo aan u isticmaali karno hal ama si kale

  1. 320 KiB RAM
  2. 1MiB ee sawirka
  3. 8MiB SDRAM
  4. 16MiB QSPI NAND Flash
  5. booska microSD

Kaarka SD waxaa loo isticmaali karaa in lagu kaydiyo sawirada, laakiin marka la eego macnaha guud ee socodsiinta tusaalaha ugu yar, tani faa'iido badan uma leh.
Bandhigu waxa uu leeyahay xallinta 480Γ—272, taas oo macnaheedu yahay in xusuusta framebuffer ay noqon doonto 522 bytes qoto dheer oo ah 240 bits, i.e. Tani way ka badan tahay cabbirka RAM, sidaas darteed framebuffer iyo tuubada (kaas oo loo baahan doono, oo ay ku jiraan OpenCV, si loo kaydiyo xogta sawirada iyo qaab dhismeedka caawimada) waxay ku yaalaan SDRAM, wax kasta oo kale (xusuusinta xirmooyinka iyo baahiyaha nidaamka kale) ) waxay aadi doontaa RAM .

Haddii aan soo qaadano qaabka ugu yar ee STM32F7Discovery (ka tuur shabakada oo dhan, dhammaan amarrada, samee xirmooyinka sida ugu yar ee suurtogalka ah, iwm.) oo ku dar OpenCV tusaalooyin halkaas, xusuusta loo baahan yahay waxay noqon doontaa sida soo socota:

   text    data     bss     dec     hex filename
2876890  459208  312736 3648834  37ad42 build/base/bin/embox

Kuwa aan aad ula socon qaybaha ay tagaan, waxaan u sharxi doonaa: in .text ΠΈ .rodata Tilmaamaha iyo joogtada (qiyaastii hadalka, xogta kaliya ee akhriska ah) ayaa jiifa .data xogtu waa la bedeli karaa .bss waxaa jira doorsoomayaal "nulled", kuwaas oo, si kastaba ha ahaatee, u baahan meel (qaybtani waxay "tagi doontaa" RAM).

Warka wanaagsani waa kaas .data/.bss waa ku haboon yahay, laakiin leh .text Dhibka jira ayaa ah in uu jiro 1MiB ee xusuusta sawirka. Waa la tuuri karaa .text Sawirka tusaalaha oo akhri, tusaale ahaan, kaarka SD ilaa xusuusta bilowga, laakiin fruit.png waxay miisaankeedu yahay 330KiB, markaa tani ma xallin doonto dhibaatada: inta badan .text wuxuu ka kooban yahay koodka OpenCV.

Guud ahaan, hal shay ayaa hadhay - ku shubida qayb ka mid ah koodhka oo ku dhejinaya flash-ka QSPI (waxa ay leedahay hab gaar ah oo hawlgalka loogu talagalay xusuusta baska nidaamka, si processor-ku uu si toos ah u galo xogtan). Xaaladdan oo kale, dhibaato ayaa soo baxda: marka hore, xusuusta QSPI flash drive isla markiiba lama heli karo ka dib markii qalabku dib loo bilaabo (waxaad u baahan tahay inaad si gooni ah u bilawdo habka xusuusta-mapped), marka labaad, ma "flash" xusuustan bootloader la yaqaan.

Natiijo ahaan, waxaa la go'aamiyay in la isku xiro dhammaan koodka QSPI, oo lagu dhejiyo xamuul iskiis u qoray kaas oo heli doona binary-ga loo baahan yahay iyada oo loo marayo TFTP.

natiijada

Fikradda ah in maktabaddan lagu soo dejiyo Embox waxay soo muuqatay sannad ka hor, laakiin marar badan ayaa dib loo dhigay sababo kala duwan awgood. Mid ka mid ah waa taageerada libstdc++ iyo maktabadda template caadiga ah. Dhibaatada C ++ ee taageerada Embox waa ka baxsan xadka maqaalkan, markaa halkan waxaan ku sheegi doonaa oo kaliya inaan ku guuleysanay inaan ku gaarno taageeradan qadarka saxda ah ee maktabaddan si ay u shaqeyso πŸ™‚

Dhammaadkii, dhibaatooyinkan waa laga adkaaday (ugu yaraan ku filan tusaale ahaan OpenCV si uu u shaqeeyo), tusaaluhuna wuu socday. Waxay qaadataa 40 ilbiriqsi dheer in looxa si ay u raadiyaan xuduudaha iyagoo isticmaalaya filter Canny. Tani, dabcan, waa mid aad u dheer (waxaa jira tixgelin ku saabsan sida loo wanaajiyo arrintan, waxay suurtogal noqon doontaa in la qoro maqaal gaar ah oo arrintan ku saabsan haddii ay dhacdo guul).

FurCV ee STM32F7-Daahfurka

Si kastaba ha ahaatee, yoolka dhexe wuxuu ahaa in la abuuro nooc muujinaya suurtagalnimada aasaasiga ah ee ku socodsiinta OpenCV ee STM32, siday u kala horreeyaan, hadafkan waa la gaaray, hooray!

tl;dr: tillaabo tallaabo tallaabo ah

0: Soo deji ilaha Embox, sida tan:

    git clone https://github.com/embox/embox && cd ./embox

1: Aan ku bilowno anagoo ururinayna bootloader-ka kaas oo "flash" doona QSPI flash drive.

    make confload-arm/stm32f7cube

Hadda waxaad u baahan tahay inaad dejiso shabakadda, sababtoo ah. Sawirka waxaan ku dhejin doonaa TFTP. Si aad u dejiso guddiga iyo martigelinta ciwaannada IP, waxaad u baahan tahay inaad wax ka beddesho conf/rootfs/network.

Tusaalaha qaabaynta:

iface eth0 inet static
    address 192.168.2.2
    netmask 255.255.255.0
    gateway 192.168.2.1
    hwaddress aa:bb:cc:dd:ee:02

gateway - ciwaanka martida loo yahay halka sawirka laga soo rari doono, address - cinwaanka guddiga.

Taas ka dib, waxaan aruurineynaa bootloader:

    make

2: Soo dejinta caadiga ah ee bootloader-ka (ka xumahay pun) ee looxa - ma jiraan wax gaar ah halkan, waxaad u baahan tahay inaad u sameyso sida codsi kasta oo kale oo loogu talagalay STM32F7Discovery. Haddii aadan aqoon sida loo sameeyo, waad ka akhrisan kartaa halkan.
3: Samaynta sawir leh qaabaynta OpenCV.

    make confload-platform/opencv/stm32f7discovery
    make

4: Ka soo saar qaybaha ELF si loogu qoro QSPI qspi.bin

    arm-none-eabi-objcopy -O binary build/base/bin/embox build/base/bin/qspi.bin 
        --only-section=.text --only-section=.rodata 
        --only-section='.ARM.ex*' 
        --only-section=.data

Waxa jira qoraal ku jira hagaha conf oo tan samaynaya, si aad u socodsiiso

    ./conf/qspi_objcopy.sh # НуТный Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ -- build/base/bin/qspi.bin

5: Isticmaalka tftp, soo deji qspi.bin.bin flash drive QSPI. Dhanka martida loo yahay, si tan loo sameeyo, koobi qspi.bin gal galka xididka tftp serverka (badanaa /srv/tftp/ama/var/lib/tftpboot/; baakadaha serverka u dhigma ayaa laga heli karaa qaybinta ugu caansan,sida badan loo yaqaan tftpd ama tftp-hpa, mararka qaarkood waa inaad sameyso systemctl start tftpd.service si loo bilaabo).

    # Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для tftpd
    sudo cp build/base/bin/qspi.bin /srv/tftp
    # Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для tftp-hpa
    sudo cp build/base/bin/qspi.bin /var/lib/tftpboot

On Embox (tusaale ahaan bootloader), waxaad u baahan tahay inaad fuliso amarkan soo socda (waxaan u qaadanaynaa in serverku leeyahay ciwaanka 192.168.2.1):

    embox> qspi_loader qspi.bin 192.168.2.1

6:Amarka goto waxaad u baahan tahay inaad "ku boodo" xusuusta QSPI Goobta gaarka ah way kala duwanaan doontaa iyadoo ku xidhan sida sawirka loo xidho, waxaad ku arki kartaa ciwaanka amarka mem 0x90000000 (cinwaanka bilawga ah wuxuu ku habboon yahay erayga labaad ee 32-bit ee sawirka); waxa kale oo aad u baahan doontaa in aad calanto xidhmada -s, ciwaanku waa 0x90000000, tusaale:

    embox>mem 0x90000000
    0x90000000:     0x20023200  0x9000c27f  0x9000c275  0x9000c275
                      ↑           ↑
              это адрСс    это  адрСс 
                стэка        ΠΏΠ΅Ρ€Π²ΠΎΠΉ
                           инструкции

    embox>goto -i 0x9000c27f -s 0x20023200 # Π€Π»Π°Π³ -i Π½ΡƒΠΆΠ΅Π½ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ прСрывания Π²ΠΎ врСмя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы

    < Начиная ΠΎΡ‚ΡΡŽΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°, Π° ΠΎΠ±Ρ€Π°Π·Π° с OpenCV >

7: Bilawga

    embox> edges 20

oo ku raaxayso raadinta xadka 40-ilbiriqsi πŸ™‚

Haddii ay wax qaldamaan - ku qor arrin kaydkeena, ama liiska boostada [emailka waa la ilaaliyay], ama faallo ka bixi halkan.

Source: www.habr.com

Add a comment