Steve Job Ответов: 0

Как изменить размер ограничивающего прямоугольника в Google vision OCR api ?


Я использую google OCR image to text api. Потому что я хочу сохранить меню еды в своей базе данных. Но TextRecognizer может обнаруживать только текстовые блоки. я хочу сканировать столбец мудро, чтобы я мог получить название блюда и его цену одновременно, так что мне будет легко сохранить его в базе данных.

OcrCaptureActivity
// этот метод показывает, какой блок был нажат, и отображает его в textview

private boolean onTap(float rawX, float rawY) {
      OcrGraphic graphic = mGraphicOverlay.getGraphicAtLocation(rawX, rawY);
      TextBlock text = null;
      if (graphic != null) {
          text = graphic.getTextBlock();
          if (text != null && text.getValue() != null) {
              Intent data = new Intent();
              data.putExtra(TextBlockObject, text.getValue());
              setResult(CommonStatusCodes.SUCCESS, data);
              finish();
          }
          else {
              Log.d(TAG, "text data is null");
          }
      }
      else {
          Log.d(TAG,"no text detected");
      }
      return text != null;
  }

Класс OcrGraphic
/**
     * Checks whether a point is within the bounding box of this graphic.
     * The provided point should be relative to this graphic's containing overlay.
     * @param x An x parameter in the relative context of the canvas.
     * @param y A y parameter in the relative context of the canvas.
     * @return True if the provided point is contained within this graphic's bounding box.
     */
 
 public boolean contains(float x, float y) {
        TextBlock text = mText;
        if (text == null) {
            return false;
        }
        RectF rect = new RectF(text.getBoundingBox());
        rect.left = translateX(rect.left);
        rect.top = translateY(rect.top);
        rect.right = translateX(rect.right);
        rect.bottom = translateY(rect.bottom);
        return (rect.left < x && rect.right > x && rect.top < y && rect.bottom > y);
    }
 
    /**
     * Draws the text block annotations for position, size, and raw value on the supplied canvas.
     */
    @Override
    public void draw(Canvas canvas) {
        TextBlock text = mText;
        if (text == null) {
            return;
        }
 
        // Draws the bounding box around the TextBlock.
        RectF rect = new RectF(text.getBoundingBox());
        rect.left = translateX(rect.left);
        rect.top = translateY(rect.top);
        rect.right = translateX(rect.right);
        rect.bottom = translateY(rect.bottom);
        canvas.drawRect(rect, sRectPaint);
 
        // Break the text into multiple lines and draw each one according to its own bounding box.
        List<? extends Text> textComponents = text.getComponents();
        for(Text currentText : textComponents) {
            float left = translateX(currentText.getBoundingBox().left);
            float bottom = translateY(currentText.getBoundingBox().bottom);
            canvas.drawText(currentText.getValue(), left, bottom, sTextPaint);
        }
    }
}


Что я уже пробовал:

я попытался установить ширину и высоту bouding box, но он все еще принимает текст в качестве текстового поля
RectF rect = new RectF(0,0,800,600); 

0 Ответов