- Timestamp:
- 2019-06-27T15:19:39+12:00 (5 years ago)
- Location:
- other-projects/is-sheet-music-encore/trunk/image-identification-terminal
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
other-projects/is-sheet-music-encore/trunk/image-identification-terminal/javaImageClassifier.java
r33221 r33243 12 12 import javax.imageio.ImageIO; 13 13 import java.util.logging.Logger; 14 import java.util.ArrayList; 14 15 15 16 //REFERENCES: … … 28 29 public class javaImageClassifier{ 29 30 //Constants 30 static int CLASSIFIER_HOUGHLINESP_MIN = 5; 31 static int CLASSIFIER_HOUGHLINESP_MAX = 40; 31 32 static int CLASSIFIER_HOUGHLINESP_MIN = 10; 33 static int CLASSIFIER_HOUGHLINESP_MAX = 65; 34 static int HOUGHLINEP_THRESHOLD = 10; 35 static int MINLINECOUNT = 40; //50 36 static double MAXLINEGAP = 4; 37 static double SLOPEGRADIENT = 0.02; //0.01 32 38 33 39 public static void main(String[] args) { … … 37 43 } 38 44 else { 45 ArrayList result_refined = null; 39 46 Boolean result = null; 40 47 String imageFilename = args[0]; 41 48 String classifierType = args[1]; 42 String outputFilename = args[2]; 49 String outputFilename = args[2]; 50 //Prep Writing output to disc 51 File log = new File(outputFilename); 52 FileWriter fileWriter = new FileWriter(log, true); 53 BufferedWriter bw = new BufferedWriter(fileWriter); 43 54 //Execute classifierType defined from arguement 55 56 //Split output by tab for processing in next java program 57 //imageFilename = 1, result = 3, classifierType = 4 44 58 switch(classifierType){ 45 59 case "houghlinesP": 46 60 result = setup_HoughLinesP(imageFilename); //true or false 61 bw.write("Filename:" + '\t' + imageFilename + '\t' + "Classified as:" + '\t' + result + '\t' + classifierType + '\n'); 47 62 break; 48 63 case "houghlinesP-refined": 49 result = setup_HoughLinesP_refined(imageFilename); 64 result_refined = setup_HoughLinesP_refined(imageFilename); 65 bw.write("Filename:" + '\t' + imageFilename + '\t' + "Classified as:" + '\t' + result_refined.get(0) + '\t' + "Number of lines:" + '\t' + result_refined.get(1) + '\t' + classifierType + '\n'); 50 66 break; 51 67 default: … … 53 69 break; 54 70 } 55 //Write output to disc 56 File log = new File(outputFilename); 57 FileWriter fileWriter = new FileWriter(log, true); 58 BufferedWriter bw = new BufferedWriter(fileWriter); 59 //Split output by tab for processing in next java program 60 //imageFilename = 1, result = 3, classifierType = 4 61 bw.write("Filename:" + '\t' + imageFilename + '\t' + "Classified as:" + '\t' + result + '\t' + classifierType + '\n'); 71 62 72 bw.close(); 63 73 } … … 81 91 Mat edgesDetected = new Mat(); 82 92 Mat edgesDetectedRGB = new Mat(); 93 Mat edgesExtra = new Mat(); 83 94 Mat edgesDetectedRGBProb; 84 95 // Load an image … … 108 119 } 109 120 110 private static Booleansetup_HoughLinesP_refined(String filename){121 private static ArrayList setup_HoughLinesP_refined(String filename){ 111 122 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 112 123 Boolean isSheetMusic = null; 124 ArrayList returnArray = new ArrayList(); 113 125 try{ 126 114 127 //Variables 128 int horizontalLineCount =0; 115 129 Mat edgesDetected = new Mat(); 116 130 Mat edgesDetectedRGB = new Mat(); 131 Mat edgesExtra = new Mat(); 117 132 Mat edgesDetectedRGBProb; 118 133 // Load an image 119 134 Mat original = Imgcodecs.imread(filename, Imgcodecs.IMREAD_GRAYSCALE); 120 135 // Edge detection 121 Imgproc.Canny(original, edgesDetected, 50, 200, 3, false); 136 //Imgproc.Canny(original, edgesDetected, 50, 200, 3, false); 137 Imgproc.adaptiveThreshold(original, edgesDetected,255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C,Imgproc.THRESH_BINARY_INV,15, 2); 138 //Imgproc.medianBlur(edgesExtra, edgesDetected, 3); 139 140 122 141 //Copy edges to the images that will display the results in BGR 123 142 Imgproc.cvtColor(edgesDetected, edgesDetectedRGB, Imgproc.COLOR_GRAY2BGR); 124 143 // Probabilistic Line Transform 125 144 Mat linesP = new Mat(); // will hold the results of the detection 126 double minLineLength = edgesDetectedRGB.size().width/ 4;127 //Imgproc.HoughLinesP(edgesDetected, linesP, 1, Math.PI / 180, 50, minLineLength, 10);// runs the actual detection128 Imgproc.HoughLinesP(edgesDetected, linesP, 1, Math.PI / 180, 10, minLineLength, 5);// remote testing145 double minLineLength = edgesDetectedRGB.size().width/8; 146 //Imgproc.HoughLinesP(edgesDetected, linesP, 1, Math.PI / 180, 10, minLineLength, MAXLINEGAP);// runs the actual detection 147 Imgproc.HoughLinesP(edgesDetected, linesP, 1, Math.PI / 720, HOUGHLINEP_THRESHOLD, minLineLength, MAXLINEGAP); //TESTING 129 148 // Draw the lines 130 149 … … 139 158 //System.out.println(l[2]); 140 159 //System.out.println(l[3]); 141 if(m< 0.1) {160 if(m<SLOPEGRADIENT) { 142 161 //System.out.println("m: " + m); 143 Imgproc.line(edgesDetectedRGB, new Point(l[0], l[1]), new Point(l[2], l[3]), new Scalar(0, 0, 255), 3, Imgproc.LINE_AA, 0); 162 Imgproc.line(edgesDetectedRGB, new Point(l[0], l[1]), new Point(l[2], l[3]), new Scalar(0, 0, 255), 1, Imgproc.LINE_AA, 0); 163 horizontalLineCount++; 144 164 } 145 165 } … … 148 168 BufferedImage toBeClassifiedImg = toBufferedImage(edgesDetectedRGB); 149 169 //Calculate if its sheet music or not 150 isSheetMusic = classifier_HoughLinesP(toBeClassifiedImg); 151 170 isSheetMusic = classifier_HoughLinesP_refined(horizontalLineCount); 171 returnArray.add(isSheetMusic); 172 returnArray.add(horizontalLineCount); 152 173 153 174 } … … 155 176 System.err.println(e); 156 177 } 157 return isSheetMusic;178 return returnArray; 158 179 } 159 180 … … 193 214 return false; 194 215 } 216 217 private static boolean classifier_HoughLinesP_refined(int lineCount){ 218 if(lineCount>MINLINECOUNT){ 219 return true; 220 } 221 else{ 222 return false; 223 } 224 } 225 195 226 private static BufferedImage toBufferedImage(Mat mat){ 196 227 //MOSTLY COPY PASTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -
other-projects/is-sheet-music-encore/trunk/image-identification-terminal/results.txt
r33221 r33243 22 22 23 23 24 Date: Sun Jun 23 17:48:16 NZST 2019 24 BEST SO FAR 25 Date: Tue Jun 25 16:02:11 NZST 2019 26 Classifier: houghlinesP-refined 27 truePositive: 80 28 falseNegative: 20 29 falsePositve: 11 30 trueNegative: 89 31 SheetMusicAccuracyRate: 80.0% 32 NotSheetMusicAccuracyRate: 89.0% 33 OverallAccuracyRate: 84.5% 34 35 Date: Tue Jun 25 16:21:55 NZST 2019 36 Classifier: houghlinesP 37 truePositive: 3063 38 falseNegative: 98 39 falsePositve: 596 40 trueNegative: 1244 41 SheetMusicAccuracyRate: 96.89972% 42 NotSheetMusicAccuracyRate: 67.608696% 43 OverallAccuracyRate: 86.12277% 44 45 Date: Tue Jun 25 20:06:21 NZST 2019 46 Classifier: houghlinesP-refined-all 47 truePositive: 1723 48 falseNegative: 1438 49 falsePositve: 86 50 trueNegative: 1754 51 SheetMusicAccuracyRate: 54.508064% 52 NotSheetMusicAccuracyRate: 95.32609% 53 OverallAccuracyRate: 69.52609% 54 55 Date: Tue Jun 25 20:13:22 NZST 2019 56 Classifier: houghlinesP-refined 57 truePositive: 80 58 falseNegative: 20 59 falsePositve: 11 60 trueNegative: 89 61 SheetMusicAccuracyRate: 80.0% 62 NotSheetMusicAccuracyRate: 89.0% 63 OverallAccuracyRate: 84.5% 64 65 Date: Tue Jun 25 22:40:22 NZST 2019 66 Classifier: houghlinesP-refined-all-canny 67 truePositive: 1124 68 falseNegative: 2037 69 falsePositve: 61 70 trueNegative: 1779 71 SheetMusicAccuracyRate: 35.558365% 72 NotSheetMusicAccuracyRate: 96.684784% 73 OverallAccuracyRate: 58.048393% 74 75 MAX 65 76 MIN 10 77 ALL MU 78 RESULT: 79 80 81 Date: Wed Jun 26 20:08:09 NZST 2019 82 Classifier: houghlinesP-refined-all-canny 83 truePositive: 1124 84 falseNegative: 2037 85 falsePositve: 61 86 trueNegative: 1779 87 SheetMusicAccuracyRate: 35.558365% 88 NotSheetMusicAccuracyRate: 96.684784% 89 OverallAccuracyRate: 58.048393% 90 91 Date: Wed Jun 26 20:44:04 NZST 2019 92 Classifier: houghlinesP-refined-all 93 truePositive: 1725 94 falseNegative: 1436 95 falsePositve: 87 96 trueNegative: 1753 97 SheetMusicAccuracyRate: 54.571335% 98 NotSheetMusicAccuracyRate: 95.271736% 99 OverallAccuracyRate: 69.54609% 100 101 BOTH PRE THURSDAY MEETING 102 Date: Wed Jun 26 21:40:37 NZST 2019 103 Classifier: houghlinesP 104 truePositive: 3103 105 falseNegative: 58 106 falsePositve: 660 107 trueNegative: 1180 108 SheetMusicAccuracyRate: 98.16514% 109 NotSheetMusicAccuracyRate: 64.13044% 110 OverallAccuracyRate: 85.642876% 111 112 Date: Wed Jun 26 21:40:37 NZST 2019 113 Classifier: houghlinesP-refined 114 truePositive: 1725 115 falseNegative: 1436 116 falsePositve: 87 117 trueNegative: 1753 118 SheetMusicAccuracyRate: 54.571335% 119 NotSheetMusicAccuracyRate: 95.271736% 120 OverallAccuracyRate: 69.54609% 121 122 123 POST MEETING 124 125 126 Date: Thu Jun 27 11:56:02 NZST 2019 127 Classifier: houghlinesP-refined 128 truePositive: 0 129 falseNegative: 0 130 falsePositve: 0 131 trueNegative: 0 132 SheetMusicAccuracyRate: 0.0% 133 NotSheetMusicAccuracyRate: 0.0% 134 OverallAccuracyRate: 0.0% 135 136 Date: Thu Jun 27 12:04:40 NZST 2019 25 137 Classifier: houghlinesP-refined-test 26 truePositive: 527 falseNegative: 528 falsePositve: 029 trueNegative: 1030 SheetMusicAccuracyRate: 50.0%31 NotSheetMusicAccuracyRate: 100.0%32 OverallAccuracyRate: 75.0%138 truePositive: 7 139 falseNegative: 3 140 falsePositve: 5 141 trueNegative: 5 142 SheetMusicAccuracyRate: 70.0% 143 NotSheetMusicAccuracyRate: 50.0% 144 OverallAccuracyRate: 60.000004% 33 145 34 Date: Sun Jun 23 17:50:39 NZST 2019 35 Classifier: houghlinesP-refined-test 36 truePositive: 5 37 falseNegative: 5 38 falsePositve: 0 39 trueNegative: 10 40 SheetMusicAccuracyRate: 50.0% 41 NotSheetMusicAccuracyRate: 100.0% 42 OverallAccuracyRate: 75.0% 146 LINE GAP OF 10 43 147 148 Date: Thu Jun 27 12:24:59 NZST 2019 149 Classifier: houghlinesP-refined-all 150 truePositive: 2808 151 falseNegative: 353 152 falsePositve: 307 153 trueNegative: 1533 154 SheetMusicAccuracyRate: 88.83265% 155 NotSheetMusicAccuracyRate: 83.315216% 156 OverallAccuracyRate: 86.802635% 157 158 159 LINE GAP OF 4 160 161 162 Date: Thu Jun 27 14:35:24 NZST 2019 163 Classifier: houghlinesP-refined-all 164 truePositive: 2626 165 falseNegative: 535 166 falsePositve: 77 167 trueNegative: 1763 168 SheetMusicAccuracyRate: 83.074974% 169 NotSheetMusicAccuracyRate: 95.815216% 170 OverallAccuracyRate: 87.76244% 171 172 MINLINECOUNT=40 173 gradient = 0.02 174 Date: Thu Jun 27 15:10:14 NZST 2019 175 Classifier: houghlinesP-refined-all 176 truePositive: 2961 177 falseNegative: 200 178 falsePositve: 136 179 trueNegative: 1704 180 SheetMusicAccuracyRate: 93.67289% 181 NotSheetMusicAccuracyRate: 92.608696% 182 OverallAccuracyRate: 93.28135% 183 -
other-projects/is-sheet-music-encore/trunk/image-identification-terminal/runClassifer.sh
r33221 r33243 2 2 3 3 if [ $# != 4 ] ; then 4 echo "Usage: ./testClassifier.sh file_name classifier_type output_filename num_doc(-a = all -test =100)" 1>&24 echo "Usage: ./testClassifier.sh file_name classifier_type output_filename type(-a:all -test:100)" 1>&2 5 5 exit 1 6 6 fi … … 8 8 folder_name=$1 9 9 classifier_type=$2 10 output_filename=$3 11 num_doc=$4 10 output=$3 12 11 i=0 12 j=0 13 13 case "$4" in 14 14 -all) … … 16 16 for file_name in $folder_name/*/*.png; do 17 17 echo $file_name 18 echo $output _filename18 echo $output 19 19 echo $i 20 20 echo "" 21 java -cp /Scratch/cpb16/opencv-3.4.2/build/bin/opencv-342.jar:. -Djava.library.path=/Scratch/cpb16/opencv-3.4.2/build/lib/ javaImageClassifier $file_name $classifier_type $output _filename21 java -cp /Scratch/cpb16/opencv-3.4.2/build/bin/opencv-342.jar:. -Djava.library.path=/Scratch/cpb16/opencv-3.4.2/build/lib/ javaImageClassifier $file_name $classifier_type $output 22 22 i=$[$i+1] 23 23 done 24 ;; 24 ;; 25 25 26 -test) 26 #Runs javaImageClassifier on 100 images 27 for file_name in $folder_name/*/*.png; do 28 if [ $i -lt 200 ] ; then 29 echo $file_name 30 echo $output_filename 31 echo $i 32 echo "" 33 java -cp /Scratch/cpb16/opencv-3.4.2/build/bin/opencv-342.jar:. -Djava.library.path=/Scratch/cpb16/opencv-3.4.2/build/lib/ javaImageClassifier $file_name $classifier_type $output_filename 34 i=$[$i+1] 35 else 36 exit 0 37 fi 27 #Runs javaImageClassifier on 100 images of each 28 for file_name in $folder_name/SheetMusic/*.png; do 29 if [ $i -lt 10 ] ; then 30 echo $file_name 31 echo $output 32 echo $i 33 echo "" 34 java -cp /Scratch/cpb16/opencv-3.4.2/build/bin/opencv-342.jar:. -Djava.library.path=/Scratch/cpb16/opencv-3.4.2/build/lib/ javaImageClassifier $file_name $classifier_type $output 35 i=$[$i+1] 36 fi 38 37 done 39 ;; 40 -small) 41 #Runs javaImageClassifier on 100 images 42 for file_name in $folder_name/*/*.png; do 43 if [ $i -lt 50 ] ; then 44 echo $file_name 45 echo $output_filename 46 echo $i 47 echo "" 48 java -cp /Scratch/cpb16/opencv-3.4.2/build/bin/opencv-342.jar:. -Djava.library.path=/Scratch/cpb16/opencv-3.4.2/build/lib/ javaImageClassifier $file_name $classifier_type $output_filename 49 i=$[$i+1] 50 else 51 exit 0 52 fi 38 for file_name in $folder_name/NotSheetMusic/*.png; do 39 if [ $j -lt 10 ] ; then 40 echo $file_name 41 echo $output 42 echo $j 43 echo "" 44 java -cp /Scratch/cpb16/opencv-3.4.2/build/bin/opencv-342.jar:. -Djava.library.path=/Scratch/cpb16/opencv-3.4.2/build/lib/ javaImageClassifier $file_name $classifier_type $output 45 j=$[$j+1] 46 fi 53 47 done 54 ;; 48 ;; 49 55 50 esac
Note:
See TracChangeset
for help on using the changeset viewer.