// 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());
}

Android调用OCR识别图像中的文字的更多相关文章

  1. Zybo智能小车识别图像中的文字

    智能小车识别图像中的文字 [TOC] 运行平台 这次的内容是基于Xilinx公司的Zybo开发板以及其配套的Zrobot套件开发 Zybo上面的sd卡搭载了Ubuntu12.04LTS的linux版本 ...

  2. 利用百度文字识别API识别图像中的文字

      本文将会介绍如何使用百度AI开放平台中的文字识别服务来识别图片中的文字.百度AI开放平台的访问网址为:http://ai.baidu.com/ ,为了能够使用该平台提供的AI服务,你需要事先注册一 ...

  3. 使用 Python 识别并提取图像中的文字

    1. 介绍 介绍使用 python 进行图像的文字识别,将图像中的文字提取出来,可以帮助我们完成很多有趣的事情. 2. 必备工具 tesseract-ocr 下载地址: https://github. ...

  4. 利用Hough变换识别图像中的直线

    引入 近期看到2015年数学建模A题太阳影子定位中的第四问,需要根据附件中视频里的直杆的太阳影子的变化确定拍摄地点.其实确定拍摄地点这个问题并不是十分困难,因为有前三问的铺垫,我们已经得出了太阳影子长 ...

  5. 【转】OCR识别引擎tesseract使用方法——安装leptonica和libtiff

    原文来自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c4224 ...

  6. 使用Python进行OCR -- 识别图片中的文字

    工具 Tesseract pytesseract tesserocr 朋友需要一个工具,将图片中的文字提取出来.我帮他在网上找了一些OCR的应用,都不好用.所以准备自己研究,写一个Web APP供他使 ...

  7. 如何大批量的识别图片上的文字,批量图片文字识别OCR软件系统

    软件不需要安装,直接双击打开就可以用,废话不多说直接上图好了,方便说明问题 批量图片OCR(批量名片识别.批量照片识别等)识别,然后就下来研究了一下,下面是成果 使用步骤:打开单个图片识别,导入文件夹 ...

  8. 【Win10 应用开发】OCR识别

    OCR,即Optical Character Recognition,光学字符识别.以下介绍来自搜索: OCR(Optical Character Recognition,光学字符识别)是指电子设备( ...

  9. AI时代的OCR识别技术浅析

    人工智能这个词可谓是耳熟能详,近几年人工智能热潮再次席卷而来,引起轰动的要数google的AlphaGo,相继打败了围棋界的韩国选手李世石以及世界冠军柯洁,见证了人工智能发展的里程碑式的变革,人工智能 ...

随机推荐

  1. [BZOJ2878][NOI2012]迷失游乐园(环套树DP+概率)

    推荐讲解:https://www.cnblogs.com/Tunix/p/4561493.html 首先考虑树的情况,就是经典的树上概率DP.先DP出down表示从这个点向儿子走能走的期望长度,再DP ...

  2. extjs grid数据改变后刷新的实现

    做了一个编辑extjs grid记录的窗体,但更改数据后,怎么重新刷新grid让数据显示呢? 做了半天的尝试,其实到最后只需一句话,faint:-) this.store.reload(); 不用加任 ...

  3. iOS可持续化集成: Jenkins + bundler + cocoapods + shenzhen + fastlane + pgyer

    工具介绍 1. bundler bundler用于管理ruby gem的工具,我们用来管理cocoapods以及fastlane的版本.直接sudo gem install bundler就可以.然后 ...

  4. Inrush limiter also provides short-circuit protection

    For containing large amounts of bulk capacitance, controlling inrush currents poses problems. The si ...

  5. MySQL在windows系统的安装

    原文:https://blog.csdn.net/wokaowokaowokao12345/article/details/76736152 MySQL在windows系统的安装 原创 2017年08 ...

  6. arcgis Listview

    private ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCrea ...

  7. 百度地图js小结

    1.获取javascript API 服务方法,首先申请密钥(ak),才可成功载入APIJS文件. 用法例如以下: <script type="text/javascript" ...

  8. android中共享全局数据的方法

    转自:http://blog.csdn.net/ameyume/article/details/6100756 我们在平时的开发中,有时候可能会需要一些全局数据,来让应用中的所有Activity和Vi ...

  9. Oracle数据库常用函数使用--持续更新中

    NVL函数.NVL( string1, replace_with).如果string1为NULL,则NVL函数返回replace_with的值,否则返回原来的值. INSTR函数.用于查找指定字符串是 ...

  10. 第一章 在linux下python读串口 存MYSQL数据库(703N)

    import MySQLdb//定义引用数据库的驱动文件 import serial import time ser = serial.Serial('/dev/ttyATH0', 115200, t ...