金子邦彦研究室データ処理オープンデータとビッグデータ処理Point Cloud データセット

Python のデータフレーム

このページでは, Point Cloud データセットの情報源を紹介します

さらに、SQLite 3 のテーブル pcdxyz を生成します。

作成するSQLite 3 データベース: pcddb

※ データ源のURL

前準備

関連する外部ページstlop.html

  • pcd 形式ファイル(アスキー)のプレビュー (CloudCompare を使用)
    CloudCompare
    

    [image]

  • pcd 形式ファイル(アスキー)のプレビュー (R システムを使用)
    #!/bin/bash 
    # CSV ファイル(レコード構造はx,y,z)の表示
    function view_pcdcsv_xyz() {
    cat >/tmp/a.$$.r<<RCOMMAND
      require(data.table)
      require(scatterplot3d)
      require(rgl)
      T <- data.table( read.csv(file="$1", header=FALSE, as.is=TRUE) )
      str(T) 
      plot3d(x = T\$V1, y = T\$V2, z = T\$V3, col=rainbow(1000) )
      Sys.sleep(100)
    RCOMMAND
    cat /tmp/a.$$.r | R --no-save
    }
    
    #
    INFILE=/tmp/svn.pointclouds.org/ism_test_horse.pcd 
    
    fgrep -v PCD ${INFILE} | fgrep -v VERSION | fgrep -v FIELDS | fgrep -v SIZE | fgrep -v TYPE | fgrep -v COUNT | fgrep -v WIDTH | fgrep -v HEIGHT | fgrep -v VIEWPOINT | fgrep -v POINTS | fgrep -v DATA | sed 's/ /,/g' > /tmp/a.$$.csv 
    
    view_pcdcsv_xyz /tmp/a.$$.csv
    
    [image]

    STL 形式, PLY 形式への変換

    STL 形式への変換と確認表示

    #!/bin/bash
    cd /tmp
    cat >/tmp/hoge.mlx <<-MLX
    <!DOCTYPE FilterScript>
    <FilterScript>
     <filter name="Surface Reconstruction: Ball Pivoting">
      <Param type="RichAbsPerc" value="0" min="0" name="BallRadius" max="4113.47"/>
      <Param type="RichFloat" value="20" name="Clustering"/>
      <Param type="RichFloat" value="90" name="CreaseThr"/>
    		       <Param type="RiclhBool" value="false" name="DeleteFaces"/>
     </filter>
    </FilterScript>
    MLX
    # asc ファイル(レコード構造はx,y,z 区切りは半角スペース) を stlに変換
    function ascxyz_to_pcl () {
    
      rm -f $2
      rm -f /tmp/hoge.$$.stl
    
      meshlabserver -i $1 -o /tmp/hoge.$$.stl -s $3
    # hole (穴)に関する処理
      if [ -f /tmp/hoge.$$.stl ]; then 
        admesh -fudev -b $2 /tmp/hoge.$$.stl 
      fi
    }
    
    #
    for INFILE in /tmp/svn.pointclouds.org/*.pcd /tmp/svn.pointclouds.org/*/*.pcd; do
      fgrep -v PCD ${INFILE} | fgrep -v VERSION | fgrep -v FIELDS | fgrep -v SIZE | fgrep -v TYPE | fgrep -v COUNT | fgrep -v WIDTH | fgrep -v HEIGHT | fgrep -v VIEWPOINT | fgrep -v POINTS | fgrep -v DATA | sed 's/ /,/g' > /tmp/a.$$.csv
      cat /tmp/a.$$.csv | sed 's/,/ /g' > `echo ${INFILE} | sed 's/.pcd/.asc/g'`
    #
      ascxyz_to_pcl `echo ${INFILE} | sed 's/.pcd/.asc/g'` `echo ${INFILE} | sed 's/.pcd/.stl/g'` /tmp/hoge.mlx 
    done
    #
    meshlab /tmp/hoge.stl
    

    ※ MLX ファイルは、meshlab を起動し、「Filters」→「show current filter script」と操作し、スクリプトをファイルに保存する pcltomesh.html

    [image]

    STL 形式から ply 形式への変換と確認表示

    #!/bin/bash
    cd /tmp
    #
    for INFILE in /tmp/svn.pointclouds.org/*.stl /tmp/svn.pointclouds.org/*/*.stl; do
      rm -f /tmp/hoge.ply
      echo /tmp/src/stl_ply $INFILE /tmp/hoge.ply
      /tmp/src/stl_ply $INFILE /tmp/hoge.ply
      if [ -f /tmp/hoge.ply ]; then 
         cp /tmp/hoge.ply `echo $INFILE | sed 's/stl/ply/g'`
      fi
    done
    #
    meshlab /tmp/hoge.ply
    

    pcdxyz テーブル作成手順

    テーブル作成

    #!/bin/bash
    cd /tmp
    # drop old pcdxyz
    cat > /tmp/a.$$.sql <<-SQL
      drop table pcdxyz; 
    SQL
    cat /tmp/a.$$.sql | sqlite3 /tmp/pcddb 
    
    # define pcdxyz
    cat > /tmp/a.$$.sql <<-SQL
    create table pcdxyz (
       name         text, 
       x            real, 
       y            real, 
       z            real 
    ); 
    SQL
    cat /tmp/a.$$.sql | sqlite3 /tmp/pcddb 
    
    # populate pcdxyz
    cat > /tmp/a.$$.sql <<-SQL
    .mode csv
    .import "/tmp/a.$$.csv" pcdxyz
    SQL
    DIR=/tmp/svn.pointclouds.org 
    cd ${DIR}
    for i in *.pcd */*.pcd; do 
        echo $i 
        j=`basename $i .pcd`			
        fgrep -v PCD ism_test_cat.pcd | fgrep -v VERSION | fgrep -v FIELDS | fgrep -v SIZE | fgrep -v TYPE | fgrep -v COUNT | fgrep -v WIDTH | fgrep -v HEIGHT | fgrep -v VIEWPOINT | fgrep -v POINTS | fgrep -v DATA | sed 's/ /,/g'  | awk '{print"'$j', "$0}' > /tmp/a.$$.csv 
        cat /tmp/a.$$.sql | sqlite3 /tmp/pcddb 
    done 
    
    # simple test
    echo "select * from pcdxyz limit 10;" | sqlite3 /tmp/pcddb
    

    [image]

    ダウンロードと確認表示

    csv形式ファイルのプレビュー (R システムを使用)

    #!/bin/bash 
    # CSV ファイル(レコード構造はx,y,z,r,g,b)の表示
    function view_pcdcsv_xyzrgb() {
    cat >/tmp/a.$$.r<<RCOMMAND
      require(data.table)
      require(scatterplot3d)
      require(rgl)
      T <- data.table( read.csv(file="$1", header=FALSE, as.is=TRUE) )
      str(T) 
      plot3d(x = T\$V1, y = T\$V2, z = T\$V3, col=rgb(T\$V4/255.0, T\$V5/255.0, T\$V6/255.0) )
      Sys.sleep(100)
    RCOMMAND
    cat /tmp/a.$$.r | R --no-save
    }
    
    #
    INFILE=/tmp/2013.09.05.06.41.47.563.csv
    
    fgrep -v QNAN ${INFILE} > /tmp/a.$$.csv
     
    view_pcdcsv_xyzrgb /tmp/a.$$.csv
    

    [image]

    STL 形式, PLY 形式への変換

    STL 形式への変換と確認表示

    #!/bin/bash
    cd /tmp
    cat >/tmp/hoge.mlx <<-MLX
    <!DOCTYPE FilterScript>
    <FilterScript>
     <filter name="Surface Reconstruction: Ball Pivoting">
      <Param type="RichAbsPerc" value="0" min="0" name="BallRadius" max="4113.47"/>
      <Param type="RichFloat" value="20" name="Clustering"/>
      <Param type="RichFloat" value="90" name="CreaseThr"/>
    		       <Param type="RiclhBool" value="false" name="DeleteFaces"/>
     </filter>
    </FilterScript>
    MLX
    # asc ファイル(レコード構造はx,y,z 区切りは半角スペース) を stlに変換
    function ascxyz_to_pcl () {
    
      rm -f $2
      rm -f /tmp/hoge.$$.stl
    
      meshlabserver -i $1 -o /tmp/hoge.$$.stl -s $3
    # hole (穴)に関する処理
      if [ -f /tmp/hoge.$$.stl ]; then 
        admesh -fudev -b $2 /tmp/hoge.$$.stl 
      fi
    }
    
    #
      cut -d "," -f 1,2,3 /tmp/2013.09.05.06.41.47.563.csv | sed 's/,/ /g' | fgrep -v QNAN > /tmp/a.$$.asc
    #
      ascxyz_to_pcl /tmp/a.$$.asc /tmp/2013.09.05.06.41.47.563.stl /tmp/hoge.mlx 
    #
    meshlab /tmp/2013.09.05.06.41.47.563.stl
    

    ※ MLX ファイルは、meshlab を起動し、「Filters」→「show current filter script」と操作し、スクリプトをファイルに保存する pcltomesh.html

    データソース