• Android调用OCR识别图像中的文字


    // 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, 0, 0, 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, 0, 0, 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, height, 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, 0, 0, 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, null, ex);
              }
          }
          private static final Logger LOG = Logger.getLogger(CharacterExtractor.class.getName());
      }
  • 相关阅读:
    Nginx 相关配置文件修改
    LNMP平台构建实验 +bbs社区搭建
    CSGO项目
    创世战车项目
    IGXE搬砖项目
    11_samba服务器的搭建
    26_django内置static标签
    06_git添加远程仓库并向远程仓库中推送代码
    23_添加apps到项目的搜索路径
    23_django日志器的配置和其使用方法
  • 原文地址:https://www.cnblogs.com/lr393993507/p/5543080.html
Copyright © 2020-2023  润新知