C6Accelフレームワークを使用したDSPコプロセッサーDM8168の使用



この記事では、DM816x / C6A816x / AM389xデバッグボードとC6Accelフレームワーク(別名C6EZAccel)について理解するとともに、組み込みのテストアプリケーションを実行するためのシステムのセットアップ方法について説明します。

すべては、マイクロプロセッサでコンピュータービジョンの現在非常に人気のあるOpenCVライブラリのアルゴリズムを使用するという興味深いアイデアから始まりました。 しかし、少しトピックを勉強したので、アイデアは明確になりました。 ARMコアだけでなく、DSP信号のデジタル処理専用のコアにアルゴリズムを実装しないのはなぜですか? したがって、ARMコアをアンロードし、アルゴリズムの実行を高速化することで、最も面倒なアプリケーションがリアルタイムで動作するようになります。

では、問題を解決するために何を使うべきでしょうか? それは少しオプションが判明しました...

すべてを論理的かつ連続的に検討してください。 そもそも、DSPプロセッサを使用できます-これがC6Accelフレームワークです。 まあ、それは最新バージョン-2.01.00.11でのみOpenCV(および2.x)をサポートします。 同様に、このフレームワークはマイクロプロセッサーC6A81xx / DM81xx用に作成されています。 記事のタイトルで、あなたはすでにTI EZSDKソフトウェアインターフェイスを必要とするDM8168に出くわしたことを推測しました(最新バージョンは05/05 / 02.00です)。

詳細を知りたい人のために、記事の最後に役立つリンクがあります。

1.デバッグボードDM816x / C6A816x / AM389xの説明





Texas InstrumentsとSpectrum Digitalが共同で開発したコンピューティングモジュールDM816x / C6A816x / AM389xは、DM816x DaVinci MPU(DM8168、DM8167、DM8166、DM8165)、C6A816x C6-Integra DSP + ARMプロセッサ(C6A8168、C6A8168、C6A8168、C6A8168、C6A8168、C6A8168)での開発を可能にしますAM389x Sitara ARM MPU(AM3894、AM3892)。

この技術の奇跡は、監視用のビデオレコーダー(DVR)、ビデオ会議システム、テレビ放送システム、メディアサーバー、シングルボードコンピューター、コンピューティングゲートウェイマシン、ルーター、サーバー、産業オートメーション、ユーザーマシンインターフェイス(HMI)などの幅広いソリューション向けに設計されています)、データ収集、マシンビジョン、テスト、測定、追跡、監視などのアプリケーション用のサービスポイント端末



次に、オブジェクト自体を見てみましょう。 プリント基板の2つのブロックで構成されています。

多数のコンポーネントがあるため、最も重要なコンポーネントのみに注意を向けます。



上の図は、以下のコンポーネントがマークされたコンピューティングモジュール8168を示しています。
1.および2.は、それぞれスイッチNo. 3(SW3)およびNo. 4(SW4)です。



デフォルトでは、ボードはNANDフラッシュメモリからロードされます(ただし、SDカードからのロードなど、他の多くのモードがあります)。そのため、スイッチNo. 3およびNo. 4は、SW3 [9:0] =” 0000010010”およびSW4 [1:0] =” 10” [NAND / SPI]。

3.シリアルポート(COMポート)。
4. HDMIポート。
5.イーサネットポート。
6. USBポート。
7.コンポーネントビデオコネクタ。
8. SDカードスロット。
9.電源ソケット。
10.電源スイッチ。
11.マイクロプロセッサーDM8168(AM3894およびC6A816をエミュレート)。

機能図:



特別な機能:
•C674x DSP VLIWプロセッサ(最大1 GHz、コマンドタイプ-固定小数点および浮動小数点)。
•ARM Cortex-A8 RISCプロセッサ(最大1.2 GHz)。
•3DグラフィックスアクセラレータSGX530。
•高解像度ビデオ処理サブシステム(HDVPSS)。
•複数のビデオストリームのキャプチャ、エンコード、デコード、および分析を行い、H.264、MPEG4、H263、VC1 / RTV、AVS、RV10、ON2、JPEG、MPEG2をサポートする3つのプログラム可能な高解像度ビデオ処理コプロセッサー(HDVICP2) Divx。
•幅広い周辺モジュール:
-2チャネルギガビットイーサネット。
-2つのPCI Expressレーン。
-物理層が統合された2つのSATAチャネル。
-物理層が統合された2つのUSB 2.0チャネル。
-DDR3、MMC / SD、HDMIおよびDVIインターフェイス。

さらに作業を進めるために、コンポーネント3、5、9に接続し、スイッチ1、2、10を設定しました。

2. C6Accelフレームワークの説明


C6Accelは、Texas Instruments(TI)の完全に無料のソフトウェア開発ツールです。 TIのデュアルコアヘテロジニアスSoCプロセッサでのDSPコードの開発を簡素化することを目的としています。つまり、ARM上でLinuxを実行し、C6000ファミリのDSPプロセッサを含むARM + DSPデバイス向けです。

2.1。 C6Accelの構成要素は何ですか?

C6EZAccelは、 XDAIS (eXpressDsp Algorithm Interoperability Standard)と呼ばれるアルゴリズムインターフェイスに準拠したデジタル信号処理アルゴリズムで構成されています。 TIは、XDAISインターフェイスを使用して記述されたアルゴリズムの効率的な実行を可能にするCodec Engineと呼ばれるフレームワークも提供します。 TIは、SoCソフトウェアの一部としてすべてのコーデックを提供しており、コーデックエンジンの使用を推奨しています。 C6EZAccelは、API(アプリケーションプログラミングインターフェイス)を提供するコーデックエンジンのアドオンであるARMサイドライブラリも備えています。 また、ARM側のアプリケーションコードは、DSPでXDAISアルゴリズムの実行を呼び出すことができます。 このライブラリには、キャッシュ管理、アドレス変換、パラメータの受け渡し、ARMで実行されているアプリケーションからのエラー処理が含まれています。

2.2。 C6Accelはどのように機能しますか?

ARMアプリケーションコード(またはそれを使用するミドルウェア)は、C6Accelを呼び出します。 ライブラリシェルAPIおよび/またはコーデックエンジンを使用します。これは、VISA APIと同様に、オーディオ/ビデオ/音声コーデックを呼び出すために使用されるiUniversal APIと互換性があります。 次に、これらのAPIはコーデックエンジンインターフェイスを調べ、DSPでC6Accelアルゴリズムを呼び出します。これにより、関数呼び出しが識別され、アプリケーションから渡されたパラメーターを使用してDSPで対応する機能が呼び出されます。



3. EZSDKおよびC6Accelの使用


十分な理論、練習に取りかかりましょう。 EZSDK 05/05 / 02.00は、 Ubuntu 10.04 LTS 32-bitまたはUbuntu 11.10 32-bitでのみサポートされています 。 したがって、これらのOSのいずれもインストールされていない(もちろん、新しいバージョンで作業している)人は、VirtualBoxなどの仮想マシンを使用する必要があります。 インストールと構成の手順については、 こちらをご覧ください

以下の表記が使用されます。

3.1。 EZSDKのインストールとビルド

EZSDKの使用を開始する前に、C CodeSourcery Toolchain 2009q-203コンパイラをダウンロードしてインストールする必要があります。 アーカイブをホームディレクトリに解凍するだけです。

EZSDK 05/05 / 02.00をダウンロードして実行:
host $ sudo ./ezsdk_dm816x-evm_5_05_02_00_setuplinux 

インストーラーが起動します。 CodeSourcery Toolchainの場所、つまり/ home /%username%/ arm-2009q1 / binを指定し、EZSDKをインストールするパスは/ home /%username%/ ezsdkです。

このソフトウェアの開発者は私たちの世話をし、インタラクティブスクリプトを作成しました(OCバージョンに厳密にバインドする理由の1つ)。
 host $ export EZSDK="${HOME}/ezsdk" host $ sudo ${EZSDK}/setup.sh 

スクリプトは必要なパッケージをインストールし、説明を求めます:

このスクリプトを修正しましょう。テキストエディタで開き、「mem = 364M @ 0x80000000 mem = 320M @ 0x9FC00000」というテキストを「mem = 364M」に置き換えます。将来、必要なカーネルモジュールをロードできないためです。

次に、ボード上で操作を実行するには、スクリプトで指定された設定でコマンドを使用してminicomを実行する必要があります
 host $ minicom -S setup_uimage-tftp_fs-nfs.minicom 

次に、ボードを再起動する必要があります。

EZSDKを構築する際、一部のコンポーネントが不足しているために問題が発生します。 ディレクトリ/ home /%username%/ ezsdk / example-applicationsでアーカイブ8272.pcie.tar.gzを解凍することで修正できます。

最後に、EZSDKコマンドを収集します
 host $ cd ${HOME}/ezsdk host $ sudo make all host $ sudo make install 

3.2。 C6Accelのインストールとアセンブリ

C6Accel 2.01.00.11をダウンロードして実行します:
 host $ sudo ./c6accel_2_01_00_11_Linux-x86_Setup.bin 

インストールパス/ home /%username%/ c6accelを指定します。

SYS / BIOSリアルタイムオペレーティングシステムはEZSDKの不可欠な部分ですが、6.3.02.09以降のバージョンは、C6Accelの構築時に必要なリアルタイムデータeXchange(RTDX)をサポートしていません。 したがって、C6Accel専用のSYS / BIOS 6.32.02.09をインストールします
 host $ sudo ./bios_setuplinux_6_32_02_39.bin 

インストールパス/ home /%username%/ c6accel / bios_6_32_02_39を指定します。

/ home /%username%/ c6accelのRules.makeファイルのパスを次のように修正します。
 DVSDK_INSTALL_DIR=$(HOME)/ezsdk TARGETFS_INSTALL_DIR = $(HOME)/targetfs C6ACCEL_INSTALL_DIR=$(HOME)/c6accel BIOS_INSTALL_DIR = $(HOME)/c6accel/bios_6_32_02_39 DSPDEVKIT_INSTALL_DIR= $(DVSDK_INSTALL_DIR)/dsp-devkit LINUXDEVKIT_INSTALL_DIR = $(DVSDK_INSTALL_DIR)/linux-devkit PLATFORM = dm816x-evm 

最後に、C6Accelコマンドをまとめます。
 host $ cd ${HOME}/c6accel host $ sudo make all host $ sudo make install 

3.3。 DSPテストの実行

C6AccelにDSPプロセッサでのコード実行のテスト用のサンプルが含まれているのは素晴らしいことです。 cmemおよびdsplinkモジュール(これらはCodecEngineがロードされるARMおよびDSPバインディングライブラリ)をロードするためのスクリプトを実行し、テストアプリケーションを実行しましょう。
 target # cd /opt/c6accel_app/c6accel_dsplib_testapp target # ./loadmodules_ti8168_c6accel.sh target # ./c6accel_dsplib_testapp 

やった! コンソールのレポートによると、すべてが正常であり、何も壊れていません
******************************************************** ******************************
C6でカーネルをテストするためのサンプルアプリケーション
******************************************************** ******************************
CERuntime完了
作成されたC6Accelハンドル
-
C6Accelのビジョン/分析機能のテスト:
-


関数のテスト:VLIB_histogram_1D_dU8 ...
VLIB_histogram_1D_U8はテストに合格しました!


関数のテスト:VLIB_histogram_1D_U16 ...
VLIB_histogram_1D_U16はテストに合格しました!


関数のテスト:VLIB_histogram_nD_U16 ...
VLIB_histogram_nD_U16はテストに合格しました!


関数のテスト:VLIB_weightedHistogram_1D_U8 ...
VLIB_weightedHistogram_1D_U8はテストに合格しました!


関数のテスト:VLIB_weightedHistogram_nD_U16 ...
VLIB_weightedHistogram_nD_U16はテストに失敗しました!
VLIB_unpackMask32はテストに合格しました!
VLIB_packMask32はテストに合格しました!
VLIB_subtractBackGroundS16はテストに合格しました!
VLIB_subtractBackGroundS32はテストに合格しました!


関数のテスト:VLIB_extractLumaFromUYUV ...
VLIB_extractLumaFromUYUVのC6accelテストがテストに合格しました!


関数のテスト:VLIB_convertUYVYsemipl_to_YUVpl ...
VLIB_convertUYVYsemipl_to_YUVplはテストに合格しました!


関数のテスト:VLIB_convertUYVYpl_to_YUVint ...
VLIB_convertUYVYpl_to_YUVintはテストに合格しました!


関数のテスト:VLIB_convertUYVYint_to_YUVpl ...
VLIB_convertUYVYint_to_YUVplはテストに合格しました!


関数のテスト:VLIB_convertUYVYint_to_RGBpl ...
VLIB_convertUYVYint_to_RGBplはテストに合格しました!


関数のテスト:VLIB_ConvertUYVYint_to_YUV420pl ...
VLIB_ConvertUYVYint_to_YUV420plはテストに合格しました!


関数のテスト:VLIB_convertUYVYint_to_LABpl ...
VLIB_convertUYVYint_to_LABplはテストに合格しました!


関数のテスト:VLIB_convertUYVYint_to_HSLpl ...
VLIB_convertUYVYint_to_HSLplはテストに合格しました!


関数のテスト:VLIB_convertUYVYint_to_LABpl_LUT ...


初期化が完了しました。
VLIB_convertUYVYint_to_LABpl2はテストに合格しました!
VLIB_harrisScore_7x7のテスト...
VLIB_harrisScore_7x7はテストに合格しました!


ルジャンドル多項式の初期化

ルジャンドルモーメントの計算


関数のテスト:VLIB_legendreMoments ...
VLIB_legendreMomentsはテストに合格しました!


関数のテスト:VLIB_normalFlow_16 ...
VLIB_normalFlow_16はテストに合格しました!


関数のテスト:VLIB_kalmanFilter_4x6関数...
VLIB_kalmanFilter_ VLIB_recursiveFilterHoriz1stOrderS16 ...
VLIB_recursiveFilterHoriz1stOrderS16はテストに合格しました!

VLIB_recursiveFilterVert1stOrkernel.derのテスト...
VLIB_recursiveFilterVert1stOrderはテストに合格しました!

VLIB_recursiveFilterVert1stOrderS16のテスト...
VLIB_recursiveFilterVert1stOrderS16はテストに合格しました!


関数のテスト:VLIB_bhattacharyaDistance_U32 ...
VLIB_bhattacharyaDistance_U32はテストに合格しました!


関数のテスト:VLIB_L1DistanceS16 ...
VLIB_L1DistanceS16関数はテストに合格しました
VLIB_dilate_bin_maskはテストに合格しました!
VLIB_dilate_bin_squareはテストに合格しました!
VLIB_dilate_bin_crossがテストに合格しました!
VLIB_erode_bin_maskはテストに合格しました!
VLIB_erode_bin_squareはテストに合格しました!
VLIB_erode_bin_crossがテストに合格しました!
VLIB_trackFeaturesLucasKanade_7x7のテスト...
VLIB_trackFeaturesLucasKanade_7x7はテストに合格しました!
VLIBキャニー関数テスト結果:
IMG_conv_7x7:テストに合格しました!
VLIB_xyGradient:テストに合格しました!
VLIB_nonMaximumSuppressionCanny:テストに合格しました!
VLIB_doublethresholding:テストに合格しました!
VLIB_edgeRelaxation:テストに合格しました!

Chained Canny APIの呼び出し:
連鎖キャニーエッジ検出機能がテストに失敗しました!


関数のテスト:VLIB_integralImage8 ...
VLIB_integralImage8はテストに合格しました!


関数のテスト:VLIB_integralImage16 ...
VLIB_integralImage16はテストに合格しました!


関数のテスト:VLIB_imagePyramid8 ...
VLIB_imagePyramid8はテストに合格しました!


関数のテスト:VLIB_imagePyramid16 ...
VLIB_imagePyramid16はテストに合格しました!


関数のテスト:VLIB_gauss5x5PyramidKernel_8 ...
VLIB_gauss5x5PyramidKernel_8はテストに合格しました!


関数のテスト:VLIB_gauss5x5PyramidKernel_16 ...
VLIB_gauss5x5PyramidKernel_16はテストに合格しました!


関数のテスト:VLIB_gradientH5x5PyramidKernel_8 ...
VLIB_gradientH5x5PyramidKernel_8はテストに合格しました!


関数のテスト:VLIB_gradientV5x5PyramidKernel_8 ...
VLIB_gradientV5x5PyramidKernel_8はテストに合格しました!

VLIB_initMeanWithLumaS16はテストに合格しました!
VLIB_updateEWRMeanS16はテストに合格しました!
VLIB_initMeanWithLumaS32はテストに合格しました!
VLIB_updateEWRMeanS32はテストに合格しました!
VLIB_initVarWithConstS32はテストに合格しました!
VLIB_updateEWRVarianceS32はテストに合格しました!
VLIB_initVarWithConstS16はテストに合格しました!
VLIB_updateEWRVarianceS16はテストに合格しました!
VLIB_updateUWRMeanS16はテストに合格しました!
VLIB_updateUWRVarianceS16はテストに合格しました!
-
C6Accelの画像処理機能をテストします。
-
ヒストグラム関数のテストが成功しました
メディアンフィルタリング機能のテストが成功しました
畳み込み関数のテストが成功しました
相関関数のテストが成功しました
Sobelフィルターのテストが成功しました
画像乗算関数のテストが成功しました
画像追加機能のテストが成功しました
画像減算関数のテストが成功しました
色空間変換機能のテストが成功しました
C6accel_IMG_ycbcr422pl_to_ycbcr422sp()成功
C6accel_IMG_ycbcr422sp_to_ycbcr422ile()成功
C6accel_IMG_ycbcr422sp_to_ycbcr420pl成功
-
C6Accelの固定小数点信号処理機能のテスト
-
FFT関数のテストが成功しました
逆FFT関数のテストが成功しました
自己相関機能のテストが成功しました
DoT製品機能のテストが成功しました
行列乗算のテストが成功しました
FIRフィルタリング機能のテストが成功しました
IIRフィルターのテストが成功しました
-
C6Accelの固定小数点数学関数のテスト
-
算術RTS関数のテストが成功しました
変換RTS機能のテストが成功しました
IQmath変換関数のテストが成功しました
数学IQmath関数のテストが成功しました
算術IQmath関数のテストが成功しました
Trignometric IQmath関数のテストが成功しました
-
C6Accelでの浮動小数点数学関数のテスト
-
算術RTS関数のテストが成功しました
変換RTS機能のテストが成功しました
浮動小数点RTS単精度関数のテストが成功しました
浮動小数点RTS倍精度関数のテストが成功しました
-
C6accelの浮動小数点信号処理関数のテスト
-
浮動小数点DSP FFT関数のテストが成功しました
浮動小数点DSPベクトル乗算のテストが成功した
浮動小数点DSPベクトル逆関数のテストが成功しました
浮動小数点DSPベクトル逆関数のテストが成功しました
浮動小数点DSPベクトル加重和関数のテストが成功しました
浮動小数点DSPベクトル内積関数のテストが正常に実行されました
浮動小数点DSPマトリックス関数のテストが成功しました
浮動小数点DSPマトリックス乗算機能のテストが成功しました
浮動小数点DSPマトリックス転置関数のテストが成功しました
浮動小数点DSP自己相関関数のテストが成功しました
浮動小数点DSPコンボリューション関数のテストが成功しました
浮動小数点DSP FIRフィルターのテストが成功しました
浮動小数点DSP逆FFT関数のテストが成功しました
浮動小数点DSP BIQUADフィルターのテストが成功しました
浮動小数点から倍精度へのテストが成功しました
複素数から実数および虚数のテストに合格しました
->非同期呼び出し
FFT関数のテストが成功しました
Sobelフィルターのテストが成功しました
算術RTS関数のテストが成功しました
******************************************************** ******************************
すべてのテストが完了しました。
******************************************************** ******************************


4. ARMとDSPでのOpenCV関数の動作を比較するテスト


OpenCV(オープンソースコンピュータービジョンライブラリ)は、コンピュータービジョン、画像処理、およびオープンソースコードを備えた汎用数値アルゴリズムのアルゴリズムのライブラリです。 ライブラリはCおよびC ++で記述されていますが、Java、Pythonなどでサポートされています。Linux、Windows、およびMac OS Xで動作します。

OpenCVは、リアルタイムで動作できる500以上の機能を備えた使いやすいコンピュータービジョンライブラリです。 それらは、生産の品質管理、セキュリティシステム、医療の画像処理、ユーザーインターフェイス、立体視、ロボット工学など、多くの分野をカバーしています。

OpenCVライブラリは移植性があるため、C / C ++コンパイラを備えたほとんどのシステムでコンパイルできます。 OpenCVは、ARM、MIPS、Xscaleおよびその他のプロセッサーで正常に使用されています。

C6Accel 2.01.00.11にはOpenCVのすべての機能がありますが、50しかありません。

4.1。 OpenCVのインストールとビルド

指示に従って、ARMプラットフォーム用のOpenCV 2.2.0をビルドします。 それらを実行するときは、CodeSourcery Toolchainが既にインストールされていることに注意してください。

共有OpenCVライブラリをターゲットファイルシステムにコピーします。
 host $ cp ${HOME}/build/lib/* ${HOME}/targetfs/usr/lib 

4.2。 組み立てとテストの実行

最初に遭遇した問題は、画像の読み込み中のエラーです。 何らかの理由で、拡張子がpngの画像は好きではありません。エラーはcvCreateImage関数にローカライズされています。 OK、別の拡張子、たとえばbmpに変更しましょう。 これは次のように実行できます。
 host $ cd ${HOME}/c6accel/soc/app/c6accel_opencv_testapp/opencv_images host $ for fname in *.png; do convert "$fname" "$fname.bmp"; done 

そしてもちろん、ソースコードの拡張子を変更することを忘れないでください。 ディレクトリ/ home /%username%/ c6accel / soc / app / c6accel_opencv_testappにあるファイルappMain.cおよびc6accel_opencv_testfxns.cでは、「。png」行のすべての出現を「.png.bmp」に置き換えます。この目的のために、テキストエディターgeditキーボードショートカットCtrl + H

2番目の問題は、C6Accel_test_Matchshapes関数とcvFindCornerSubPix関数を実行するとエラーになることが判明しました(既知のバグhttp://code.opencv.org/issues/963が原因)。

appMain.cファイルで、関数C6Accel_test_Matchshapesの行をコメント化します。 ファイルc6accel_opencv_testfxns.cで、次の行のテキストをコメントアウトします。
 //cvFindCorner SubPix issue to be resolved 
そしてラインまで
 printf("Called ARM FindCornerSubPix function (time: %f ms)\n", t_algo / 1000.0 / n); 

最後に、テストアプリケーションを収集して実行します。
 host $ cd ${HOME}/c6accel host $ sudo make opencv_app host $ sudo make opencv_app_install target # cd /opt/c6accel_app/c6accel_opencv_testapp target # ./loadmodules_ti8168_c6accel.sh target # ./c6accel_opencv_testapp 

やった! 多くの苦痛の後、すべてが機能しました。

アプリケーションの結果は表にまとめられています

Opencv関数


平均時間
充足
ARMの場合、ms


平均時間
充足
DSPでは、ms


マークについて
選ぶ
DSP


実行結果の違い
ARMおよびDSP(空間の距離)
特に指定のない限りL2


cvCanny


43.218000


42.804000


+


0.000000


アフィン変換行列を取得


0.557000


0.411000


+


0.000000


アフィン変換


46.325000


36.554000


+


7926.342031


2D回転行列


0.314000


0.378000


-


0.000000


アフィンを使用した回転


55.380000


40.985000


+


774.451419


cvIntegral


6.537000


8.232000


-


0.000000


cvMinMaxLoc


3.083000


1.660000


+


結果の一致


cvNorm


1.881000


1.336000


+


0.000000


追加


9.573000


12.434000


-


0.000000


アブスディフ


9.036000


14.349000


-


0.000000


Absdiffs


10.555000


12.670000


-


0.000000


追加する


8.931000


15.852000


-


0.000000


cvDilate


3.182000


1.282000


+


0.000000


cvErode


3.093000


1.281000


+


0.000000


cvLaplace


180.171000


11.968000


+


0.000000


cvPyrDown


4.265000


4.917000


-


0.000000


cvFilter2D


519.593000


21.259000


+


3651.030129


cvFindContours


11.915000


17.753000


-


結果の一致


EqualizeHist


5.809000


8.921000


-


0.000000


セットゼロ


0.634000


3.871000


-


132898.252336


長方形


5.847000


1.307000


+


サークル


3.652000


3.323000


+


フリップ


12.372000


12.071000


+


0.000000


コピー


2.479000


6.072000


-


ソーベル


5,463,000


7.197000


-


0.000000


変換スケール


5.139000


6.044000


-


適応しきい値


89.986000


33.231000


+


0.000000


cvMulSpectrums


91.865000


15.221000


+


0.086427


cvDFT


597.131000


99.666000


+


cvNormalize


57.318000


13.576000


+


cvSmooth


109.345000


57.467000


+


1771.619316


Houghlines2d


2314.028000


634.262000


+


46306.904723


cvCornerHarris


653.550000


168.213000


+


0.136828


cvCornerEigenValsAndVecs


3430.892000


870.525000


+


350.751214


cvCornerMinEigenVal


1384.182000


1.155000


+


-


cvMulSpectrums


91.711000


15.323000


+


0.086427


cvDFT


597.707000


99.412000


+


cvNormalize


58.782000


13.751000


+


GoodFeaturesToTrack


1259.277000


279.508000


+


-


FindCornerSubPix


-


449.029000



cvMatchTemplate


1576.569000


221.753000


+


3.741657


cvThreshold


2.182000


4,442,000


-


0.000000


cvBoundingRect


0.036000


0.302000


-


得られた面積の差は0.000000です


cvDrawContour


0.030000


0.989000


-


cvContourArea


0.049000


0.231000


-


プロット


-


183.243000



Cvtcolor


16.283000


13.804000


+


0.000000


サイズ変更


18.357000


17.617000


+


cvCalcOpticalFlowPyrLK


2472.993000


146.874000


+


両方の結果は、445個の機能で構成されています。


HaarDetectObjects


2522.499000


460.350000


+


両方の結果は5つの要素で構成されています。


ARM:


0:46、48(42x42)


1:174、48(37x37)


2:240、51(38x38)


3:110、48(40x40)


4:92、37(131x131)


DSP:


0:47、49(40x40)


1:175、49(35x35)


2:240、52(37x37)


3:17、198(34x34)


4:110、48(38x38)




結果によると、次のように結論付けることができます。

したがって、速度、プロセッサ負荷、実行結果のバランスを取ることで、アプリケーションを大幅に最適化できます。

便利なリンク:
  1. ボードDM816x / C6A816x / AM389x
  2. ダウンロードDM816x
  3. EZSDKユーザーガイド
  4. C6Accelフレームワーク
  5. OpenCV + ロシア語への部分翻訳 に関する優れた本
  6. ARMおよびDSPプロセッサでのOpenCVの使用に関する記事

Source: https://habr.com/ru/post/J248591/


All Articles