Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

adtfFileReader

ADTF DAT ファイルからストリーム情報を読み取る

R2022a 以降

    説明

    adtfFileReader オブジェクトは、ADTF (Automotive Data and Time-Triggered Framework) DAT ファイル内の各種センサー関連のストリーム情報を読み取ります。ADTF は Elektrobit によって開発されたフレームワークであり、先進運転支援システム (ADAS) および自動運転機能の開発、可視化、テスト、検証を行うためのものです。DAT ファイルには、LiDAR やカメラなどの各種センサーからのデータおよびその他の自動車関連データが含まれます。

    adtfFileReader オブジェクトから読み取る特定のタイプのメッセージを選択するには、オブジェクト関数 select を使用します。

    adtfFileReader では、ADTF DAT ファイルのバージョン 2.0 と 3.0 の両方の読み取りがサポートされています。DAT ファイル内の各ストリームには並べ替えられたチャンクのタイムスタンプが含まれている必要があります。この要件は単一のストリーム内のデータにのみ適用され、複数のストリーム全体には適用されません。

    作成

    説明

    adtfReader = adtfFileReader(dataFileName) は、adtfFileReader オブジェクトである adtfReader を作成します。このオブジェクトは、指定した ADTF DAT ファイルからストリーム情報を読み取ります。

    adtfReader = adtfFileReader(dataFileName,descriptionFileName) は、ADTF DAT ファイル内のストリームの構造を定義する記述ファイルである descriptionFileName を指定します。

    adtfReader = adtfFileReader(dataFileName,pluginDirectoryPath) は、ADTF DAT ファイルから情報を読み取る際に使用するプラグインが格納されているディレクトリである pluginDirectoryPath を指定します。プラグインとは、DAT ファイルを読み取る際に役立つ、オペレーティング システム固有のコンパイル済みオブジェクト ファイルです。

    adtfReader = adtfFileReader(dataFileName,descriptionFileName,pluginDirectoryPath) は、ADTF DAT ファイルからデータを読み取るプラグインのディレクトリと記述ファイルを指定します。

    入力引数

    すべて展開する

    ADTF DAT ファイル名。string スカラーまたは文字ベクトルとして指定します。

    記述ファイル名。string スカラーまたは文字ベクトルとして指定します。記述ファイルの拡張子は XML または DESCRIPTION です。

    ADTF プラグイン ディレクトリの絶対パス。string スカラーまたは文字ベクトルとして指定します。このオブジェクトは、指定したディレクトリ内にある、拡張子が .adtffileplugin のプラグイン ファイルのみを使用します。

    プロパティ

    すべて展開する

    この プロパティ は読み取り専用です。

    読み取る ADTF DAT ファイルの絶対パス。string スカラーとして指定します。

    この プロパティ は読み取り専用です。

    記述ファイルの絶対パス。string スカラーとして指定します。

    この プロパティ は読み取り専用です。

    ADTF プラグイン ディレクトリの絶対パス。string スカラーとして指定します。

    この プロパティ は読み取り専用です。

    DAT ファイル内のストリームの数。正の整数として指定します。

    この プロパティ は読み取り専用です。

    DAT ファイル内すべてのストリームの概要。構造体として指定します。

    オブジェクト関数

    selectCreate reader for selected subset of ADTF DAT file data

    すべて折りたたむ

    この例では、ADTF DAT ファイルに格納されているビデオ ストリームを抽出して可視化する方法について説明します。また、ビデオ ストリームをビデオ ファイルに書き込む方法についても説明します。

    サンプル ビデオ DAT ファイルをダウンロードします。

    downloadURL  = 'https://ssd.mathworks.com/supportfiles/driving/data/sample_can_video_dat.zip';
    dataFolder   = fullfile(tempdir, 'adtf-video', filesep); 
    options      = weboptions('Timeout', Inf);
    zipFileName  = [dataFolder, 'sample_can_video_dat.zip'];
    folderExists = exist(dataFolder, 'dir');
    
    % Create a folder in a temporary directory to save the downloaded file.
    if ~folderExists  
        mkdir(dataFolder); 
        disp('Downloading sample_can_video_dat.zip (9.74 MB)...') 
        websave(zipFileName, downloadURL, options); 
        
        % Extract contents of the downloaded file.
        disp('Extracting sample_can_video_dat.zip...') 
        unzip(zipFileName, dataFolder); 
    end
    Downloading sample_can_video_dat.zip (9.74 MB)...
    
    Extracting sample_can_video_dat.zip...
    

    ADTF ファイル リーダー オブジェクトを作成します。

    datFileName = fullfile(dataFolder,"sample_can_video.dat");
    fileReader  = adtfFileReader(datFileName) 
    fileReader = 
                  DataFileName: "C:\Users\latriwal\AppData\Local\Temp\adtf-video\sample_can_video.dat"
           DescriptionFileName: ""
               PluginDirectory: ""
                   StreamCount: 2
                    StreamInfo: 
    
        StreamIndex    StreamName      StreamType      StartTime     EndTime      ItemCount    SubstreamInfo
        ___________    __________    ______________    _________    __________    _________    _____________
    
             1         {'rawcan'}    {'UNRESOLVED'}      0 sec      14.805 sec       743       {0×1 struct} 
             2         {'video' }    {'adtf/image'}      0 sec      14.799 sec       149       {0×1 struct} 
    
    
    

    StreamInfo プロパティで、ビデオ ストリームのインデックスが 2 であることに注意してください。adtfFileReader オブジェクトの関数 select を使用して、読み取るビデオ ストリームを選択します。返されたadtfStreamReaderオブジェクトに、選択したストリームに関するすべての情報が含まれています。

    streamReader = select(fileReader,2) 
    streamReader = 
      adtfStreamReader with properties:
    
               DataFileName: "C:\Users\latriwal\AppData\Local\Temp\adtf-video\sample_can_video.dat"
        DescriptionFileName: ""
            PluginDirectory: ""
                StreamIndex: 2
                 StartIndex: 1
                   EndIndex: 149
         CurrentIndexOffset: 0
                  StartTime: [0×0 duration]
                    EndTime: [0×0 duration]
                  DataCount: 149
    
    

    CurrentIndexOffset の値が 0 であることに注意してください。これは、次のreadNext呼び出しで最初の項目が返されることを示しています。

    ストリームから最初のイメージ フレームのプレビューを表示します。

    firstFrame = readNext(streamReader);
    imshow(firstFrame.Data.Item)

    ビデオを作成する前に、関数resetを使用して最初のフレームからの読み取りを開始します。これにより、CurrentIndexOffset の値が 0 にリセットされます。

    reset(streamReader);
    fprintf("CurrentIndexOffset = %d\n",streamReader.CurrentIndexOffset)
    CurrentIndexOffset = 0
    

    イメージ フレームをビデオ ファイルに書き込むために使用できるVideoWriterオブジェクトを作成します。フレーム レートとして 1 秒あたり 1 フレームを指定します。

    videoWriterObj = VideoWriter("example_video.avi"); 
    videoWriterObj.FrameRate = 1; 
    open(videoWriterObj); 

    streamReader オブジェクトを使用して、選択したストリームに含まれているデータ項目を 1 つずつ反復します。関数hasNextは、ファイルをインクリメンタルに読み取っているときに読み取る項目が残っているかどうかを判別します。readNextは、基本的にデータおよび関連タイムスタンプが含まれている構造体であるデータ項目を返します。すべての反復で、イメージ フレームを抽出してビデオ ファイルに書き込みます。

    while streamReader.hasNext()
        streamData = streamReader.readNext(); 
        imageFrame = streamData.Data.Item; 
        frame      = im2frame(streamData.Data.Item, gray); 
        writeVideo(videoWriterObj, frame); 
    end 

    あるいは、関数readを使用してすべてのイメージ フレームを一度に読み取って、後から反復することもできます。

    allData = read(streamReader)
    allData = struct with fields:
        StreamIndex: 2
               Data: [149×1 struct]
    
    

    ビデオ ファイルへの接続を閉じます。

    close(videoWriterObj);
    close all

    ビデオ ビューアーを使用して出力ファイル example_video.avi を可視化します。

    implay("example_video.avi") 

    Figure Movie Player contains an axes object and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes object contains an object of type image.

    制限

    • Mac プラットフォームでの DAT ファイルの読み取りはサポートされていません。

    • 次のストリーム タイプの読み取りはサポートされていません。

      • adtf/anonymous

      • adtf/audio

    • adtf/video_compressed ストリーム タイプを読み取る場合は、JPEG 圧縮形式のみがサポートされます。

    バージョン履歴

    R2022a で導入