Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 1117

How to recognize all the letters in a picture with opencv , KNN and java

$
0
0
i have to write a java program that recognizes all the letters in a picture taken with android camera .I tried KNN method but i could only recognize a single letter in the picture and i want to recognize all the letters .Can someonr help me. This is my code public void train (){ //Creating Training Data Mat trainData = new Mat(); Mat train_labels = new Mat(); for (int i =1; i <15; i++) { String path = Environment.getExternalStorageDirectory().toString() + "/Pictures/New Folder/" + i + ".png"; Mat img =Imgcodecs.imread(path); Log.i(TAG,"error debug: "+i+img.empty()); img.convertTo(img, CvType.CV_32FC1); // Convert to float Size dsize = new Size(25,25); Imgproc.resize(img, img, dsize); img.convertTo(img, CvType.CV_32FC1); Mat imgResized = img.reshape(1, 1); //make continuous trainData.push_back(imgResized); train_labels.push_back(new Mat (1,1,CvType.CV_32FC1,new Scalar(i)));// add 1 item } Mat response=new Mat(); Mat tmp; tmp= train_labels.reshape(1,1); //make continuous tmp.convertTo(response,CvType.CV_32FC1); // Convert to float*/ KNearest knn = KNearest.create(); knn.train(trainData,Ml.ROW_SAMPLE, train_labels); //For Storing training data String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() ; Bitmap bmpOut1 = Bitmap.createBitmap(trainData.cols(), trainData.rows(), Bitmap.Config.ARGB_8888); Bitmap bmpOut2 = Bitmap.createBitmap(response.cols(), response.rows(), Bitmap.Config.ARGB_8888); response.convertTo(response,CvType.CV_8UC1); trainData.convertTo(trainData,CvType.CV_8UC1); Utils.matToBitmap(trainData, bmpOut1); Utils.matToBitmap(response, bmpOut2); //File file = new File(path); // file.mkdirs(); File file = new File(path, "train.png"); File file2 = new File(path, "response.png"); OutputStream fout = null; OutputStream fout2 = null; try { fout = new FileOutputStream(file); fout2 = new FileOutputStream(file2); BufferedOutputStream bos = new BufferedOutputStream(fout); BufferedOutputStream bos2 = new BufferedOutputStream(fout2); bmpOut1.compress(Bitmap.CompressFormat.PNG, 100, bos); bos.flush(); bos.close(); bmpOut1.recycle(); bmpOut2.compress(Bitmap.CompressFormat.PNG, 100, bos2); bos2.flush(); bos2.close(); bmpOut2.recycle(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //For Accessing training data in BMP file BitmapFactory.Options o = new BitmapFactory.Options(); o.inScaled = false; Bitmap blankBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.train,o); int trainWidth = blankBitmap.getWidth(); int trainHeight = blankBitmap.getHeight(); Mat trainData2 = new Mat(); Utils.bitmapToMat(blankBitmap,trainData2); Bitmap blankBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.response,o); int resWidth = blankBitmap2.getWidth(); int resHeight = blankBitmap2.getHeight(); Log.i(TAG,"res width "+ resWidth +" res Height"+ resHeight); Mat response2 = new Mat(); Utils.bitmapToMat(blankBitmap2,response2); Log.i(TAG,"response2 width "+ response2.cols() +" res Height"+ response2.rows()); Mat response3 = new Mat(); Mat trainData3 = new Mat(); Imgproc.cvtColor(response2,response2,Imgproc.COLOR_BGRA2GRAY); // 1. change the number of channels Imgproc.cvtColor(trainData2,trainData2,Imgproc.COLOR_BGRA2GRAY); response2.convertTo(response3,CvType.CV_32FC1); trainData2.convertTo(trainData3,CvType.CV_32FC1); KNearest knn2 = KNearest.create(); knn2.train(trainData3,Ml.ROW_SAMPLE, response3); Mat img = Imgcodecs.imread("/storage/emulated/0/DCIM/Camera/IMG.png"); Log.i(TAG,"error1 img: "+img.empty()); Mat test = new Mat(); Imgproc.resize(img,test, new Size(25,25) ); test.convertTo(test, CvType.CV_32FC1); Mat results = new Mat(); Mat responses = new Mat(); Mat dists = new Mat(); float label = knn.findNearest(test.reshape(1,1), 1,results,responses,dists); Log.i(TAG,"valeur "+label); if (1.0<=label && label <=8.0) { reply.setText("N"); } else if (9.0<=label && label <=14.0){ reply.setText("E"); } else reply.setText("rien"); } }

Viewing all articles
Browse latest Browse all 1117

Latest Images

Trending Articles



Latest Images