Actualmente estoy jugando con OCR en Android. Por lo tanto, escribí una pequeña aplicación con una vista previa de la cámara y ahora estoy alimentando las herramientas de Tessearact (tess-two) de mi método onPreviewFrame. Ahora quiero mostrar los círculos rectas del OCR en mi Vista previa de la cámara. TessBaseAPI proporciona métodos que devuelven cuadros de caracteres/palabra que se inclinan. El tipo del objeto devuelto es Pixa, como en la biblioteca leptonica provista con tess-two.Android tesseract OCR: el uso de datos de objetos Pixa para mostrar recuadros delimitantes
Así que mi pregunta es: ¿Cómo obtengo las coordenadas utilizables que puedo usar para dibujar los cuadros delimitadores en la vista previa de mi cámara de los objetos Pixa devueltos por getCharacters() o getWords() de TessBaseAPI?
GetCharacters() and getWords() in the BaseAPI
Importante:
Debido a las vistas previas sólo se admite la imagen a formato es YUV N21 y en la medida de lo que he leído el Tess-API requiere ARGB_8888 mapas de bits I Tengo la siguiente solución en mi método onPreviewFrame justo antes de alimentar el mapa de bits a TessAPI: (También estoy girando 90 grados en el sentido de las agujas del reloj porque estoy usando la cámara en orientación vertical, pero las cámaras previenen w marcos vienen en el paisaje)
//byte[] bmpdata <- the image in a byte array (NV21 Imageformat) in onPreviewFrame
YuvImage yuvimage = new YuvImage(bmpdata,ImageFormat.NV21,width,height,null);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Rect rect = new Rect(0, 0, width, height);
yuvimage.compressToJpeg(rect, 100, outStream);
Bitmap bmp = BitmapFactory.decodeByteArray(outStream.toByteArray(),0,outStream.size());
Matrix mtx = new Matrix();
mtx.preRotate(90);
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mtx, false);
bmp = bmp.copy(Bitmap.Config.ARGB_8888, true);
TessTBaseApi.setImage(bmp);
Así que, básicamente, que comprimen el byte NV21 [] Tengo por la cámara en un YuvImage, a continuación, en un jpeg, y de allí a un mapa de bits. Busqué mucho en la web la solución sobre cómo obtener bitmap/jpeg de la matriz NV21 y esta fue la más fácil que encontré. Este mapa de bits se alimentará a las herramientas de tesseract OCR. Esto me lleva a mi segunda pregunta:
¿Cómo, después de estas compresiones y la rotación de 90 grados, puedo ubicar dónde tengo que dibujar los cuadros en la pantalla? (relativo a antes de las compresiones y la rotación)
Puede que esta no sea la mejor ni la mejor manera de suministrar el OCR con marcos en vivo, agradezco mucho los comentarios, otras soluciones o sugerencias de formas de optimización.
Inicié este proyecto hace dos días y soy un principiante en la programación de android y ocr. Durante estos dos días, esta página me ayudó mucho y respondió muy bien las preguntas que hasta ahora había tenido, así que gracias por eso y gracias de antemano por ayudarme con mi problema actual. Si desea ver más código o tiene preguntas, proporcionaré y estaré encantado de responder cualquier cosa que pueda.
Saludos
Usted puede navegar Trough todo el código fuente API en github Trough la clase y GetCharacters Pixa (enlaces), no puedo insertar más hipervínculos.
gracias, ¡exactamente lo que estaba buscando! Es una pena que no pueda votarte. – Jones