调用OCR识别图像中的文字


CharacterExtractor.java
002  
006 package srtp.ys.ocrtest;
007 import java.util.logging.Level;
008 import java.util.logging.Logger;
009 import android.graphics.Bitmap;
010 import android.graphics.BitmapFactory;
011 import android.graphics.Canvas;
012 import android.graphics.Color;
013 import android.graphics.ColorMatrix;
014 import android.graphics.ColorMatrixColorFilter;
015 import android.graphics.Paint;
016 import android.graphics.Matrix;
017 import android.graphics.Bitmap.Config;
018 import android.graphics.drawable.BitmapDrawable;
019 import android.util.Log;
020 import android.widget.ImageView;
021 import android.app.*;
022 import android.app.Activity;
023 import android.os.Bundle;
024 import android.view.View;
025 /**
026 * Saves all the characters in an image to an output directory individually.
027 * @author William Whitney
028 */
029 public class CharacterExtractor extends DocumentScannerListenerAdaptor
030 {
031     private DocumentScanner documentScanner = new DocumentScanner();
032     private int std_width;
033     private int std_height;
034
035     public void slice(  int std_width, int std_height)
036     {
037         try
038         {
039             this.std_width = std_width;
040             this.std_height = std_height;
041             Bitmap img = BitmapFactory.decodeFile("/sdcard/test.bmp");
042             PixelImage pixelImage = new PixelImage(img);
043             pixelImage.toGrayScale(true); //OK
044             pixelImage.filter(); // OK
045             documentScanner.scan(pixelImage, this00, pixelImage.width, pixelImage.height);
046         }
047         catch (Exception ex)
048         {
049             Logger.getLogger(CharacterExtractor.class.getName()).log(Level.SEVERE,null, ex);
050         }
051     }
052
053     public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
054         int width = bitmap.getWidth();
055         int height = bitmap.getHeight();
056         Matrix matrix = new Matrix();
057         float scaleWidth ;
058         float scaleHeight;
059         //float scaleWidth = ((float) w / width);
060       if(height>width)  {
061          scaleWidth = ((float) h / height);
062          scaleHeight = ((float) h / height);
063         }
064       else
065       {
066                 scaleWidth = ((float) w / width);
067             scaleHeight = ((float) w / width);
068       }
069         matrix.postScale(scaleWidth, scaleHeight);
070         Bitmap newBmp = Bitmap.createBitmap(bitmap, 00, width, height,
071                 matrix, true);
072         //加上30*30白色背景
073         Bitmap mbmpTest = Bitmap.createBitmap(30,30, Config.RGB_565);
074         Canvas canvasTemp = new Canvas(mbmpTest);//给Canvas指定一个bitmap,之后就不是画到屏幕而是画到这个bitmap上
075         canvasTemp.drawColor(Color.WHITE);
076         Paint mPaint = new Paint();
077         mPaint.setColor(Color.WHITE);
078         canvasTemp.drawBitmap(newBmp,(((float)(30-newBmp.getWidth()))/2),(((float)(30-newBmp.getHeight()))/2),mPaint);//画到正中间
079        return mbmpTest;
080     }
081     public static Bitmap rgbtoGrayscale(Bitmap bmpOriginal) {
082                     int width, height;
083                     height = bmpOriginal.getHeight();
084                     width = bmpOriginal.getWidth();
085                    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
086                    Canvas c = new Canvas(bmpGrayscale);
087                    Paint paint = new Paint();
088                     ColorMatrix cm = new ColorMatrix();
089                     cm.setSaturation(0);
090                    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
091                   paint.setColorFilter(f);
092                     c.drawBitmap(bmpOriginal, 00, paint);
093                     return bmpGrayscale;
094                 }
095     public void processChar(int x1, int y1, int x2, int y2, int rowY1, introwY2)
096     {
097         try
098         {
099             int areaW = x2 - x1;
100             int areaH = y2 - y1;
101             //Extract the character
102             Bitmap fatherimage =  BitmapFactory.decodeFile("/sdcard/test.bmp");
103            // Drawable characterImage=new BitmapDrawable(BitmapFactory.decodeFile("/sdcard/test.jpg"));
104             Bitmap bitmapcharacterImage = Bitmap.createBitmap(fatherimage,x1, y1, areaW, areaH);
105             Log.v("w","w:"+bitmapcharacterImage.getWidth()+"H:"+bitmapcharacterImage.getHeight());
106            Bitmap characterImage=zoomBitmap(bitmapcharacterImage,std_width,std_height);//缩放并添上背景
107            // 显示位图
108            BitmapDrawable bmpDraw=newBitmapDrawable(rgbtoGrayscale(characterImage));
109           mainactivity.iv2.setImageDrawable(bmpDraw);
110            // int[] testImgPixels = ImageUtils.getPixels(rgbtoGrayscale(characterImage), characterImage.getWidth( ),        characterImage.getHeight( ));
111            // int[][] binerymerticx=ImageUtils.getSymbolMatrix(testImgPixels, 2);
112           int[] binerymerticxforcompare = ImageUtils.getbinarymatrix(rgbtoGrayscale(characterImage));
113            int countblackpoint=0;
114            for(int ii=0;ii<30;ii++)
115                    for(int jj=0;jj<30;jj++)
116                            if(binerymerticxforcompare[ii*30+jj]==1)
117                                    countblackpoint++;
118           if(countblackpoint<10)
119           {
120                   System.out.println();
121           }
122                   else
123           {
124             //此处进行比较并输出结果:
125             int i;
126             int j;
127             int maxequal=0;
128             int maxindex=0;
129             int count=0;
130             for(i=0;i<26;i++)
131             {
132                      count=0;
133                     for(j=0;j<900;j++)
134                     {
135                             if(model.CharacterModel1[j]==binerymerticxforcompare[j])
136                         count++;
137                     }
138             //          System.out.print(count);
139             //          System.out.print(" ");
140                     if(count>maxequal)
141                     {
142                             maxequal=count;
143                             maxindex=i;
144                     }
145             }
146             int i2;
147             int j2;
148             int maxequal2=0;
149             int maxindex2=0;
150             int count2=0;
151             for(i2=0;i2<26;i2++)
152             {
153                      count2=0;
154                     for(j2=0;j2<900;j2++)
155                     {
156                             if(model2.CharacterModel2[i2][j2]==binerymerticxforcompare[j2])
157                         count2++;
158                     }
159             //          System.out.print(count);
160             //          System.out.print(" ");
161                     if(count2>maxequal2)
162                     {
163                             maxequal2=count2;
164                             maxindex2=i2;
165                     }
166             }
167                     char result;
168                     if(maxequal>maxequal2)
169                     result=(char)('A'+maxindex);
170                   else
171                           result=(char)('a'+maxindex2);
172                         mainactivity.res+=result;
173                         //  System.out.print(result);
174                         //   System.out.println();
175          }
176         }
177         catch (Exception ex)
178         {
179             Logger.getLogger(CharacterExtractor.class.getName()).log(Level.SEVERE,null, ex);
180         }
181     }
182     private static final Logger LOG = Logger.getLogger(CharacterExtractor.class.getName());
183 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值