bash > look을 사용하여 영어 단어를 추출하고 정립 이미지와 도립 이미지를 만들고 그 Blue 성분을 csv 출력하는 구현 > v0.1, v0.2
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
결과
다음이 생성됩니다.
$eog label_uprt.gif
$eog label_updn.gif
TODO
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 처리에 의한 것 같다.
Reference
이 문제에 관하여(bash > look을 사용하여 영어 단어를 추출하고 정립 이미지와 도립 이미지를 만들고 그 Blue 성분을 csv 출력하는 구현 > v0.1, v0.2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/1a04107f8af1e38e3969텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)