bash > look을 사용하여 영어 단어를 추출하고 정립 이미지와 도립 이미지를 만들고 그 Blue 성분을 csv 출력하는 구현 > v0.1, v0.2

11282 단어 borgWarpBash#migrated
운영 환경
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
GNU bash, version 4.3.8(1)-release (x86_64-pc-linux-gnu)

관련 Linux > look을 사용하여 모든 단어 얻기 > for x in {a..z};do look $x;done
관련 PNM > gif 파일을 plain/text format으로 변환 > convert -depth 8 -compress none label.gif label.ppm / PNM (PPM/PGM/PBM)
관련 PNM > PPM 형식에서 RGB B 성분만 꺼내는 원라이너 > tail -n +4 label.ppm | awk '{printf $1 OFS $4 OFS $7 OFS $10 OFS $13 OFS $16 OFS}' > label_blue.txt / tail -n +4 label.ppm | awk -F" " -v OFS=',' '{print $1,$4,$7,$10,$13,$16,""}' | tr -d '\n' > label_blue.txt
관련 Link > ppm > Netpbm color image format

v0.1



code



(디버그를 위해 exit for debug의 주석처럼 끝났습니다)
버그 : ppm 파일의 행 당 항목 수가 이미지에 따라 다른 점을 고려할 수 없습니다.

prep_data_exec_170304
#!/usr/bin/env bash

# v0.1 Mar. 4, 2017
#   - add [OUTPUT_INFILE], [OUTPUT_OUTFILE]
#   - add toCsvText()
#   - flip vertically the image
#   - make upright image for the word
#   - loop for all the words in the [look] dictionary (99,154 words)
#

cnt=1
#IMG_SIZE=20x20
IMG_SIZE=30x30
#FONT_SIZE=12
FONT_SIZE=20
OUTPUT_INFILE="test_in.csv"
OUTPUT_OUTFILE="test_out.csv"

toCsvText() {
    convert -depth 8 -compress none $1 tmp.ppm
    tail -n +4 tmp.ppm | awk -F" " -v OFS=',' '{print $1,$4,$7,$10,$13,$16,""}' | tr -d '\n'
    echo # end of line
}

rm -f $OUTPUT_INFILE
rm -f $OUTPUT_OUTFILE

for x in {a..z}; do
    list=$(look $x)
    for aword in $list; do
        echo $aword # for progress display

        # image for the word
        # - upright
        convert -background lightblue -fill blue -size $IMG_SIZE -gravity center -pointsize $FONT_SIZE label:$aword label_uprt.gif
        # - upside down
        convert label_uprt.gif -flip label_updn.gif     

        # to csv file
        toCsvText label_uprt.gif >> $OUTPUT_INFILE
        toCsvText label_updn.gif >> $OUTPUT_OUTFILE

        # --- exit for debug ---
        ((cnt++))
        if [ $cnt -ge 5 ]; then
            exit 0
        fi
    done
done

결과



다음이 생성됩니다.
  • label_uprt.gif : 정립 이미지
  • label_updn.gif : 역상 이미지
  • test_in.csv : 정립 이미지의 Blue 성분
  • test_out.csv : 역상 이미지의 블루 성분
  • $eog label_uprt.gif
    $eog label_updn.gif

    TODO


  • csv 파일을 출력할 때 쉼표 수가 이상합니다.
  • TensorFlow에서 학습 할 픽셀 수는 고려해야합니다
  • 255로 나누어 규격화하는 것이 좋은지 요점 검토
  • 데이터를 무작위로 사용하는 부분은 TensorFlow 측에서 실시하기로 했다

  • v0.2 > ppm 읽기 실패 수정



    (추기 2017/03/05)

    CSV 파일을 출력 할 때 쉼표 수가 이상합니다.

    수정.

    관련 bash > 임의의 열수를 가지는 파일로부터 3스텝씩 항목을 추출하는 구현 / $@: 모든 인수 항목을 건네준다

    prep_data_exec_170304
    #!/usr/bin/env bash
    
    #
    # v0.2 Mar. 5, 2017
    #   - add extract_blue()
    # v0.1 Mar. 4, 2017
    #   - add [OUTPUT_INFILE], [OUTPUT_OUTFILE]
    #   - add toCsvText()
    #   - flip vertically the image
    #   - make upright image for the word
    #   - loop for all the words in the [look] dictionary (99,154 words)
    #
    
    cnt=1
    
    #IMG_SIZE=20x20
    IMG_SIZE=30x30
    #FONT_SIZE=12
    FONT_SIZE=20
    OUTPUT_INFILE="test_in.csv"
    OUTPUT_OUTFILE="test_out.csv"
    
    extract_blue() {
        # input: ( (R,G,B), (R,G,B), ... )
        ((cnt=1))
        for aword in $@;do
            mdl=$((cnt % 3))
            if [ $mdl -eq 0 ];then  # (1:R, 2:G, 0:B)
                echo $aword
            fi
            ((cnt++))
        done    
    }
    
    toCsvText() {
        convert -depth 8 -compress none $1 tmp.ppm
        res=$(extract_blue $(tail -n +4 tmp.ppm) | tr '\n' ' ' | sed 's/ /,/g')
        # remove comma at the end of the line
        echo $res | sed 's/,$//g'
    }
    
    rm -f $OUTPUT_INFILE
    rm -f $OUTPUT_OUTFILE
    
    for x in {a..z}; do
        list=$(look $x)
        for aword in $list; do
            echo $aword # for progress display
    
            # image for the word
            # - upright
            convert -background lightblue -fill blue -size $IMG_SIZE -gravity center -pointsize $FONT_SIZE label:$aword label_uprt.gif
            # - upside down
            convert label_uprt.gif -flip label_updn.gif     
    
            # to csv file
            toCsvText label_uprt.gif >> $OUTPUT_INFILE
            toCsvText label_updn.gif >> $OUTPUT_OUTFILE
    
            # --- exit for debug ---
            ((cnt++))
            if [ $cnt -ge 5 ]; then
                exit 0
            fi
        done
    done
    

    그렇게 처리되고 있지만 느립니다.
    1000 단어의 처리에 1분 30초 걸린다.
    99,154처리한 경우는 148시간. . .

    처리 시간의 절반은 convert 처리에 의한 것 같다.

    좋은 웹페이지 즐겨찾기