25

特定のシナリオを半リアルタイムで検出するための画像処理の問題を調査しています。私の目標は、ライブビデオをJavaコードのMotionJPEGフレームとして何らかの形で到着させることです。

私はJavaMediaFrameworkに精通していますが、残念ながら、事実上死んでいるAPIと見なすことができると思います。私はAxisボックスにも精通しており、それらのソリューションは本当に気に入っていますが、特定の関心のあるポイントに関する重要なフィードバックをいただければ幸いです。

これが、この議論の目的のために私が「最良」を定義する方法です。

  • レイテンシー-このビデオストリームを使用してカメラを制御している場合、可能であれば、ラウンドトリップレイテンシーを100ミリ秒未満に保ちたいと思います。これは、コントロール入力から目に見える変化が見られるまでの時間として測定されます。しばらくしてから編集してください。もう1つ覚えておくべきことは、カメラ制御は手動と自動(イベントトリガー)の組み合わせである可能性が高いということです。高品質のフィードが個別にアーカイブされている場合でも、これらの写真をすぐに確認する必要があります。
  • コスト-無料/オープンソースは無料でないよりはましです。
  • 調整可能なコーデックパラメータ-特定の状況に合わせてコーデックを調整できる必要があります。高速で低解像度のストリームの方が実際に処理しやすい場合があります。
  • Javaとの「統合」-このソリューションを私のコードにフックするのはどれくらいの問題ですか?ソケットを介してパケットを送信していますか?URLを打つ?Direct3D / JNIの組み合わせをインストールしますか?
  • Windows / Linux /両方?-オペレーティングシステムにとらわれないソリューションを好むのは、OSのいくつかのフレーバーに提供する必要があるためですが、一方に最適で他方には最適でないソリューションがあるかもしれません。

注:私は他の画像/ビデオキャプチャコーデックを知っていますが、それはこの質問の焦点では​​ありません。フレームの精度が低下するため、ストリーミングAPI(MPEG4など)には特に関心がありません。ただし、別のフレーム精度のデータストリームを配信する私の質問に対する解決策がある場合は、チャイムを鳴らしてください。

この質問のフォローアップ:現時点では、ソフトウェアやPCで直接ビデオをキャプチャするのではなく、 Axisビデオエンコーダーなどのアプライアンスを購入する傾向があります。しかし、誰かが代替案を持っているなら、私はそれらを聞いてみたいです。

4

6 に答える 6

7

この JavaCV 実装は正常に動作します。

コード:

import com.googlecode.javacv.OpenCVFrameGrabber;

import com.googlecode.javacv.cpp.opencv_core.IplImage;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

public class CaptureImage {
    private static void captureFrame() {
        // 0-default camera, 1 - next...so on
        final OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        try {
            grabber.start();
            IplImage img = grabber.grab();
            if (img != null) {
                cvSaveImage("capture.jpg", img);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        captureFrame();
    }
}

カメラからのライブビデオの表示に関する投稿もあります。JavaCVの構成:

これはあなたの要件を満たすと思います。

于 2012-01-28T15:24:12.230 に答える
3

FMJ は間違いなくビデオをキャプチャし、それを MJPEG フレームに変換できます。

于 2008-12-31T20:31:24.180 に答える
2

JMF のデッドネスに関して、FMJ の実装を認識していますか? それが「最良の」解決策であるかどうかはわかりませんが、おそらく議論に追加する価値があります.

于 2008-09-30T17:32:35.937 に答える
1

以下に、Marvin Frameworkを使用した非常に単純な実装を示します。Marvin を使用すると、リアルタイムのビデオ処理を簡単に追加できます。

import javax.swing.JFrame;
import marvin.gui.MarvinImagePanel;
import marvin.image.MarvinImage;
import marvin.video.MarvinJavaCVAdapter;
import marvin.video.MarvinVideoInterface;

public class SimpleVideoTest extends JFrame implements Runnable{

    private MarvinVideoInterface    videoAdapter;
    private MarvinImage             image;
    private MarvinImagePanel        videoPanel;

    public SimpleVideoTest(){
        super("Simple Video Test");

        // Create the VideoAdapter and connect to the camera
        videoAdapter = new MarvinJavaCVAdapter();
        videoAdapter.connect(0);

        // Create VideoPanel
        videoPanel = new MarvinImagePanel();
        add(videoPanel);

        // Start the thread for requesting the video frames 
        new Thread(this).start();

        setSize(800,600);
        setVisible(true);
    }

    public static void main(String[] args) {
        SimpleVideoTest t = new SimpleVideoTest();
        t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void run() {
        while(true){
            // Request a video frame and set into the VideoPanel
            image = videoAdapter.getFrame();
            videoPanel.setImage(image);
        }
    }
}

リアルタイムのビデオ処理に複数のアルゴリズムを適用する別の例。

于 2013-07-24T16:16:02.380 に答える
-1

Processing.orgを見たことがありますか? これは基本的に、「芸術的な」アプリケーションと物理的なコンピューティング プラットフォームを開発するための単純化されたアプリケーション フレームワークですが、Java に基づいており、その下にある「本物の」Java を掘り下げることができます。

それが頭に浮かんだ理由は、基本的に Java コンポーネントである Processing 用のビデオライブラリがいくつかあるからです (少なくとも私はそう思います - このサイトには必要な技術情報がすべて含まれています)。Eclipse IDE での処理ライブラリとツールの使用に関するチュートリアルがあります。ビデオのキャプチャと処理に関するも数多くあります。

ライブラリを直接使用できない場合でも、Processing はアルゴリズムを実行するための優れた言語/環境です。そこには、画像とビデオのキャプチャとリアルタイム処理の優れた例がいくつかあります。

于 2008-09-22T20:28:24.173 に答える