/ocr/ocrservice/src/com/googlecode/eyesfree/opticflow/TextDetectionProcessor.java

http://eyes-free.googlecode.com/ · Java · 75 lines · 40 code · 12 blank · 23 comment · 2 complexity · c18c63526c753545310fbf7c9d85f28b MD5 · raw file

  1. /*
  2. * Copyright (C) 2011 Google Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.googlecode.eyesfree.opticflow;
  17. import com.googlecode.eyesfree.env.Size;
  18. import com.googlecode.eyesfree.textdetect.HydrogenTextDetector;
  19. import com.googlecode.eyesfree.textdetect.HydrogenTextDetector.Parameters;
  20. import com.googlecode.leptonica.android.Pix;
  21. import com.googlecode.leptonica.android.Pixa;
  22. /**
  23. * Frame processor that runs text detection.
  24. *
  25. * @author alanv@google.com (Alan Viverette)
  26. */
  27. public class TextDetectionProcessor extends FrameProcessor {
  28. private HydrogenTextDetector mHydrogen;
  29. public TextDetectionProcessor() {
  30. mHydrogen = new HydrogenTextDetector();
  31. // We're relaxing the default parameters a little here...
  32. Parameters params = mHydrogen.getParameters();
  33. params.edge_thresh = 32;
  34. params.edge_avg_thresh = 1;
  35. params.cluster_min_blobs = 3;
  36. params.skew_enabled = true;
  37. mHydrogen.setParameters(params);
  38. }
  39. @Override
  40. protected synchronized void onInit(final Size size) {
  41. int width = size.width;
  42. int height = size.height;
  43. // TODO(alanv): Implement an image buffer throughout Hydrogen.
  44. mHydrogen.setSize(width, height);
  45. }
  46. @Override
  47. protected void onProcessFrame(TimestampedFrame frame) {
  48. if (frame.isBlurred() || frame.takenWhileFocusing()) {
  49. return;
  50. }
  51. Pix pixs = frame.getPixData();
  52. mHydrogen.setSourceImage(pixs);
  53. pixs.recycle();
  54. mHydrogen.detectText();
  55. Pixa pixa = mHydrogen.getTextAreas();
  56. float[] conf = mHydrogen.getTextConfs();
  57. float angle = mHydrogen.getSkewAngle();
  58. frame.setDetectedText(pixa, conf, angle);
  59. pixa.recycle();
  60. // TODO(alanv): This won't be necessary when we start using a buffer.
  61. mHydrogen.clear();
  62. }
  63. }