Jon*_*nes 8 java ocr android tesseract preview
我目前在Android上玩OCR.因此,我写了一个带有Camera预览的小应用程序,现在我正在从onPreviewFrame方法中提供tessearact工具(tess-two)图像.现在我想在我的Camera Preview上显示来自OCR的边界矩形.TessBaseAPI提供返回字符/单词bouding框的方法.返回对象的类型是Pixa,就像在lessonica库中提供的tess-two一样.
所以我的问题是:如何从TessBaseAPI中的getCharacters()或getWords()返回的Pixa对象中获取可用于在我的相机预览上绘制边界框的可用坐标?
BaseAPI中的GetCharacters()和getWords()
重要:
因为预览仅支持图像格式是YUV N21,并且远离我读过的tess-API需要ARGB_8888位图我在onPreviewFrame方法中有以下解决方法就在我将位图提供给TessAPI之前:(我也在旋转顺时针旋转90度,因为我在纵向使用相机,但摄像机预览框架是横向的)
//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);
Run Code Online (Sandbox Code Playgroud)
基本上,我将从相机中获取的NV21字节[]压缩为YuvImage,然后压缩为jpeg,并从那里压缩成位图.我在网上搜索了很多关于如何从NV21阵列获取位图/ jpeg的解决方案,这是我找到的最简单的方法.该位图将被输入到tesseract工具OCR.这让我想到了第二个问题:
在这些压缩和90度旋转之后,我如何找到我必须在屏幕上绘制框的位置?(相对于按压和旋转之前)
这可能不是向OCR提供实时帧的最好甚至是好方法,我非常感谢评论,其他解决方案或优化方法的建议.
我两天前开始这个项目,是一个非常初学的android和ocr编程.在这两天里,这个页面帮助了我很多并且回答了我迄今为止所提出的问题,所以非常感谢你们,并提前感谢你帮我解决当前的问题.如果您想查看更多代码或有疑问,我会提供并乐意回答我能做的任何事情.
问候
您可以通过Pixa类和GetCharacters()链接浏览github上的整个API源代码,无法插入更多超链接.
| 归档时间: |
|
| 查看次数: |
3440 次 |
| 最近记录: |