FC2カウンター FPGAの部屋 Vivado HLS でディレクトリのファイル名を取得するソフトウェアを開発
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado HLS でディレクトリのファイル名を取得するソフトウェアを開発

学習画像をMNISTのデータ形式に変換するのに、今回は、ファイル名が連番ではないので、すべてのファイル名を取得する必要がある。
どうするか?考えたが、ググってみると、「コンピューター:C言語講座:ディレクトリ内容の読み出し」を見つけた。このコードを元にファイル名を取得するように書いてみた。

Vivado HLS 2018.2 で scan_file_name というプロジェクトを作った。
ファイルは scan_file_name.cpp と、この前撮影したZYBOt カメラから撮影したコースの写真だ。
scan_file_name_1_180924.png

C シミュレーションを行った。成功だ。ファイル名を取得することができた。
scan_file_name_2_180924.png

C シミュレーションの出力結果を示す。

INFO: [SIM 2] *************** CSIM start ***************
INFO: [SIM 4] CSIM will launch GCC as the compiler.
Compiling ../../../scan_file_name.cpp in debug mode
Generating csim.exe
bmp_file5.bmp
bmp_file30.bmp
bmp_file7.bmp
bmp_file3.bmp
bmp_file15.bmp
bmp_file38.bmp
bmp_file8.bmp
bmp_file55.bmp
bmp_file57.bmp
bmp_file156.bmp
bmp_file175.bmp
bmp_file4.bmp
bmp_file32.bmp
bmp_file140.bmp
bmp_file58.bmp
bmp_file0.bmp
bmp_file51.bmp
bmp_file160.bmp
bmp_file139.bmp
bmp_file22.bmp
bmp_file129.bmp
bmp_file60.bmp
bmp_file181.bmp
bmp_file170.bmp
bmp_file37.bmp
bmp_file165.bmp
bmp_file177.bmp
bmp_file59.bmp
bmp_file147.bmp
bmp_file10.bmp
bmp_file25.bmp
bmp_file133.bmp
bmp_file169.bmp
bmp_file49.bmp
bmp_file161.bmp
bmp_file176.bmp
bmp_file28.bmp
bmp_file144.bmp
bmp_file42.bmp
bmp_file16.bmp
bmp_file135.bmp
bmp_file2.bmp
bmp_file21.bmp
bmp_file166.bmp
bmp_file1.bmp
bmp_file48.bmp
bmp_file183.bmp
bmp_file6.bmp
bmp_file150.bmp
bmp_file154.bmp
bmp_file128.bmp
bmp_file19.bmp
bmp_file145.bmp
bmp_file53.bmp
bmp_file64.bmp
bmp_file178.bmp
bmp_file127.bmp
bmp_file39.bmp
bmp_file164.bmp
bmp_file126.bmp
bmp_file47.bmp
bmp_file148.bmp
bmp_file172.bmp
bmp_file17.bmp
bmp_file158.bmp
bmp_file44.bmp
bmp_file151.bmp
bmp_file138.bmp
bmp_file56.bmp
bmp_file61.bmp
bmp_file180.bmp
bmp_file141.bmp
bmp_file174.bmp
bmp_file155.bmp
bmp_file168.bmp
bmp_file62.bmp
bmp_file33.bmp
bmp_file54.bmp
bmp_file35.bmp
bmp_file179.bmp
bmp_file11.bmp
bmp_file20.bmp
bmp_file159.bmp
bmp_file52.bmp
bmp_file24.bmp
bmp_file146.bmp
bmp_file43.bmp
bmp_file18.bmp
bmp_file182.bmp
bmp_file45.bmp
bmp_file29.bmp
bmp_file31.bmp
bmp_file14.bmp
bmp_file152.bmp
bmp_file136.bmp
bmp_file130.bmp
bmp_file40.bmp
bmp_file131.bmp
bmp_file13.bmp
bmp_file46.bmp
bmp_file134.bmp
bmp_file41.bmp
bmp_file9.bmp
bmp_file163.bmp
bmp_file12.bmp
bmp_file23.bmp
bmp_file34.bmp
bmp_file143.bmp
bmp_file63.bmp
bmp_file137.bmp
bmp_file142.bmp
bmp_file27.bmp
bmp_file149.bmp
bmp_file171.bmp
bmp_file26.bmp
bmp_file157.bmp
bmp_file50.bmp
bmp_file173.bmp
bmp_file36.bmp
bmp_file153.bmp
bmp_file132.bmp
bmp_file162.bmp
bmp_file167.bmp
INFO: [SIM 1] CSim done with 0 errors.
INFO: [SIM 3] *************** CSIM finish ***************


train ディレクトリの下のleft, right, straight ディレクトリには、42 + 43 + 38 = 123 個のファイルがある。それらのファイル名をすべて表示することができた。
scan_file_name_3_180924.png

これで、学習画像をMNIST のデータ形式に変換することができる。

scan_file_name.cpp のソースコードを貼っておく。

// scan_file_name.cpp
// 2018/09/23 by marsee
//

#include <stdio.h>
#include <dirent.h>
#include "hls_opencv.h"

const char LEFT_PIC_DIR[] = "train/left";
const char RIGHT_PIC_DIR[] = "train/right";
const char STRAIGHT_PIC_DIR[] = "train/straight";
const char CUR_DIR[] = ".";
const char PAR_DIR[] = "..";

int main(){
    DIR *ldir, *rdir, *sdir;
    struct dirent *ldp, *rdp, *sdp;
    int lnum=0, rnum=0, snum=0;
    int max_num;
    int lcnt=0, rcnt=0, scnt=0;

    // Open folder of each file
    if((ldir=opendir(LEFT_PIC_DIR)) == NULL){
        fprintf(stderr, "LEFT_PIC_DIR Open Error\n");
        exit(1);
    }
    if((rdir=opendir(RIGHT_PIC_DIR)) == NULL){
        fprintf(stderr, "RIGHT_PIC_DIR Open Error\n");
        exit(1);
    }
    if((sdir=opendir(STRAIGHT_PIC_DIR)) == NULL){
        fprintf(stderr, "STRAIGHT Open Error\n");
        exit(1);
    }
    
    // Count the number of files in each folder
    for(ldp=readdir(ldir); ldp != NULL; ldp=readdir(ldir)){
        lnum++;
    }
    for(rdp=readdir(rdir); rdp != NULL; rdp=readdir(rdir)){
        rnum++;
    }
    for(sdp=readdir(sdir); sdp != NULL; sdp=readdir(sdir)){
        snum++;
    }
    
    // Find the maximum value
    if(lnum > rnum && lnum > snum)
        max_num = lnum;
    else if(rnum > lnum && rnum > snum)
        max_num = rnum;
    else
        max_num = snum;
    
    // Close
    closedir(ldir);
    closedir(rdir);
    closedir(sdir);
    
    // Reopen folder of each file
    if((ldir=opendir(LEFT_PIC_DIR)) == NULL){
        fprintf(stderr, "LEFT_PIC_DIR Open Error\n");
        exit(1);
    }
    if((rdir=opendir(RIGHT_PIC_DIR)) == NULL){
        fprintf(stderr, "RIGHT_PIC_DIR Open Error\n");
        exit(1);
    }
    if((sdir=opendir(STRAIGHT_PIC_DIR)) == NULL){
        fprintf(stderr, "STRAIGHT Open Error\n");
        exit(1);
    }
    
    // Display file name
    for(int i=1; i <= max_num; i++){
        if(i <= lnum){
            ldp = readdir(ldir);
            if(strcmp(CUR_DIR, ldp->d_name)!=0 && strcmp(PAR_DIR, ldp->d_name)!=0){
                std::cout << ldp->d_name << std::endl;
            }
        }
        if(i <= rnum){
            rdp = readdir(rdir);
            if(strcmp(CUR_DIR, rdp->d_name)!=0 && strcmp(PAR_DIR, rdp->d_name)!=0){
                std::cout << rdp->d_name << std::endl;
            }
        }
        if(i <= snum){
            sdp = readdir(sdir);
            if(strcmp(CUR_DIR, sdp->d_name)!=0 && strcmp(PAR_DIR, sdp->d_name)!=0){
                std::cout << sdp->d_name << std::endl;
            }
        }
    }
    
    return(0);
}

  1. 2018年09月24日 04:03 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4307-a0929ee4
この記事にトラックバックする(FC2ブログユーザー)