OpenCV αž“αŸ…αž›αžΎ STM32F7-Discovery

OpenCV αž“αŸ…αž›αžΎ STM32F7-Discovery αžαŸ’αž‰αž»αŸ†αž‚αžΊαž‡αžΆαž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž˜αž½αž™αŸ” αž”αŸ’αžšαž’αž”αŸ‹αžŸαŸ†αž”αž»αžαŸ’αžšαž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš OpenCV αž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžš STM32746G αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžœαžΆαž™αž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αž‡αžΆ "OpenCV on STM32 board" αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŸαŸ’αžœαŸ‚αž„αžšαž€ αž’αŸ’αž“αž€αž’αžΆαž…αžšαž€αžƒαžΎαž‰αž˜αž“αž»αžŸαŸ’αžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž“αŸαŸ‡αž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžš STM32 ឬ microcontrollers αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”
αž˜αžΆαž“αžœαžΈαžŠαŸαž’αžΌαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžαžΆαž˜αžˆαŸ’αž˜αŸ„αŸ‡αž‚αž½αžšαžαŸ‚αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ (αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΈαžŠαŸαž’αžΌαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžƒαžΎαž‰) αž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžš STM32 αž˜αžΆαž“αžαŸ‚αžšαžΌαž”αž—αžΆαž–αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αž–αžΈαž€αžΆαž˜αŸαžšαŸ‰αžΆ αž αžΎαž™αž›αž‘αŸ’αž’αž•αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž›αžΎαž’αŸαž€αŸ’αžšαž„αŸ‹αŸ” αž αžΎαž™αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαžΌαž”αž—αžΆαž–αžαŸ’αž›αž½αž“αž―αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž‘αžΆαŸ†αž„αž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž’αž˜αŸ’αž˜αžαžΆ αž¬αž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžαžΆαž˜αž–αž›αžαŸ’αž›αžΆαŸ†αž„αž‡αžΆαž„αž“αŸαŸ‡ (αž§αž‘αžΆαž αžšαžŽαŸ Raspberry Pi)αŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαžœαžΆαž–αž·αž”αžΆαž€?

αž—αžΆαž–αž–αŸαž‰αž“αž·αž™αž˜αž“αŸƒαžŸαŸ†αžŽαž½αžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž“αŸ’αž™αž›αŸ‹αžŠαŸ„αž™αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆ OpenCV αž‚αžΊαž‡αžΆαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž…αž€αŸ’αžαž»αžœαž·αžŸαŸαž™αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αž αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αžŸαŸ’αž‚αžΆαž›αŸ‹αžœαžΆ αž αžΎαž™αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΌαžŠαžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž›αžΎ microcontroller αž‡αž½αž™αžŸαž˜αŸ’αžšαž½αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž“αŸ…αžαŸ‚αž˜αž·αž“αž˜αžΆαž“αžšαžΌαž”αž˜αž“αŸ’αžαžŠαŸ‚αž›αž•αž›αž·αžαžšαž½αž…αžšαžΆαž›αŸ‹αž–αŸαž‰αž“αž·αž™αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡?

αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ OpenCV αž“αŸ…αž›αžΎ shawls αžαžΌαž…αž‚αžΊαž‘αžΆαž€αŸ‹αž‘αž„αž‘αŸ…αž“αžΉαž„αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž–αžΈαžš:

  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αž€αŸ’αžšαž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αžŸαŸ†αžŽαž»αŸ†αž˜αŸ‰αžΌαžŒαž»αž›αžαž·αž…αžαž½αž…αž€αŸαžŠαŸ„αž™ αžœαžΆαž“αžΉαž„αž˜αž·αž“αžŸαž˜αž“αžΉαž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž–αž“αŸ’αž›αžΊαž“αŸƒ STM32F7Discovery αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ (αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžŠαŸ„αž™αž˜αž·αž“αž‚αž·αžαž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš) αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž›αŸαžαž€αžΌαžŠαž’αŸ†αžŽαžΆαžŸαŸ‹ (αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž‡αžΆαž…αŸ’αžšαžΎαž“αž˜αŸαž€αžΆαž”αŸƒ)
  • αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžαŸ’αž›αž½αž“αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆ C ++ αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆ
    • αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαž·αž‡αŸ’αž‡αž˜αžΆαž“ (αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ”αž›αŸ”)
    • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžαž·αž…αžαž½αž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ LibC/Posix αžŠαŸ‚αž›αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ OS αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αž„αŸ’αž€αž”αŸ‹ - αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž”αžΌαž€ αž“αž·αž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž‚αŸ†αžšαžΌ STL αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš (αžœαŸ‰αž·αž…αž‘αŸαžšαŸ”αž›αŸ”)

αž€αŸ†αž–αž»αž„αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž€αžΆαž“αŸ‹ Embox

αžŠαžΌαž…αž’αž˜αŸ’αž˜αžαžΆ αž˜αž»αž“αž“αžΉαž„αž”αž‰αŸ’αž‡αžΌαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŽαžΆαž˜αž½αž™αž‘αŸ…αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αžœαžΆαž‡αžΆαž€αžΆαžšαž›αŸ’αž’αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž„αŸ’αž€αžΎαžαžœαžΆαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž˜αžΆαž“αž”αŸ†αžŽαž„αžœαžΆαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αž·αž“αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž“αŸαŸ‡αž‘αŸ - αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž›αžΎ githubαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αž“αŸ…αž€αŸ’αžšαŸ„αž˜ GNU/Linux αž‡αžΆαž˜αž½αž™αž“αžΉαž„ cmake αž’αž˜αŸ’αž˜αžαžΆαŸ”

αžŠαŸ†αžŽαžΉαž„αž›αŸ’αž’αž‚αžΊαžαžΆ 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 αŸ” αž€αŸ’αž“αž»αž„αž“αžΆαž˜αž‡αžΆαžœαŸαž‘αž·αž€αžΆαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Integrator / CP αž–αžΈαž–αŸ’αžšαŸ„αŸ‡ αž‘αžΈαž˜αž½αž™ αžœαžΆαž€αŸαž‡αžΆ ARM αž•αž„αžŠαŸ‚αžš αž αžΎαž™αž‘αžΈαž–αžΈαžš Embox αž‚αžΆαŸ†αž‘αŸ’αžšαž›αž‘αŸ’αž’αž•αž›αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαŸαž‘αž·αž€αžΆαž“αŸαŸ‡αŸ”

Embox αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαžΆαž„αžŸαž„αŸ‹αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžαžΆαž„αž€αŸ’αžšαŸ… αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαžΆ αž™αžΎαž„αž”αž“αŸ’αžαŸ‚αž˜ OpenCV αž‡αžΆαž˜αŸ‰αžΌαžŒαž»αž› (αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹ "αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αž" αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž‹αž·αžαž·αžœαž“αŸ’αž) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αžαŸ’αž‰αž»αŸ†αž”αž“αŸ’αžαŸ‚αž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ‚αž›αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

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 Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² сборку ΠΈ Ρ‚.ΠΏ.>

αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αžŠαŸ„αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαŸ’αž›αž½αž“αž―αž„αŸ” αž“αŸ…αž›αžΎαž‚αŸαž αž‘αŸ†αž–αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”. αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αž§αž”αž€αžšαžŽαŸαž…αžΆαž”αŸ‹αž–αŸ’αžšαŸ†αžŠαŸ‚αž“ canny.

αž§αž‘αžΆαž αžšαžŽαŸαžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž‘αžΎαž„αžœαž·αž‰αž”αž“αŸ’αžαž·αž… αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αžšαžΌαž”αž—αžΆαž–αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αž‘αŸ’αž’αž•αž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŸαŸŠαž»αž˜αŸ” αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž”αŸ‚αž”αž“αŸαŸ‡ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αŸ” αž˜αž»αžαž„αžΆαžš imshow() αž’αžΆαž…αž‚αžΌαžšαžšαžΌαž”αž—αžΆαž–αžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ QT, GTK αž“αž·αž„ Windows αžŠαŸ‚αž›αž–αž·αžαžŽαžΆαžŸαŸ‹αž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ STM32 αž“αŸ„αŸ‡αž‘αŸαŸ” αžαžΆαž˜αž–αž·αž QT αž€αŸαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎ STM32F7Discovery αž•αž„αžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž˜αž½αž™αž‘αŸ€αžπŸ™‚

αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αž€αžΆαžšβ€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αžαŸ’αž›αžΈβ€‹αž˜αž½αž™β€‹αž€αŸ’αž“αž»αž„β€‹αž‘αž˜αŸ’αžšαž„αŸ‹β€‹αžŠαŸ‚αž›β€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž“αŸƒβ€‹αž§αž”αž€αžšαžŽαŸβ€‹αž…αžΆαž”αŸ‹β€‹αž‚αŸ‚αž˜β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžšαž€αŸ’αžŸαžΆβ€‹αž‘αž»αž€ αž™αžΎαž„β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αžšαžΌαž”αž—αžΆαž–αŸ”

OpenCV αž“αŸ…αž›αžΎ STM32F7-Discovery

αžšαžΌαž”αž—αžΆαž–αžŠαžΎαž˜

OpenCV αž“αŸ…αž›αžΎ STM32F7-Discovery

αž›αž‘αŸ’αž’αž•αž›

αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎ STM32F7Discovery

αž“αŸ…αž›αžΎ 32F746GDISCOVERY αž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž•αŸ’αž“αŸ‚αž€αžšαžΉαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžœαž·αž’αžΈαž˜αž½αž™αž¬αž•αŸ’αžŸαŸαž„αž‘αŸ€αž

  1. RAM 320 αž‚αžΈαž‘αžΌαž”αŸƒ
  2. αž–αž“αŸ’αž›αžΊ 1MiB αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž–
  3. 8 MiB SDRAM
  4. 16MiB QSPI NAND Flash
  5. αžšαž“αŸ’αž’αžŠαŸ„αžαž€αžΆαž microSD

αž€αžΆαž SD αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžšαžΌαž”αž—αžΆαž– αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘αž“αŸƒαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž§αž‘αžΆαž αžšαžŽαŸαžαž·αž…αžαž½αž… αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžαŸ’αž›αžΆαŸ†αž„αž“αŸ„αŸ‡αž‘αŸαŸ”
αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž˜αžΆαž“αž‚αž»αžŽαž—αžΆαž–αž”αž„αŸ’αž αžΆαž‰ 480 Γ— 272 αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŸαŸŠαž»αž˜αž“αžΉαž„αž˜αžΆαž“ 522 αž”αŸƒαž“αŸ…αž‡αž˜αŸ’αžšαŸ… 240 αž”αŸŠαžΈαžαž–αŸ„αž›αž‚αžΊαž§αŸ” αž“αŸαŸ‡αž‚αžΊαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž‘αŸ†αž αŸ† RAM αžŠαžΌαž…αŸ’αž“αŸαŸ‡ framebuffer αž“αž·αž„ heap (αžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžš αžšαž½αž˜αž‘αžΆαŸ†αž„ OpenCV αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž– αž“αž·αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αŸ†αž“αž½αž™) αž“αžΉαž„αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ… SDRAM αž’αŸ’αžœαžΈαŸ—αž•αŸ’αžŸαŸαž„αž‘αŸ€αž (memory for stacks αž“αž·αž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αžŸαŸαž„αž‘αŸ€αž ) αž“αžΉαž„αž‘αŸ… 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 αžšαžΌαž”αž—αžΆαž–αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαž αžΎαž™αž’αžΆαž“αžœαžΆαž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαž€αžΆαžαž’αŸαžŸαžŒαžΈαž‘αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ‰αž»αž“αŸ’αžαŸ‚ fruits.png αž˜αžΆαž“αž‘αž˜αŸ’αž„αž“αŸ‹αž”αŸ’αžšαž αŸ‚αž› 330KiB αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž”αžΆαž“αž‘αŸαŸ– αž—αžΆαž‚αž…αŸ’αžšαžΎαž“ .text αž˜αžΆαž“αž›αŸαžαž€αžΌαžŠ OpenCV αŸ”

αžŸαžšαž»αž”αž˜αž€ αž˜αžΆαž“αžšαžΏαž„αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαŸ‚αž›αž“αŸ…αžŸαŸαžŸαžŸαž›αŸ‹ - αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž€αžΌαžŠαž‘αŸ…αž€αŸ’αž“αž»αž„ QSPI flash (αžœαžΆαž˜αžΆαž“αžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž–αž·αžŸαŸαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‘αŸ…αž€αžΆαž“αŸ‹αžšαžαž™αž“αŸ’αžαž€αŸ’αžšαž»αž„ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαž½αžšαž€αŸ’αž”αžΆαž›αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹)αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž”αž‰αŸ’αž αžΆαž€αžΎαžαž‘αžΎαž„αŸ– αž‘αžΈαž˜αž½αž™ αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžšαž”αžŸαŸ‹ QSPI flash drive αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αž—αŸ’αž›αžΆαž˜αŸ—αž‘αŸ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž§αž”αž€αžšαžŽαŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰ (αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžšαž”αŸ€αž”αž€αŸ†αžŽαžαŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆ) αž αžΎαž™αž‘αžΈαž–αžΈαžš αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž… "flash" αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž’αŸ’αž›αžΆαž”αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹αŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž—αŸ’αž‡αžΆαž”αŸ‹αž€αžΌαžŠαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ QSPI αž αžΎαž™αž”αž‰αŸ’αž…αŸαž‰αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αžŠαŸ‚αž›αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆ TFTP αŸ”

αž›αž‘αŸ’αž’αž•αž›

αž‚αŸ†αž“αž·αžαžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž‡αžΌαž“αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž“αŸαŸ‡αž‘αŸ… Embox αž”αžΆαž“αž›αŸαž…αž‘αžΎαž„αž”αŸ’αžšαž αŸ‚αž›αž˜αž½αž™αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αŸ’αžαž„αž αžΎαž™αž˜αŸ’αžαž„αž‘αŸ€αž αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αžŠαŸ„αž™αžŸαžΆαžšαž αŸαžαž»αž•αž›αž•αŸ’αžŸαŸαž„αŸ—αŸ” αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž–αž½αž€αž‚αŸαž‚αžΊαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ libstdc ++ αž“αž·αž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž‚αŸ†αžšαžΌαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαŸ” αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš C ++ αž“αŸ…αž€αŸ’αž“αž»αž„ Embox αž‚αžΊαž αž½αžŸαž–αžΈαžœαž·αžŸαžΆαž›αž—αžΆαž–αž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž“αž·αž™αžΆαž™αžαžΆαž™αžΎαž„αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž”αžšαž·αž˜αžΆαžŽαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšπŸ™‚

αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αž”αž‰αŸ’αž αžΆαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž™αž€αžˆαŸ’αž“αŸ‡ (αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž‘αžΆαž αžšαžŽαŸ OpenCV αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš) αž αžΎαž™αž§αž‘αžΆαž αžšαžŽαŸαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž› 40 αžœαž·αž“αžΆαž‘αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ’αžšαž»αž˜αž”αŸ’αžšαžΉαž€αŸ’αžŸαžΆαž—αž·αž”αžΆαž›αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αž–αŸ’αžšαŸ†αžŠαŸ‚αž“αžŠαŸ„αž™αž”αŸ’αžšαžΎαžαž˜αŸ’αžšαž„ Canny αŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹αž“αŸαŸ‡αž‚αžΊαžœαŸ‚αž„αž–αŸαž€ (αž˜αžΆαž“αž€αžΆαžšαž–αž·αž…αžΆαžšαžŽαžΆαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αžœαžΆαž“αžΉαž„αž’αžΆαž…αžŸαžšαžŸαŸαžšαž’αžαŸ’αžαž”αž‘αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‡αŸ„αž‚αž‡αŸαž™)αŸ”

OpenCV αž“αŸ…αž›αžΎ STM32F7-Discovery

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž‚αŸ„αž›αžŠαŸ…αž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž‚αŸ†αžšαžΌαžŠαžΎαž˜αžŠαŸ‚αž›αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž›αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš OpenCV αž“αŸ…αž›αžΎ STM32 αžšαŸ€αž„αž‚αŸ’αž“αžΆ αž‚αŸ„αž›αžŠαŸ…αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž… αž αžΌαžšαŸ‰αžΆαž™!

tl;dr: αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž‡αžΆαž‡αŸ†αž αžΆαž“ αŸ—

0αŸ– αž‘αžΆαž‰αž™αž€αž”αŸ’αžšαž—αž– Embox αžŠαžΌαž…αž“αŸαŸ‡αŸ–

    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αŸ– αž…αž„αž€αŸ’αžšαž„αžšαžΌαž”αž—αžΆαž–αž‡αžΆαž˜αž½αž™αž“αžΉαž„ config αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ OpenCV αŸ”

    make confload-platform/opencv/stm32f7discovery
    make

αŸ€αŸ– αžŸαŸ’αžšαž„αŸ‹αž…αŸαž‰αž–αžΈαž•αŸ’αž“αŸ‚αž€ 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 flash driveαŸ” αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž…αž˜αŸ’αž›αž„ qspi.bin αž‘αŸ…αž€αžΆαž“αŸ‹αžαž root αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ 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 (ឧ. αž“αŸ…αž€αŸ’αž“αž»αž„ bootloader) αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜ (αž™αžΎαž„αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆ server αž˜αžΆαž“αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ 192.168.2.1)αŸ–

    embox> qspi_loader qspi.bin 192.168.2.1

αŸ¦αŸ– αžŠαŸ„αž™β€‹αž”αž‰αŸ’αž‡αžΆ goto αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœ "αž›αŸ„αž" αž‘αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† QSPI αŸ” αž‘αžΈαžαžΆαŸ†αž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αžΉαž„αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžšαž”αŸ€αž”αžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ mem 0x90000000 (αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαž˜αž“αžΉαž„αž–αžΆαž€αŸ’αž™ 32 αž”αŸŠαžΈαžαž‘αžΈαž–αžΈαžšαž“αŸƒαžšαžΌαž”αž—αžΆαž–); αž’αŸ’αž“αž€αž€αŸαž“αžΉαž„αžαŸ’αžšαžΌαžœαžŠαžΆαž€αŸ‹αž‘αž„αŸ‹αž‡αž„αŸ‹αž•αž„αžŠαŸ‚αžšαŸ” -sαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž‡αž„αŸ‹αž‚αžΊαž“αŸ… 0x90000000 αž§αž‘αžΆαž αžšαžŽαŸαŸ–

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

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

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

αŸ§αŸ– αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš

    embox> edges 20

αž“αž·αž„αžšαžΈαž€αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž–αŸ’αžšαŸ†αžŠαŸ‚αž“ 40 αžœαž·αž“αžΆαž‘αžΈπŸ™‚

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αž’αŸ’αžœαžΈαžαž»αžŸ - αžŸαžšαžŸαŸαžšαž”αž‰αŸ’αž αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ αžƒαŸ’αž›αžΆαŸ†αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”αž¬αž‘αŸ…αž€αžΆαž“αŸ‹αž”αž‰αŸ’αž‡αžΈαžŸαŸ†αž”αž»αžαŸ’αžšαžšαž½αž˜ [αž’αŸŠαžΈαž˜αŸ‚αž›αž€αžΆαžšαž–αžΆαžš]αž¬αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹