Ignore:
Timestamp:
2019-06-27T15:19:39+12:00 (5 years ago)
Author:
cpb16
Message:

Had break through with the refined houghlinesP algorithm overall accurarcy rate of 93%

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  
    1212import javax.imageio.ImageIO;
    1313import java.util.logging.Logger;
     14import java.util.ArrayList;
    1415
    1516//REFERENCES:
     
    2829public class javaImageClassifier{
    2930    //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
    3238
    3339    public static void main(String[] args) {   
     
    3743            }
    3844            else {
     45                ArrayList result_refined = null;
    3946                Boolean result = null;
    4047                String imageFilename = args[0];
    4148                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);         
    4354                //Execute classifierType defined from arguement
     55               
     56                //Split output by tab for processing in next java program
     57                //imageFilename = 1, result = 3, classifierType = 4
    4458                switch(classifierType){
    4559                case "houghlinesP":
    4660                    result = setup_HoughLinesP(imageFilename); //true or false
     61                    bw.write("Filename:" + '\t' + imageFilename + '\t' + "Classified as:" + '\t' + result + '\t' + classifierType + '\n');
    4762                    break;
    4863                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');
    5066                    break;
    5167                default:
     
    5369                    break;
    5470                }           
    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
    6272                bw.close();             
    6373            }
     
    8191        Mat edgesDetected = new Mat();
    8292        Mat edgesDetectedRGB = new Mat();
     93        Mat edgesExtra = new Mat();
    8394        Mat edgesDetectedRGBProb;
    8495        // Load an image
     
    108119 }
    109120 
    110      private static Boolean setup_HoughLinesP_refined(String filename){
     121     private static ArrayList setup_HoughLinesP_refined(String filename){
    111122    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    112123    Boolean isSheetMusic = null;
     124    ArrayList returnArray = new ArrayList();
    113125    try{
     126       
    114127        //Variables
     128        int horizontalLineCount =0;
    115129        Mat edgesDetected = new Mat();
    116130        Mat edgesDetectedRGB = new Mat();
     131        Mat edgesExtra = new Mat();
    117132        Mat edgesDetectedRGBProb;
    118133        // Load an image
    119134        Mat original = Imgcodecs.imread(filename, Imgcodecs.IMREAD_GRAYSCALE);
    120135        // 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       
    122141        //Copy edges to the images that will display the results in BGR
    123142        Imgproc.cvtColor(edgesDetected, edgesDetectedRGB, Imgproc.COLOR_GRAY2BGR);
    124143        // Probabilistic Line Transform
    125144        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 detection
    128             Imgproc.HoughLinesP(edgesDetected, linesP, 1, Math.PI / 180, 10, minLineLength, 5);// remote testing
     145        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
    129148        // Draw the lines
    130149       
     
    139158            //System.out.println(l[2]);
    140159            //System.out.println(l[3]);
    141             if(m<0.1) {
     160            if(m<SLOPEGRADIENT) {
    142161                //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++;
    144164            }
    145165        }
     
    148168        BufferedImage toBeClassifiedImg = toBufferedImage(edgesDetectedRGB);
    149169        //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);
    152173           
    153174    }
     
    155176            System.err.println(e);
    156177        }
    157         return isSheetMusic;
     178        return returnArray;
    158179 }
    159180 
     
    193214        return false;
    194215    }
     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   
    195226        private static  BufferedImage toBufferedImage(Mat mat){
    196227        //MOSTLY COPY PASTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • other-projects/is-sheet-music-encore/trunk/image-identification-terminal/results.txt

    r33221 r33243  
    2222
    2323
    24 Date: Sun Jun 23 17:48:16 NZST 2019
     24BEST SO FAR
     25Date: Tue Jun 25 16:02:11 NZST 2019
     26Classifier: houghlinesP-refined
     27truePositive: 80
     28falseNegative: 20
     29falsePositve: 11
     30trueNegative: 89
     31SheetMusicAccuracyRate: 80.0%
     32NotSheetMusicAccuracyRate: 89.0%
     33OverallAccuracyRate: 84.5%
     34
     35Date: Tue Jun 25 16:21:55 NZST 2019
     36Classifier: houghlinesP
     37truePositive: 3063
     38falseNegative: 98
     39falsePositve: 596
     40trueNegative: 1244
     41SheetMusicAccuracyRate: 96.89972%
     42NotSheetMusicAccuracyRate: 67.608696%
     43OverallAccuracyRate: 86.12277%
     44
     45Date: Tue Jun 25 20:06:21 NZST 2019
     46Classifier: houghlinesP-refined-all
     47truePositive: 1723
     48falseNegative: 1438
     49falsePositve: 86
     50trueNegative: 1754
     51SheetMusicAccuracyRate: 54.508064%
     52NotSheetMusicAccuracyRate: 95.32609%
     53OverallAccuracyRate: 69.52609%
     54
     55Date: Tue Jun 25 20:13:22 NZST 2019
     56Classifier: houghlinesP-refined
     57truePositive: 80
     58falseNegative: 20
     59falsePositve: 11
     60trueNegative: 89
     61SheetMusicAccuracyRate: 80.0%
     62NotSheetMusicAccuracyRate: 89.0%
     63OverallAccuracyRate: 84.5%
     64
     65Date: Tue Jun 25 22:40:22 NZST 2019
     66Classifier: houghlinesP-refined-all-canny
     67truePositive: 1124
     68falseNegative: 2037
     69falsePositve: 61
     70trueNegative: 1779
     71SheetMusicAccuracyRate: 35.558365%
     72NotSheetMusicAccuracyRate: 96.684784%
     73OverallAccuracyRate: 58.048393%
     74
     75MAX 65
     76MIN 10
     77ALL MU
     78RESULT:
     79
     80
     81Date: Wed Jun 26 20:08:09 NZST 2019
     82Classifier: houghlinesP-refined-all-canny
     83truePositive: 1124
     84falseNegative: 2037
     85falsePositve: 61
     86trueNegative: 1779
     87SheetMusicAccuracyRate: 35.558365%
     88NotSheetMusicAccuracyRate: 96.684784%
     89OverallAccuracyRate: 58.048393%
     90
     91Date: Wed Jun 26 20:44:04 NZST 2019
     92Classifier: houghlinesP-refined-all
     93truePositive: 1725
     94falseNegative: 1436
     95falsePositve: 87
     96trueNegative: 1753
     97SheetMusicAccuracyRate: 54.571335%
     98NotSheetMusicAccuracyRate: 95.271736%
     99OverallAccuracyRate: 69.54609%
     100
     101BOTH PRE THURSDAY MEETING
     102Date: Wed Jun 26 21:40:37 NZST 2019
     103Classifier: houghlinesP
     104truePositive: 3103
     105falseNegative: 58
     106falsePositve: 660
     107trueNegative: 1180
     108SheetMusicAccuracyRate: 98.16514%
     109NotSheetMusicAccuracyRate: 64.13044%
     110OverallAccuracyRate: 85.642876%
     111
     112Date: Wed Jun 26 21:40:37 NZST 2019
     113Classifier: houghlinesP-refined
     114truePositive: 1725
     115falseNegative: 1436
     116falsePositve: 87
     117trueNegative: 1753
     118SheetMusicAccuracyRate: 54.571335%
     119NotSheetMusicAccuracyRate: 95.271736%
     120OverallAccuracyRate: 69.54609%
     121
     122
     123POST MEETING
     124
     125
     126Date: Thu Jun 27 11:56:02 NZST 2019
     127Classifier: houghlinesP-refined
     128truePositive: 0
     129falseNegative: 0
     130falsePositve: 0
     131trueNegative: 0
     132SheetMusicAccuracyRate: 0.0%
     133NotSheetMusicAccuracyRate: 0.0%
     134OverallAccuracyRate: 0.0%
     135
     136Date: Thu Jun 27 12:04:40 NZST 2019
    25137Classifier: houghlinesP-refined-test
    26 truePositive: 5
    27 falseNegative: 5
    28 falsePositve: 0
    29 trueNegative: 10
    30 SheetMusicAccuracyRate: 50.0%
    31 NotSheetMusicAccuracyRate: 100.0%
    32 OverallAccuracyRate: 75.0%
     138truePositive: 7
     139falseNegative: 3
     140falsePositve: 5
     141trueNegative: 5
     142SheetMusicAccuracyRate: 70.0%
     143NotSheetMusicAccuracyRate: 50.0%
     144OverallAccuracyRate: 60.000004%
    33145
    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%
     146LINE GAP OF 10
    43147
     148Date: Thu Jun 27 12:24:59 NZST 2019
     149Classifier: houghlinesP-refined-all
     150truePositive: 2808
     151falseNegative: 353
     152falsePositve: 307
     153trueNegative: 1533
     154SheetMusicAccuracyRate: 88.83265%
     155NotSheetMusicAccuracyRate: 83.315216%
     156OverallAccuracyRate: 86.802635%
     157
     158
     159LINE GAP OF 4
     160
     161
     162Date: Thu Jun 27 14:35:24 NZST 2019
     163Classifier: houghlinesP-refined-all
     164truePositive: 2626
     165falseNegative: 535
     166falsePositve: 77
     167trueNegative: 1763
     168SheetMusicAccuracyRate: 83.074974%
     169NotSheetMusicAccuracyRate: 95.815216%
     170OverallAccuracyRate: 87.76244%
     171
     172MINLINECOUNT=40
     173gradient = 0.02
     174Date: Thu Jun 27 15:10:14 NZST 2019
     175Classifier: houghlinesP-refined-all
     176truePositive: 2961
     177falseNegative: 200
     178falsePositve: 136
     179trueNegative: 1704
     180SheetMusicAccuracyRate: 93.67289%
     181NotSheetMusicAccuracyRate: 92.608696%
     182OverallAccuracyRate: 93.28135%
     183
  • other-projects/is-sheet-music-encore/trunk/image-identification-terminal/runClassifer.sh

    r33221 r33243  
    22
    33if [ $# != 4 ] ; then
    4   echo "Usage: ./testClassifier.sh file_name classifier_type output_filename num_doc(-a = all -test = 100)" 1>&2
     4  echo "Usage: ./testClassifier.sh file_name classifier_type output_filename type(-a:all -test:100)" 1>&2
    55  exit 1
    66fi
     
    88folder_name=$1
    99classifier_type=$2
    10 output_filename=$3
    11 num_doc=$4
     10output=$3
    1211i=0
     12j=0
    1313case "$4" in
    1414    -all)
     
    1616        for file_name in $folder_name/*/*.png; do
    1717            echo $file_name
    18             echo $output_filename
     18            echo $output
    1919            echo $i
    2020            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_filename
     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
    2222            i=$[$i+1]
    2323        done
    24         ;;
     24    ;;
     25       
    2526    -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
    3837        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
    5347        done
    54         ;;
     48    ;;
     49           
    5550esac       
Note: See TracChangeset for help on using the changeset viewer.