OpenCV ืขืœ STM32F7-Discovery

OpenCV ืขืœ STM32F7-Discovery ืื ื™ ืžื”ืžืคืชื—ื™ื ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ืืžื‘ื•ืงืก, ื•ื‘ืžืืžืจ ื–ื” ืื“ื‘ืจ ืขืœ ืื™ืš ื”ืฆืœื—ืชื™ ืœื”ืจื™ืฅ ืืช OpenCV ืขืœ ืœื•ื— STM32746G.

ืื ืืชื” ืžืงืœื™ื“ ืžืฉื”ื• ื›ืžื• "OpenCV ืขืœ ืœื•ื— STM32" ื‘ืžื ื•ืข ื—ื™ืคื•ืฉ, ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื ืœื ืžืขื˜ ืื ืฉื™ื ืฉืžืขื•ื ื™ื™ื ื™ื ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื™ื” ื”ื–ื• ืขืœ ืœื•ื—ื•ืช STM32 ืื• ืžื™ืงืจื•-ื‘ืงืจื™ื ืื—ืจื™ื.
ื™ืฉ ื›ืžื” ืกืจื˜ื•ื ื™ื ืฉืœืคื™ ื”ืฉื ืืžื•ืจื™ื ืœื”ื“ื’ื™ื ืืช ืžื” ืฉืฆืจื™ืš, ืื‘ืœ ื‘ื“ืจืš ื›ืœืœ (ื‘ื›ืœ ื”ืกืจื˜ื•ื ื™ื ืฉืจืื™ืชื™) ื‘ืœื•ื— STM32, ืจืง ื”ืชืžื•ื ื” ื”ืชืงื‘ืœื” ืžื”ืžืฆืœืžื” ื•ื”ืชื•ืฆืื” ื”ื•ืฆื’ื” ืขืœ ื”ืžืกืš, ื•ืขื™ื‘ื•ื“ ื”ืชืžื•ื ื” ืขืฆืžื• ื ืขืฉื” ืขืœ ืžื—ืฉื‘ ืจื’ื™ืœ, ืื• ืขืœ ืœื•ื—ื•ืช ื—ื–ืงื™ื ื™ื•ืชืจ (ืœืžืฉืœ, Raspberry Pi).

ืœืžื” ื–ื” ืงืฉื”?

ื”ืคื•ืคื•ืœืจื™ื•ืช ืฉืœ ืฉืื™ืœืชื•ืช ื”ื—ื™ืคื•ืฉ ืžื•ืกื‘ืจืช ื‘ื›ืš ืฉ-OpenCV ื”ื™ื ืกืคืจื™ื™ืช ื”ืจืื™ื™ื” ื”ืžืžื•ื—ืฉื‘ืช ื”ืคื•ืคื•ืœืจื™ืช ื‘ื™ื•ืชืจ, ืžื” ืฉืื•ืžืจ ืฉื™ื•ืชืจ ืžืคืชื—ื™ื ืžื›ื™ืจื™ื ืื•ืชื”, ื•ื”ื™ื›ื•ืœืช ืœื”ืจื™ืฅ ืงื•ื“ ืžื•ื›ืŸ ืœืฉื•ืœื—ืŸ ื”ืขื‘ื•ื“ื” ืขืœ ืžื™ืงืจื•-ื‘ืงืจ ืžืคืฉื˜ืช ืžืื•ื“ ืืช ืชื”ืœื™ืš ื”ืคื™ืชื•ื—. ืื‘ืœ ืœืžื” ืขื“ื™ื™ืŸ ืื™ืŸ ืžืชื›ื•ื ื™ื ืžื•ื›ื ื™ื ืคื•ืคื•ืœืจื™ื™ื ืœืคืชืจื•ืŸ ื‘ืขื™ื” ื–ื•?

ื”ื‘ืขื™ื” ืฉืœ ืฉื™ืžื•ืฉ ื‘-OpenCV ืขืœ ืฆืขื™ืคื™ื ืงื˜ื ื™ื ืงืฉื•ืจื” ืœืฉืชื™ ืชื›ื•ื ื•ืช:

  • ืื ืชืจื›ื™ื‘ ืืช ื”ืกืคืจื™ื™ื” ืืคื™ืœื• ืขื ืกื˜ ืžื™ื ื™ืžืœื™ ืฉืœ ืžื•ื“ื•ืœื™ื, ื”ื™ื ืคืฉื•ื˜ ืœื ืชืชืื™ื ืœื–ื™ื›ืจื•ืŸ ื”ืคืœืืฉ ืฉืœ ืื•ืชื• STM32F7Discovery (ืืคื™ืœื• ื‘ืœื™ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื”) ื‘ื’ืœืœ ืงื•ื“ ื’ื“ื•ืœ ืžืื•ื“ (ืžืกืคืจ ืžื’ื”-ื‘ื™ื™ื˜ ืฉืœ ื”ื•ืจืื•ืช)
  • ื”ืกืคืจื™ื™ื” ืขืฆืžื” ื›ืชื•ื‘ื” ื‘-C++, ื›ืœื•ืžืจ
    • ืฆืจื™ืš ืชืžื™ื›ื” ืขื‘ื•ืจ ื–ืžืŸ ืจื™ืฆื” ื—ื™ื•ื‘ื™ (ื—ืจื™ื’ื™ื ื•ื›ื•')
    • ืชืžื™ื›ื” ืงื˜ื ื” ื‘-LibC/Posix, ืฉื ืžืฆืืช ื‘ื“ืจืš ื›ืœืœ ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื” ืœืžืขืจื›ื•ืช ืžืฉื•ื‘ืฆื•ืช - ืืชื” ืฆืจื™ืš ืกืคืจื™ื™ืช ืคืœื•ืก ืกื˜ื ื“ืจื˜ื™ืช ื•ืกืคืจื™ื™ืช ืชื‘ื ื™ื•ืช STL ืกื˜ื ื“ืจื˜ื™ืช (ื•ืงื˜ื•ืจ ื•ื›ื•')

ื”ืขื‘ืจื” ืœืื™ืžื‘ื•ืงืก

ื›ืจื’ื™ืœ, ืœืคื ื™ ื”ืขื‘ืจืช ืชื•ื›ื ื•ืช ื›ืœืฉื”ืŸ ืœืžืขืจื›ืช ื”ื”ืคืขืœื”, ืžื•ืžืœืฅ ืœื ืกื•ืช ืœื‘ื ื•ืช ืื•ืชื” ื‘ืฆื•ืจื” ืฉื‘ื” ื”ืชื›ื•ื•ื ื• ืื•ืชื” ื”ืžืคืชื—ื™ื. ื‘ืžืงืจื” ืฉืœื ื•, ืื™ืŸ ื‘ืขื™ื•ืช ืขื ื–ื” - ืืช ืงื•ื“ ื”ืžืงื•ืจ ื ื™ืชืŸ ืœืžืฆื•ื ื‘ github, ื”ืกืคืจื™ื™ื” ื‘ื ื•ื™ื” ืชื—ืช GNU/Linux ืขื ื”-cmeke ื”ืจื’ื™ืœ.

ื”ื—ื“ืฉื•ืช ื”ื˜ื•ื‘ื•ืช ื”ืŸ ืฉื ื™ืชืŸ ืœื‘ื ื•ืช ืืช OpenCV ื›ืกืคืจื™ื™ื” ืกื˜ื˜ื™ืช ืžื”ืงื•ืคืกื”, ืžื” ืฉืžืงืœ ืขืœ ื”ื”ืขื‘ืจื”. ืื ื—ื ื• ืื•ืกืคื™ื ืกืคืจื™ื™ื” ืขื ืชืฆื•ืจื” ืกื˜ื ื“ืจื˜ื™ืช ื•ืจื•ืื™ื ื›ืžื” ืžืงื•ื ื”ื ืชื•ืคืกื™ื. ื›ืœ ืžื•ื“ื•ืœ ื ืืกืฃ ื‘ืกืคืจื™ื™ื” ื ืคืจื“ืช.

> 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)

ื›ืคื™ ืฉื ื™ืชืŸ ืœืจืื•ืช ืžื”ืฉื•ืจื” ื”ืื—ืจื•ื ื”, .bss ื•-.data ืœื ืชื•ืคืกื™ื ื”ืจื‘ื” ืžืงื•ื, ืื‘ืœ ื”ืงื•ื“ ื”ื•ื ื™ื•ืชืจ ืž-70 MiB. ื‘ืจื•ืจ ืฉืื ื–ื” ืžืงื•ืฉืจ ืกื˜ื˜ื™ืช ืœืืคืœื™ืงืฆื™ื” ืกืคืฆื™ืคื™ืช, ื”ืงื•ื“ ื™ืคื—ืช.

ื‘ื•ืื• ื ื ืกื” ืœื–ืจื•ืง ื›ืžื” ืฉื™ื•ืชืจ ืžื•ื“ื•ืœื™ื ื›ื“ื™ ืฉืชืจื›ื™ื‘ ื“ื•ื’ืžื” ืžื™ื ื™ืžืœื™ืช (ืืฉืจ, ืœืžืฉืœ, ืคืฉื•ื˜ ืชื•ืฆื™ื ืืช ื’ืจืกืช ื”-OpenCV), ืื– ื ืจืื” cmake .. -LA ื•ืœื›ื‘ื•ืช ื‘ืืคืฉืจื•ื™ื•ืช ืืช ื›ืœ ืžื” ืฉื ื›ื‘ื”.

        -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)

ืžืฆื“ ืื—ื“, ื–ื” ืจืง ืžื•ื“ื•ืœ ืื—ื“ ืฉืœ ื”ืกืคืจื™ื™ื”, ืžืฆื“ ืฉื ื™, ื–ื” ืœืœื ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืžื”ื“ืจ ืœื’ื•ื“ืœ ื”ืงื•ื“ (-Os). ~3 MiB ืฉืœ ืงื•ื“ ื–ื” ืขื“ื™ื™ืŸ ื“ื™ ื”ืจื‘ื”, ืื‘ืœ ื›ื‘ืจ ื ื•ืชืŸ ืชืงื•ื•ื” ืœื”ืฆืœื—ื”.

ื”ืคืขืœ ื‘ืืžื•ืœื˜ื•ืจ

ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœื ืคื•ืช ื‘ืื’ื™ื ื‘ืืžื•ืœื˜ื•ืจ, ืื– ืชื—ื™ืœื” ื•ื“ื ืฉื”ืกืคืจื™ื™ื” ืขื•ื‘ื“ืช ืขืœ qemu. ื›ืคืœื˜ืคื•ืจืžื” ืžื“ื•ืžื”, ื‘ื—ืจืชื™ ื‘ืื™ื ื˜ื’ืจื˜ื•ืจ / CP, ื‘ื’ืœืœ ืจืืฉื™ืช, ื–ื” ื’ื ARM, ื•ืฉื ื™ืช, Embox ืชื•ืžืš ื‘ืคืœื˜ ื’ืจืคื™ ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžื” ื–ื•.

ืœืืžื‘ื•ืงืก ื™ืฉ ืžื ื’ื ื•ืŸ ืœื‘ื ื™ื™ืช ืกืคืจื™ื•ืช ื—ื™ืฆื•ื ื™ื•ืช, ื‘ืืžืฆืขื•ืชื• ืื ื• ืžื•ืกื™ืคื™ื ืืช OpenCV ื›ืžื•ื“ื•ืœ (ืžืขื‘ื™ืจื™ื ืืช ื›ืœ ืื•ืชืŸ ื”ืืคืฉืจื•ื™ื•ืช ืœ-build ื”"ืžื™ื ื™ืžืœื™" ื‘ืฆื•ืจื” ืฉืœ ืกืคืจื™ื•ืช ืกื˜ื˜ื™ื•ืช), ืœืื—ืจ ืžื›ืŸ ืื ื™ ืžื•ืกื™ืฃ ืืคืœื™ืงืฆื™ื” ืคืฉื•ื˜ื” ืฉื ืจืื™ืช ื›ืš:

version.cpp:

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

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

    return 0;
}

ืื ื—ื ื• ืžืจื›ื™ื‘ื™ื ืืช ื”ืžืขืจื›ืช, ืžืคืขื™ืœื™ื ืื•ืชื” - ืื ื—ื ื• ืžืงื‘ืœื™ื ืืช ื”ืชืคื•ืงื” ื”ืฆืคื•ื™ื”.

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 ะฒะบะปัŽั‡ะตะฝั‹ ะฒ ัะฑะพั€ะบัƒ ะธ ั‚.ะฟ.>

ื”ืฉืœื‘ ื”ื‘ื ื”ื•ื ืœื”ืคืขื™ืœ ื“ื•ื’ืžื” ื›ืœืฉื”ื™, ืจืฆื•ื™ ืื—ืช ืžื”ืกื˜ื ื“ืจื˜ื™ื•ืช ืฉืžืฆื™ืขื™ื ื”ืžืคืชื—ื™ื ืขืฆืžื. ื‘ืืชืจ ืฉืœืš. ืื ื™ ื‘ื—ืจืชื™ ื’ื‘ื•ืœ ื’ืœืื™ ื’ื‘ื•ืœ.

ื”ื™ื” ืฆื•ืจืš ืœืฉื›ืชื‘ ืžืขื˜ ืืช ื”ื“ื•ื’ืžื” ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื”ืชืžื•ื ื” ืขื ื”ืชื•ืฆืื” ื™ืฉื™ืจื•ืช ื‘ืžืื’ืจ ื”ืžืกื’ืจืช. ื”ื™ื™ืชื™ ืฆืจื™ืš ืœืขืฉื•ืช ืืช ื–ื”, ื›ื™. ืคื•ึผื ืงืฆึดื™ึธื” imshow() ื™ื›ื•ืœ ืœืฆื™ื™ืจ ืชืžื•ื ื•ืช ื“ืจืš ืžืžืฉืงื™ QT, GTK ื•-Windows, ืืฉืจ, ื›ืžื•ื‘ืŸ, ื‘ื”ื—ืœื˜ ืœื ื™ื”ื™ื• ื‘ืชืฆื•ืจื” ืฉืœ STM32. ืœืžืขืฉื”, ื ื™ืชืŸ ืœื”ืจื™ืฅ QT ื’ื ืขืœ STM32F7Discovery, ืืš ืขืœ ื›ืš ื ื“ื•ืŸ ื‘ืžืืžืจ ืื—ืจ ๐Ÿ™‚

ืœืื—ืจ ื‘ื™ืจื•ืจ ืงืฆืจ ื‘ืื™ื–ื” ืคื•ืจืžื˜ ืžืื•ื—ืกื ืช ืชื•ืฆืืช ื’ืœืื™ ื”ืงืฆื•ื•ืช, ื ืงื‘ืœ ืชืžื•ื ื”.

OpenCV ืขืœ STM32F7-Discovery

ืชืžื•ื ื” ืžืงื•ืจื™ืช

OpenCV ืขืœ STM32F7-Discovery

ืชื•ืฆืื”

ืคื•ืขืœ ืขืœ STM32F7Discovery

ื‘-32F746GDISCOVERY ื™ืฉื ื ืžืกืคืจ ืงื˜ืขื™ ื–ื™ื›ืจื•ืŸ ื—ื•ืžืจื” ืฉืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ื”ื ื‘ื“ืจืš ื–ื• ืื• ืื—ืจืช

  1. ื–ื™ื›ืจื•ืŸ RAM ืฉืœ 320KiB
  2. ืคืœืืฉ 1MiB ืœืชืžื•ื ื”
  3. 8MiB SDRAM
  4. 16MiB QSPI NAND ืคืœืืฉ
  5. ื—ืจื™ืฅ ืœื›ืจื˜ื™ืก microSD

ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื›ืจื˜ื™ืก SD ืœืื—ืกื•ืŸ ืชืžื•ื ื•ืช, ืืš ื‘ื”ืงืฉืจ ืฉืœ ื”ืคืขืœืช ื“ื•ื’ืžื” ืžื™ื ื™ืžืœื™ืช, ื–ื” ืœื ืžืื•ื“ ืฉื™ืžื•ืฉื™.
ืœืชืฆื•ื’ื” ืจื–ื•ืœื•ืฆื™ื” ืฉืœ 480ร—272, ืžื” ืฉืื•ืžืจ ืฉื–ื™ื›ืจื•ืŸ ื”-framebuffer ื™ื”ื™ื” 522 ื‘ืชื™ื ื‘ืขื•ืžืง ืฉืœ 240 ื‘ื™ื˜ื™ื, ื›ืœื•ืžืจ. ื–ื” ื™ื•ืชืจ ืžื’ื•ื“ืœ ื–ื™ื›ืจื•ืŸ RAM, ื›ืš ืฉื”-framebuffer ื•ื”-heap (ืฉื™ื“ืจืฉื•, ื›ื•ืœืœ ืขื‘ื•ืจ OpenCV, ื›ื“ื™ ืœืื—ืกืŸ ื ืชื•ื ื™ื ืขื‘ื•ืจ ืชืžื•ื ื•ืช ื•ืžื‘ื ื™ ืขื–ืจ) ื™ืžื•ืงืžื• ื‘-SDRAM, ื›ืœ ื”ืฉืืจ (ื–ื™ื›ืจื•ืŸ ืขื‘ื•ืจ ืขืจื™ืžื•ืช ื•ืฆืจื›ื™ โ€‹โ€‹ืžืขืจื›ืช ืื—ืจื™ื ) ื™ืขื‘ื•ืจ ืœ-RAM.

ืื ื ื™ืงื— ืืช ื”ืชืฆื•ืจื” ื”ืžื™ื ื™ืžืœื™ืช ืขื‘ื•ืจ STM32F7Discovery (ื ื–ืจื•ืง ืืช ื›ืœ ื”ืจืฉืช, ืืช ื›ืœ ื”ืคืงื•ื“ื•ืช, ื ื”ืคื•ืš ืขืจื™ืžื•ืช ืงื˜ื ื•ืช ื›ื›ืœ ื”ืืคืฉืจ ื•ื›ื•') ื•ื ื•ืกื™ืฃ ืฉื OpenCV ืขื ื“ื•ื’ืžืื•ืช, ื”ื–ื™ื›ืจื•ืŸ ื”ื ื“ืจืฉ ื™ื”ื™ื” ื›ื“ืœืงืžืŸ:

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

ืœืžื™ ืฉืœื ืžืžืฉ ื‘ืงื™ื ื‘ืื™ื–ื” ืงื˜ืขื™ื ื”ื•ืœื›ื™ื ืœืืŸ, ืืกื‘ื™ืจ: ื‘ .text ะธ .rodata ื”ื•ืจืื•ืช ื•ืงื‘ื•ืขื™ื (ื‘ืื•ืคืŸ ื’ืก, ื ืชื•ื ื™ื ืœืงืจื™ืื” ื‘ืœื‘ื“) ื˜ืžื•ื ื™ื .data ื”ื ืชื•ื ื™ื ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™, .bss ื™ืฉื ื ืžืฉืชื ื™ื "ื‘ื˜ืœื™ื", ืืฉืจ, ื‘ื›ืœ ื–ืืช, ืฆืจื™ื›ื™ื ืžืงื•ื (ืกืขื™ืฃ ื–ื” "ื™ืขื‘ื•ืจ" ืœ-RAM).

ื”ื—ื“ืฉื•ืช ื”ื˜ื•ื‘ื•ืช ื”ืŸ .data/.bss ืฆืจื™ืš ืœื”ืชืื™ื, ืื‘ืœ ืขื .text ื”ื‘ืขื™ื” ื”ื™ื ืฉื™ืฉ ืจืง 1MiB ืฉืœ ื–ื™ื›ืจื•ืŸ ืœืชืžื•ื ื”. ื ื™ืชืŸ ืœื–ืจื•ืง ื”ื—ื•ืฆื” .text ืืช ื”ืชืžื•ื ื” ืžื”ื“ื•ื’ืžื” ื•ืงืจืื• ืื•ืชื”, ืœืžืฉืœ, ืžื›ืจื˜ื™ืก ื”-SD ืœื–ื™ื›ืจื•ืŸ ื‘ืขืช โ€‹โ€‹ื”ื”ืคืขืœื”, ืื‘ืœ fruits.png ืฉื•ืงืœ ื›-330KiB, ื›ืš ืฉื–ื” ืœื ื™ืคืชื•ืจ ืืช ื”ื‘ืขื™ื”: ืจื•ื‘ .text ืžื•ืจื›ื‘ ืžืงื•ื“ OpenCV.

ื‘ื’ื“ื•ืœ, ื ืฉืืจ ืจืง ื“ื‘ืจ ืื—ื“ - ื˜ืขื™ื ืช ื—ืœืง ืžื”ืงื•ื“ ืขืœ ืžื‘ื–ืง QSPI (ื™ืฉ ืœื• ืื•ืคืŸ ืคืขื•ืœื” ืžื™ื•ื—ื“ ืœืžื™ืคื•ื™ ื–ื™ื›ืจื•ืŸ ืœืืคื™ืง ื”ืžืขืจื›ืช, ื›ืš ืฉื”ืžืขื‘ื“ ื™ื•ื›ืœ ืœื’ืฉืช ื™ืฉื™ืจื•ืช ืœื ืชื•ื ื™ื ื”ืœืœื•). ื‘ืžืงืจื” ื–ื”, ืžืชืขื•ืจืจืช ื‘ืขื™ื”: ืจืืฉื™ืช, ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ื›ื•ื ืŸ ื”ื‘ื–ืง QSPI ืื™ื ื• ื–ืžื™ืŸ ืžื™ื“ ืœืื—ืจ ืืชื—ื•ืœ ื”ืžื›ืฉื™ืจ (ืขืœื™ืš ืœืืชื—ืœ ื‘ื ืคืจื“ ืืช ื”ืžืฆื‘ ืžืžื•ืคื” ื–ื™ื›ืจื•ืŸ), ื•ืฉื ื™ืช, ืื™ื ืš ื™ื›ื•ืœ "ืœื”ื‘ื–ืง" ืืช ื”ื–ื™ื›ืจื•ืŸ ื”ื–ื” ืขื ื˜ื•ืขืŸ ืืชื—ื•ืœ ืžื•ื›ืจ.

ื›ืชื•ืฆืื” ืžื›ืš, ื”ื•ื—ืœื˜ ืœืงืฉืจ ืืช ื›ืœ ื”ืงื•ื“ ื‘-QSPI, ื•ืœื”ื‘ื–ืง ืื•ืชื• ืขื ื˜ื•ืขืŸ ื‘ื›ืชื‘ ืขืฆืžื™ ืฉื™ืงื‘ืœ ืืช ื”ื‘ื™ื ืืจื™ ื”ื ื“ืจืฉ ื‘ืืžืฆืขื•ืช TFTP.

ืชื•ืฆืื”

ื”ืจืขื™ื•ืŸ ืœื”ืขื‘ื™ืจ ืืช ื”ืกืคืจื™ื™ื” ื”ื–ื• ืœืืžื‘ื•ืงืก ื”ื•ืคื™ืข ืœืคื ื™ ื›ืฉื ื”, ืื‘ืœ ืฉื•ื‘ ื•ืฉื•ื‘ ื”ื•ื ื ื“ื—ื” ืžืกื™ื‘ื•ืช ืฉื•ื ื•ืช. ืื—ื“ ืžื”ื ื”ื•ื ืชืžื™ื›ื” ื‘-libstdc++ ื•ื‘ืกืคืจื™ื™ืช ื”ืชื‘ื ื™ื•ืช ื”ืกื˜ื ื“ืจื˜ื™ืช. ื”ื‘ืขื™ื” ืฉืœ ืชืžื™ื›ื” ื‘-C++ ื‘-Embox ื”ื™ื ืžืขื‘ืจ ืœืชื—ื•ื ื”ืžืืžืจ ื”ื–ื”, ืื– ื›ืืŸ ืื ื™ ืจืง ืื’ื™ื“ ืฉื”ืฆืœื—ื ื• ืœื”ืฉื™ื’ ืืช ื”ืชืžื™ื›ื” ื”ื–ื• ื‘ื›ืžื•ืช ื”ื ื›ื•ื ื” ื›ื“ื™ ืฉื”ืกืคืจื™ื™ื” ื”ื–ื• ืชืขื‘ื•ื“ ๐Ÿ™‚

ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ื”ื‘ืขื™ื•ืช ื”ืœืœื• ื”ืชื’ื‘ืจื• (ืœืคื—ื•ืช ืžืกืคื™ืง ื›ื“ื™ ืฉื”ื“ื•ื’ืžื” ืฉืœ OpenCV ืชืขื‘ื•ื“), ื•ื”ื“ื•ื’ืžื” ืจืฆื”. ืœื•ืงื— ืœืœื•ื— 40 ืฉื ื™ื•ืช ืืจื•ื›ื•ืช ืœื—ืคืฉ ื’ื‘ื•ืœื•ืช ื‘ืืžืฆืขื•ืช ืžืกื ืŸ Canny. ื–ื” ื›ืžื•ื‘ืŸ ืืจื•ืš ืžื“ื™ (ื™ืฉ ืฉื™ืงื•ืœื™ื ืื™ืš ืœื™ื™ืขืœ ืืช ื”ืขื ื™ื™ืŸ ื”ื–ื”, ืืคืฉืจ ื™ื”ื™ื” ืœื›ืชื•ื‘ ืขืœ ื–ื” ืžืืžืจ ื ืคืจื“ ื‘ืžืงืจื” ืฉืœ ื”ืฆืœื—ื”).

OpenCV ืขืœ STM32F7-Discovery

ืขื ื–ืืช, ืžื˜ืจืช ื”ื‘ื™ื ื™ื™ื ื”ื™ื™ืชื” ืœื™ืฆื•ืจ ืื‘ ื˜ื™ืคื•ืก ืฉื™ืจืื” ืืช ื”ืืคืฉืจื•ืช ื”ื‘ืกื™ืกื™ืช ืฉืœ ื”ืคืขืœืช OpenCV ืขืœ STM32, ื‘ื”ืชืืžื”, ืžื˜ืจื” ื–ื• ื”ื•ืฉื’ื”, ื”ื™ื“ื“!

tl;dr: ื”ื•ืจืื•ืช ืฉืœื‘ ืื—ืจ ืฉืœื‘

0: ื”ื•ืจื“ ืžืงื•ืจื•ืช ืืžื‘ื•ืงืก, ื›ืžื• ื–ื”:

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

1: ื ืชื—ื™ืœ ื‘ื”ืจื›ื‘ืช ืืชื—ื•ืœ ืฉ"ื™ื‘ื–ืง" ื›ื•ื ืŸ ื”ื‘ื–ืง QSPI.

    make confload-arm/stm32f7cube

ืขื›ืฉื™ื• ืืชื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืืช ื”ืจืฉืช, ื›ื™. ื ืขืœื” ืืช ื”ืชืžื•ื ื” ื“ืจืš TFTP. ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื›ืชื•ื‘ื•ืช ื”-IP ืฉืœ ื”ืœื•ื— ื•ื”ืžืืจื—, ืขืœื™ืš ืœืขืจื•ืš ืืช ื”-conf/rootfs/network.

ื“ื•ื’ืžื” ืœืชืฆื•ืจื”:

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 - ื›ืชื•ื‘ืช ืžืืจื— ืžื”ืžืงื•ื ืฉื‘ื• ื”ืชืžื•ื ื” ืชื™ื˜ืขืŸ, address - ื›ืชื•ื‘ืช ื”ืžื•ืขืฆื”.

ืœืื—ืจ ืžื›ืŸ, ืื ื• ืื•ืกืคื™ื ืืช ื˜ื•ืขืŸ ื”ืืชื—ื•ืœ:

    make

2: ื”ื˜ืขื™ื ื” ื”ืจื’ื™ืœื” ืฉืœ ืžืืชื—ื•ืœ ื”ืืชื—ื•ืœ (ืกืœื™ื—ื” ืขืœ ืžืฉื—ืง ื”ืžื™ืœื™ื) ืขืœ ื”ืœื•ื— - ืื™ืŸ ื›ืืŸ ืฉื•ื ื“ื‘ืจ ืกืคืฆื™ืคื™, ืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ืืช ื–ื” ื›ืžื• ืขื‘ื•ืจ ื›ืœ ื™ื™ืฉื•ื ืื—ืจ ืขื‘ื•ืจ STM32F7Discovery. ืื ืืชื” ืœื ื™ื•ื“ืข ืื™ืš ืœืขืฉื•ืช ืืช ื–ื”, ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขืœ ื–ื” ื›ืืŸ.
3: ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ ืชืžื•ื ื” ืขื ืชืฆื•ืจื” ืขื‘ื•ืจ OpenCV.

    make confload-platform/opencv/stm32f7discovery
    make

4: ื—ืœืฅ ืžืงื˜ืขื™ ELF ืฉื™ื›ืชื‘ื• ืœ-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

ื™ืฉ ืกืงืจื™ืคื˜ ื‘ืกืคืจื™ื™ืช conf ืฉืขื•ืฉื” ืืช ื–ื”, ืื– ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืื•ืชื•

    ./conf/qspi_objcopy.sh # ะัƒะถะฝั‹ะน ะฑะธะฝะฐั€ะฝะธะบ -- build/base/bin/qspi.bin

5: ื‘ืืžืฆืขื•ืช tftp, ื”ื•ืจื“ ืืช qspi.bin.bin ืœื›ื•ื ืŸ ื”ื‘ื–ืง ืฉืœ QSPI. ื‘ืžืืจื—, ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื”ืขืชืง ืืช qspi.bin ืœืชื™ืงื™ื™ืช ื”ืฉื•ืจืฉ ืฉืœ ืฉืจืช tftp (ื‘ื“ืจืš ื›ืœืœ /srv/tftp/ ืื• /var/lib/tftpboot/; ื—ื‘ื™ืœื•ืช ืขื‘ื•ืจ ื”ืฉืจืช ื”ืžืชืื™ื ื–ืžื™ื ื•ืช ื‘ืจื•ื‘ ื”ื”ืคืฆื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช, ื”ื ืงืจืื•ืช ื‘ื“ืจืš ื›ืœืœ tftpd ืื• tftp-hpa, ืœืคืขืžื™ื ืืชื” ืฆืจื™ืš ืœืขืฉื•ืช systemctl start tftpd.service ืœื”ืชื—ื™ืœ).

    # ะฒะฐั€ะธะฐะฝั‚ ะดะปั tftpd
    sudo cp build/base/bin/qspi.bin /srv/tftp
    # ะฒะฐั€ะธะฐะฝั‚ ะดะปั tftp-hpa
    sudo cp build/base/bin/qspi.bin /var/lib/tftpboot

ื‘-Embox (ื›ืœื•ืžืจ ื‘ืžื˜ืขืŸ ื”ืืชื—ื•ืœ), ืขืœื™ืš ืœื‘ืฆืข ืืช ื”ืคืงื•ื“ื” ื”ื‘ืื” (ืื ื• ืžื ื™ื—ื™ื ืฉืœืฉืจืช ื™ืฉ ืืช ื”ื›ืชื•ื‘ืช 192.168.2.1):

    embox> qspi_loader qspi.bin 192.168.2.1

6: ืขื ืคืงื•ื“ื” goto ืืชื” ืฆืจื™ืš "ืœืงืคื•ืฅ" ืœื–ื™ื›ืจื•ืŸ QSPI. ื”ืžื™ืงื•ื ื”ืกืคืฆื™ืคื™ ื™ืฉืชื ื” ื‘ื”ืชืื ืœืื•ืคืŸ ืฉื‘ื• ื”ืชืžื•ื ื” ืžืงื•ืฉืจืช, ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ื›ืชื•ื‘ืช ื–ื• ืขื ื”ืคืงื•ื“ื” mem 0x90000000 (ื›ืชื•ื‘ืช ื”ื”ืชื—ืœื” ืžืชืื™ืžื” ืœืžื™ืœื” ื”ืฉื ื™ื™ื” ืฉืœ 32 ืกื™ื‘ื™ื•ืช ืฉืœ ื”ืชืžื•ื ื”); ืชืฆื˜ืจืš ื’ื ืœืกืžืŸ ืืช ื”ืขืจื™ืžื” -s, ื›ืชื•ื‘ืช ื”ืžื—ืกื ื™ืช ื”ื™ื 0x90000000, ืœื“ื•ื’ืžื”:

    embox>mem 0x90000000
    0x90000000:     0x20023200  0x9000c27f  0x9000c275  0x9000c275
                      โ†‘           โ†‘
              ัั‚ะพ ะฐะดั€ะตั    ัั‚ะพ  ะฐะดั€ะตั 
                ัั‚ัะบะฐ        ะฟะตั€ะฒะพะน
                           ะธะฝัั‚ั€ัƒะบั†ะธะธ

    embox>goto -i 0x9000c27f -s 0x20023200 # ะคะปะฐะณ -i ะฝัƒะถะตะฝ ั‡ั‚ะพะฑั‹ ะทะฐะฟั€ะตั‚ะธั‚ัŒ ะฟั€ะตั€ั‹ะฒะฐะฝะธั ะฒะพ ะฒั€ะตะผั ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธะธ ัะธัั‚ะตะผั‹

    < ะะฐั‡ะธะฝะฐั ะพั‚ััŽะดะฐ ะฑัƒะดะตั‚ ะฒั‹ะฒะพะด ะฝะต ะทะฐะณั€ัƒะทั‡ะธะบะฐ, ะฐ ะพะฑั€ะฐะทะฐ ั OpenCV >

7: ื”ืฉืงื”

    embox> edges 20

ื•ืชื™ื”ื ื• ืžื—ื™ืคื•ืฉ ื”ื’ื‘ื•ืœ ืฉืœ 40 ืฉื ื™ื•ืช ๐Ÿ™‚

ืื ืžืฉื”ื• ืžืฉืชื‘ืฉ - ื›ืชื•ื‘ ื‘ืขื™ื” ื‘ ื”ืžืื’ืจ ืฉืœื ื•, ืื• ืœืจืฉื™ืžืช ื”ืชืคื•ืฆื” [ืžื•ื’ืŸ ื‘ื“ื•ื"ืœ], ืื• ื‘ืชื’ื•ื‘ื” ื›ืืŸ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”