2012-03-22 12 views
2

私は、MatlabとJava Robotクラス(Matlabから呼び出される)を使用して、自動UIテストスイートを作成しています。基本的な制御フローは、このループです:Matlabの リアルタイム処理のための高速スクリーンキャプチャ

  • を使用して、いくつかの処理をプログラムでロボット
  • を使用して、いくつかのキーを押してください

    1. はロボット
    2. を使用して直接Xアプリケーションのスクリーンショットを撮る私が速い必要これらのステップ(ステップ1〜3が理想的には200ms毎に発生する)のための一貫したタイミングを提供する。ステップ2と3はうまくいきますが、スクリーンショットが遅すぎ、不一致で、マシンに依存しています(私のラップトップは画面キャプチャに200〜500msかかるが、デスクトップは速くても私の理想の下にはまだ遠い)。 スクリーンショットのタイミングをより迅速かつ一貫性のあるMatlab/Simulinkパッケージがありますか?

      私はSimulink Real-Time Windowsターゲットを考えましたが、スクリーンショットを取り込むことがsimulinkの入力の有効な形式であるかどうかはわかりません(これは過度のようです)。 画像取得ツールボックスを使ってスクリーンショットを撮ることもできますが、その機能を提供するかどうかは不明です(主にハードウェア画像キャプチャデバイスを扱います)。

      import java.io.*; 
      import java.awt.*; 
      robot = Robot; 
      tool = Toolkit.getDefaultToolkit(); 
      for n = 1:100 
          tic 
          img = robot.createScreenCapture(Rectangle(tool.getScreenSize())); 
          pic = java_img2mat(img); 
          screen = rgb2gray(pic); 
          screen = screen(1:end-100,:); 
          t(n) = toc; 
      end 
      

      とMATLABの使用可能な形式にJavaの画像を変換するために使用される機能::で確認する

      function image = java_img2mat(javaimg) 
      import java.io.*; 
      import java.awt.*;  
           H = javaimg.getHeight; 
           W = javaimg.getWidth; 
          % repackage as a 3D array (MATLAB image format) 
          image = uint8(zeros([H,W,3])); 
          pixelsData = uint8(javaimg.getData.getPixels(0,0,W,H,[])); 
          for i = 1 : H 
          base = (i-1)*W*3+1; 
          image(i,1:W,:) = deal(reshape(pixelsData(base:(base+3*W-1)),3,W)'); 
          end 
      end 
      
    +0

    この質問が長い間続く場合は、Simulink関連のパーツをここに掲載することができます(http://www.mathworks.com/matlabcentral/answers/)。専門家(私ではなく、残念なことに)に見てもらうために、質問に「Simulink」とタグを付けてください。 – KAE

    +0

    それを投稿しても、応答はありません。( – zergylord

    +0

    Mathworksのテクニカルサポート、[email protected]にメールを送ることができます。 – KAE

    答えて

    1

    使用プロファイラ はここにスクリーンショット私はタイミングの目的のために使用したコードですあなたはレイテンシを持っており、これらのポイントでコードを最適化しようとするソフトウェア:

    http://www.mathworks.se/help/techdoc/matlab_env/f9-17018.html

    あなたはDPCレイテンシーチェッカーであなたのシステムの限界に達しているかどうかを10

    チェック - あなたが実行しているバックグラウンドサービスのためか、グラフィックスハードウェアを比較ある程度テストすることができ、このよう:

    http://www.thesycon.de/deu/latency_check.shtml

    0

    されていない場合確認してください誰かが何年も後に気にするが、この男はそれを絞り込んだhere

    私のマシン(およそ10yです)は、スクリーンショットを作成してMATLABフレンドリーなフォーマットに変換するために、80ms以上かかることがあります。

    関連する問題