Android调用OCR识别图像中的文字
发布时间:2020-12-14 23:24:25 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 // CharacterExtractor.java // Copyright (c) 2010 William Whitney // All rights reserved. // This software is released under the BSD license.
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 // CharacterExtractor.java // Copyright (c) 2010 William Whitney // All rights reserved. // This software is released under the BSD license. // Please see the accompanying LICENSE.txt for details. package srtp.ys.ocrtest; import java.util.logging.Level; import java.util.logging.Logger; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.graphics.Matrix; import android.graphics.Bitmap.Config; import android.graphics.drawable.BitmapDrawable; import android.util.Log; import android.widget.ImageView; import android.app.*; import android.app.Activity; import android.os.Bundle; import android.view.View; /** * Saves all the characters in an image to an output directory individually. * @author William Whitney */ public class CharacterExtractor extends DocumentScannerListenerAdaptor { private DocumentScanner documentScanner = new DocumentScanner(); private int std_width; private int std_height; //////////////////////////////////////////////////////////////////// public void slice( int std_width,int std_height) { try { this.std_width = std_width; this.std_height = std_height; Bitmap img = BitmapFactory.decodeFile("/sdcard/test.bmp"); PixelImage pixelImage = new PixelImage(img); pixelImage.toGrayScale(true); //OK pixelImage.filter(); // OK documentScanner.scan(pixelImage,this,pixelImage.width,pixelImage.height); } catch (Exception ex) { Logger.getLogger(CharacterExtractor.class.getName()).log(Level.SEVERE,null,ex); } } //////////////////////////////////////////////////////////////////// public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); Matrix matrix = new Matrix(); float scaleWidth ; float scaleHeight; //float scaleWidth = ((float) w / width); if(height>width) { scaleWidth = ((float) h / height); scaleHeight = ((float) h / height); } else { scaleWidth = ((float) w / width); scaleHeight = ((float) w / width); } matrix.postScale(scaleWidth,scaleHeight); Bitmap newBmp = Bitmap.createBitmap(bitmap,width,height,matrix,true); //加上30*30白色背景 Bitmap mbmpTest = Bitmap.createBitmap(30,30,Config.RGB_565); Canvas canvasTemp = new Canvas(mbmpTest);//给Canvas指定一个bitmap,之后就不是画到屏幕而是画到这个bitmap上 canvasTemp.drawColor(Color.WHITE); Paint mPaint = new Paint(); mPaint.setColor(Color.WHITE); canvasTemp.drawBitmap(newBmp,(((float)(30-newBmp.getWidth()))/2),(((float)(30-newBmp.getHeight()))/2),mPaint);//画到正中间 return mbmpTest; } public static Bitmap rgbtoGrayscale(Bitmap bmpOriginal) { int width,height; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); Bitmap bmpGrayscale = Bitmap.createBitmap(width,Bitmap.Config.RGB_565); Canvas c = new Canvas(bmpGrayscale); Paint paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.setSaturation(0); ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); paint.setColorFilter(f); c.drawBitmap(bmpOriginal,paint); return bmpGrayscale; } public void processChar(int x1,int y1,int x2,int y2,int rowY1,int rowY2) { try { int areaW = x2 - x1; int areaH = y2 - y1; //Extract the character Bitmap fatherimage = BitmapFactory.decodeFile("/sdcard/test.bmp"); // Drawable characterImage=new BitmapDrawable(BitmapFactory.decodeFile("/sdcard/test.jpg")); Bitmap bitmapcharacterImage = Bitmap.createBitmap(fatherimage,x1,y1,areaW,areaH); Log.v("w","w:"+bitmapcharacterImage.getWidth()+"H:"+bitmapcharacterImage.getHeight()); Bitmap characterImage=zoomBitmap(bitmapcharacterImage,std_width,std_height);//缩放并添上背景 // 显示位图 BitmapDrawable bmpDraw=new BitmapDrawable(rgbtoGrayscale(characterImage)); mainactivity.iv2.setImageDrawable(bmpDraw); // int[] testImgPixels = ImageUtils.getPixels(rgbtoGrayscale(characterImage),characterImage.getWidth( ),characterImage.getHeight( )); // int[][] binerymerticx=ImageUtils.getSymbolMatrix(testImgPixels,2); int[] binerymerticxforcompare = ImageUtils.getbinarymatrix(rgbtoGrayscale(characterImage)); int countblackpoint=0; for(int ii=0;ii<30;ii++) for(int jj=0;jj<30;jj++) if(binerymerticxforcompare[ii*30+jj]==1) countblackpoint++; if(countblackpoint<10) { System.out.println(); } else { //此处进行比较并输出结果: int i; int j; int maxequal=0; int maxindex=0; int count=0; for(i=0;i<26;i++) { count=0; for(j=0;j<900;j++) { if(model.CharacterModel1[j]==binerymerticxforcompare[j]) count++; } // System.out.print(count); // System.out.print(" "); if(count>maxequal) { maxequal=count; maxindex=i; } } int i2; int j2; int maxequal2=0; int maxindex2=0; int count2=0; for(i2=0;i2<26;i2++) { count2=0; for(j2=0;j2<900;j2++) { if(model2.CharacterModel2[i2][j2]==binerymerticxforcompare[j2]) count2++; } // System.out.print(count); // System.out.print(" "); if(count2>maxequal2) { maxequal2=count2; maxindex2=i2; } } char result; if(maxequal>maxequal2) result=(char)('A'+maxindex); else result=(char)('a'+maxindex2); mainactivity.res+=result; // System.out.print(result); // System.out.println(); } } catch (Exception ex) { Logger.getLogger(CharacterExtractor.class.getName()).log(Level.SEVERE,ex); } } private static final Logger LOG = Logger.getLogger(CharacterExtractor.class.getName()); } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |