/* * Copyright 2011 Robert Theis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package edu.sfsu.cs.orange.ocr; import java.util.List; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Point; import android.graphics.Rect; /** * Encapsulates the result of OCR. */ public class OcrResult { private Bitmap bitmap; private String text; private int[] wordConfidences; private int meanConfidence; private List<Rect> regionBoundingBoxes; private List<Rect> textlineBoundingBoxes; private List<Rect> wordBoundingBoxes; private List<Rect> stripBoundingBoxes; private List<Rect> characterBoundingBoxes; private long timestamp; private long recognitionTimeRequired; private Paint paint; public OcrResult(Bitmap bitmap, String text, int[] wordConfidences, int meanConfidence, List<Rect> regionBoundingBoxes, List<Rect> textlineBoundingBoxes, List<Rect> wordBoundingBoxes, List<Rect> stripBoundingBoxes, List<Rect> characterBoundingBoxes, long recognitionTimeRequired) { this.bitmap = bitmap; this.text = text; this.wordConfidences = wordConfidences; this.meanConfidence = meanConfidence; this.regionBoundingBoxes = regionBoundingBoxes; this.textlineBoundingBoxes = textlineBoundingBoxes; this.wordBoundingBoxes = wordBoundingBoxes; this.stripBoundingBoxes = stripBoundingBoxes; this.characterBoundingBoxes = characterBoundingBoxes; this.recognitionTimeRequired = recognitionTimeRequired; this.timestamp = System.currentTimeMillis(); this.paint = new Paint(); } public OcrResult() { timestamp = System.currentTimeMillis(); this.paint = new Paint(); } public Bitmap getBitmap() { return getAnnotatedBitmap(); } private Bitmap getAnnotatedBitmap() { Canvas canvas = new Canvas(bitmap); // Draw bounding boxes around each word for (int i = 0; i < wordBoundingBoxes.size(); i++) { paint.setAlpha(0xFF); paint.setColor(0xFF00CCFF); paint.setStyle(Style.STROKE); paint.setStrokeWidth(2); Rect r = wordBoundingBoxes.get(i); canvas.drawRect(r, paint); } // // Draw bounding boxes around each character // for (int i = 0; i < characterBoundingBoxes.size(); i++) { // paint.setAlpha(0xA0); // paint.setColor(0xFF00FF00); // paint.setStyle(Style.STROKE); // paint.setStrokeWidth(3); // Rect r = characterBoundingBoxes.get(i); // canvas.drawRect(r, paint); // } return bitmap; } public String getText() { return text; } public int[] getWordConfidences() { return wordConfidences; } public int getMeanConfidence() { return meanConfidence; } public long getRecognitionTimeRequired() { return recognitionTimeRequired; } public Point getBitmapDimensions() { return new Point(bitmap.getWidth(), bitmap.getHeight()); } public List<Rect> getRegionBoundingBoxes() { return regionBoundingBoxes; } public List<Rect> getTextlineBoundingBoxes() { return textlineBoundingBoxes; } public List<Rect> getWordBoundingBoxes() { return wordBoundingBoxes; } public List<Rect> getStripBoundingBoxes() { return stripBoundingBoxes; } public List<Rect> getCharacterBoundingBoxes() { return characterBoundingBoxes; } public long getTimestamp() { return timestamp; } public void setBitmap(Bitmap bitmap) { this.bitmap = bitmap; } public void setText(String text) { this.text = text; } public void setWordConfidences(int[] wordConfidences) { this.wordConfidences = wordConfidences; } public void setMeanConfidence(int meanConfidence) { this.meanConfidence = meanConfidence; } public void setRecognitionTimeRequired(long recognitionTimeRequired) { this.recognitionTimeRequired = recognitionTimeRequired; } public void setRegionBoundingBoxes(List<Rect> regionBoundingBoxes) { this.regionBoundingBoxes = regionBoundingBoxes; } public void setTextlineBoundingBoxes(List<Rect> textlineBoundingBoxes) { this.textlineBoundingBoxes = textlineBoundingBoxes; } public void setWordBoundingBoxes(List<Rect> wordBoundingBoxes) { this.wordBoundingBoxes = wordBoundingBoxes; } public void setStripBoundingBoxes(List<Rect> stripBoundingBoxes) { this.stripBoundingBoxes = stripBoundingBoxes; } public void setCharacterBoundingBoxes(List<Rect> characterBoundingBoxes) { this.characterBoundingBoxes = characterBoundingBoxes; } @Override public String toString() { return text + " " + meanConfidence + " " + recognitionTimeRequired + " " + timestamp; } }