# Last edited on 2013-03-22 20:04:14 by stolfilocal TEST_IMAGE_NAMES := \ storefronts OTHER_TEST_IMAGE_NAMES := \ composite \ ellipses \ .PHONY: \ all \ all-classes \ all-TestFloatImage single-TestFloatImage analyze-spectra debug-as-png \ all-DoThresholdImage single-DoThresholdImage \ all-SegmentTruth single-SegmentTruth \ single-MakeEllipseChart \ single-MakeDotDashChart \ single-TestCharGrouper \ clean tarball slim-tarball # all: all-SegmentTruth # all: all-TestFloatImage all: single-TestCharGrouper # all: all-DoThresholdImage # all: single-MakeEllipseChart single-MakeDotDashChart # all: single-MakeDotDashChart # ---------------------------------------------------------------------- # Java compilation LIB_MODULES := \ FloatImage \ FloatImagePaint \ FloatImageSegment \ WordCandElem \ WordCand \ CharGrouper MAIN_MODULES := \ TestCharGrouper ALL_MAIN_MODULES := \ TestFloatImage \ DoThresholdImage \ MakeEllipseChart \ MakeDotDashChart \ SegmentTruth \ TestCharGrouper LIB_JAVA_FILES := ${addsuffix .java,${LIB_MODULES}} MAIN_JAVA_FILES := ${addsuffix .java,${MAIN_MODULES}} LIB_CLASS_FILES := ${addsuffix .class,${LIB_MODULES}} MAIN_CLASS_FILES := ${addsuffix .class,${MAIN_MODULES}} all-classes: ${LIB_CLASS_FILES} ${MAIN_CLASS_FILES} # Local dependencies: CharGrouper.class: WordCand.class WordCandElem.class DoThresholdImage.class: FloatImage.class FloatImageSegment.class FloatImage.class: FloatImagePain.class: FloatImage.class FloatImageSegment.class: FloatImage.class MakeDotDashChart.class: FloatImage.class FloatImagePaint.class MakeEllipseChart.class: FloatImage.class FloatImagePaint.class SegmentTruth.class: FloatImage.class FloatImagePaint.class FloatImageSegment.class TestCharGrouper.class: WordCand.class WordCandElem.class CharGrouper.class FloatImagePaint.class TestFloatImage.class: FloatImage.class FloatImageSegment.class WordCand.class: WordCandElem.class WordCandElem.class: %.class: %.java javac -classpath . $*.java # ---------------------------------------------------------------------- # Running TestFloatImage on all test images: all-TestFloatImage: ${LIB_CLASS_FILES} TestFloatImage.class for img in ${TEST_IMAGE_NAMES} ; do \ ${MAKE} TEST_IMAGE_NAME=$${img} single-TestFloatImage analyze-spectra ; \ done # ---------------------------------------------------------------------- # Recursive make section for single-TestFloatImage. Client mut define ${TEST_IMAGE_NAME}. ifneq "/${TEST_IMAGE_NAME}" "/" IN_DIR := data OUT_DIR := out SHOW_EPS := gv USE_CHANNELS := 1 OUT_PNM_FORMAT := pgm IN_IMAGE_FILE := ${IN_DIR}/${TEST_IMAGE_NAME}.png OUT_IMAGE_FILE := ${OUT_DIR}/${TEST_IMAGE_NAME}.png OUT_PNM_IMAGE_FILE := ${OUT_DIR}/${TEST_IMAGE_NAME}.${OUT_PNM_FORMAT} single-TestFloatImage: ${LIB_CLASS_FILES} TestFloatImage.class -rm -f ${OUT_DIR}/*.{png,pgm,ppm,pnm} java -ea TestFloatImage ${TEST_IMAGE_NAME} display -title '%f' ${OUT_DIR}/*.png debug-as-png: for f in ${OUT_DIR}/*.png ; do \ convert $$f PNM:- | pnmnoraw > $${f%%.*}.pnm ; \ done display -title '%f' ${OUT_DIR}/*.{png,pnm} display -title '%f' -filter Box -resize '400%' ${OUT_DIR}/*.{png,pnm} analyze-spectra: if [[ -s ${OUT_DIR}/noise-dn-w01-r01.png ]]; then \ for f in ${OUT_DIR}/noise*.png ; do \ name="$${f%%.*}" ; \ convert $$f PNM:- \ | pnmspectrum \ -outputTable $${name}.txt \ -freqRanges 64 \ -vignette \ -zeroMean ; \ plot_spectrum.sh $${name} ; \ ${SHOW_EPS} $${name}-r.eps ; \ done ; \ fi endif # ---------------------------------------------------------------------- # Running DoThresholdImage on a bunch of images THRESH_IN_DIR := orig THRESH_OUT_DIR := thrs # THRESH_IMAGE_NAMES := ${basename ${notdir ${wildcard ${THRESH_IN_DIR}/*.png}}} THRESH_IMAGE_NAMES := 106 124 127 all-DoThresholdImage: ${LIB_CLASS_FILES} DoThresholdImage.class for img in ${THRESH_IMAGE_NAMES} ; do \ ${MAKE} THRESH_IMAGE_NAME=$${img} single-DoThresholdImage ; \ done # ---------------------------------------------------------------------- # Recursive make section for single-DoThresholdImage. Client mut define ${THRESH_IMAGE_NAME}. ifneq "/${THRESH_IMAGE_NAME}" "/" IN_IMAGE_FILE := ${THRESH_IN_DIR}/${THRESH_IMAGE_NAME}.png single-DoThresholdImage: ${LIB_CLASS_FILES} DoThresholdImage.class -rm -f ${THRESH_OUT_DIR}/${THRESH_IMAGE_NAME}*.png java -ea DoThresholdImage ${THRESH_IN_DIR} ${THRESH_OUT_DIR} ${THRESH_IMAGE_NAME} display -title '%f' ${THRESH_OUT_DIR}/${THRESH_IMAGE_NAME}_v*_th*.png endif # ---------------------------------------------------------------------- # Running TestCharGrouper on a box list file. CHGROUP_IN_DIR := data CHGROUP_OUT_DIR := out CHGROUP_BBOXES_NAME := bboxes-1 IN_IMAGE_FILE := ${CHGROUP_IN_DIR}/${CHGROUP_BBOXES_NAME}.txt single-TestCharGrouper: ${LIB_CLASS_FILES} TestCharGrouper.class -rm -f ${CHGROUP_OUT_DIR}/${CHGROUP_BBOXES_NAME}*.{txt,png} java -ea TestCharGrouper ${CHGROUP_IN_DIR} ${CHGROUP_OUT_DIR} ${CHGROUP_BBOXES_NAME} ( display -title '%f' -filter Box -resize '100%' ${CHGROUP_OUT_DIR}/${CHGROUP_BBOXES_NAME}-chs.png & ); \ display -title '%f' -filter Box -resize '100%' ${CHGROUP_OUT_DIR}/${CHGROUP_BBOXES_NAME}-wds.png # ---------------------------------------------------------------------- # Running SegmentTruth on some ground truth images SEGTRUTH_IN_DIR := data SEGTRUTH_OUT_DIR := sgtr # SEGTRUTH_IMAGE_NAMES := ${basename ${notdir ${wildcard ${SEGTRUTH_IN_DIR}/*.png}}} SEGTRUTH_IMAGE_NAMES := \ storefronts-legup01-chs \ storefronts-legup01-wds all-SegmentTruth: ${LIB_CLASS_FILES} SegmentTruth.class for img in ${SEGTRUTH_IMAGE_NAMES} ; do \ ${MAKE} SEGTRUTH_IMAGE_NAME=$${img} single-SegmentTruth ; \ done ./sort-segs-by-words.gawk \ -v charFile=${SEGTRUTH_OUT_DIR}/storefronts-legup01-chs.txt \ -v wordFile=${SEGTRUTH_OUT_DIR}/storefronts-legup01-wds.txt \ > ${SEGTRUTH_OUT_DIR}/storefronts-legup01-chs-wds.txt # ---------------------------------------------------------------------- # Recursive make section for single-SegmentTruth. Client mut define ${SEGTRUTH_IMAGE_NAME}. ifneq "/${SEGTRUTH_IMAGE_NAME}" "/" SEGTRUTH_IN_IMAGE_FILE := ${SEGTRUTH_IN_DIR}/${SEGTRUTH_IMAGE_NAME}.png SEGTRUTH_OUT_BBOX_FILE := ${SEGTRUTH_OUT_DIR}/${SEGTRUTH_IMAGE_NAME}.txt single-SegmentTruth: ${LIB_CLASS_FILES} SegmentTruth.class -rm -f ${SEGTRUTH_OUT_DIR}/${SEGTRUTH_IMAGE_NAME}*.png java -ea SegmentTruth \ ${SEGTRUTH_IN_DIR} ${SEGTRUTH_OUT_DIR} ${SEGTRUTH_IMAGE_NAME} \ > ${SEGTRUTH_OUT_BBOX_FILE} endif # ---------------------------------------------------------------------- # Making test charts: CHART_OUT_DIR := out/charts CHART_ELLIPSE_NAME := ${CHART_OUT_DIR}/chart_ellipse single-MakeEllipseChart: ${LIB_CLASS_FILES} MakeEllipseChart.class mkdir -p ${CHART_OUT_DIR} -rm -f ${CHART_ELLIPSE_NAME}.png java -ea MakeEllipseChart ${CHART_OUT_DIR} convert ${CHART_ELLIPSE_NAME}.png -resize '25%' ${CHART_ELLIPSE_NAME}_r25.png CHART_DOTDASH_NAME := ${CHART_OUT_DIR}/chart_dotdash single-MakeDotDashChart: ${LIB_CLASS_FILES} MakeDotDashChart.class mkdir -p ${CHART_OUT_DIR} -rm -f ${CHART_DOTDASH_NAME}.png java -ea MakeDotDashChart ${CHART_OUT_DIR} convert ${CHART_DOTDASH_NAME}.png -resize '25%' ${CHART_DOTDASH_NAME}_r25.png # ---------------------------------------------------------------------- # Cleanup # "make clean" removes derived files and test outputs: clean: /bin/rm -f .dummy *.class *.did /bin/rm -f out/* # ---------------------------------------------------------------------- # Archiving # "make tarball" creates a tar-gzip of everything useful: TARBALL_NAME := java-FloatImage-js TODAY := ${shell date '+%Y-%m-%d-%H%M%S'} tarball: ( cd .. && tar -cvzf ${TARBALL_NAME}-${TODAY}.tgz --exclude='*~' \ FloatImage/{*.{java,sh,gawk,gpl},Makefile,00-*,minetto,utils,data/*.{png,xcf,pgm},sgtr} ) # ---------------------------------------------------------------------- # Archiving # "make slim-tarball" creates a tar-gzip of minimal size: slim-tarball: ( cd .. && tar -cvzf ${TARBALL_NAME}-slim-${TODAY}.tgz --exclude='*~' \ FloatImage/{*.{java,sh,gawk,gpl},Makefile,00-*,minetto,utils} \ FloatImage/{data/storefronts{,-legup01-{wds,chs}}.png,data/bboxes*.txt,sgtr} )