我们正在解析显示分辨率为 2121x105 像素的文本片段的图像。在 Java 中,我们有以下代码来获取字节数组(我们的约束之一是在此处使用字节数组):import org.apache.commons.io.IOUtils;...InputStream is = getAssets().open("images/text.png");byte[] bytes = IOUtils.toByteArray(is);然后将此字节数组传递给本机 C++ 代码 - 我们没有使用 tess-two 的 Java 包装器,但我们使用了本机库。在本机代码中,我们尝试使用GetUTF8Text()获取图像的文本。然后我们看到 tess-two 已经有一个实现,用于通过将图像作为字节数组传递来设置要读取的图像:void Java_com_..._TessBaseAPI_nativeSetImageBytes(JNIEnv *env, jobject thiz, jlong mNativeData, jbyteArray data, jint width, jint height, jint bpp, jint bpl) {...我们认为PNG 的bpp应该是 4 (RGBA)。目前尚不清楚bpl 的预期是什么。如果我们设置由bpp乘以的图像的宽度,那么我们会得到一个分割错误。如果我们将其设置为零,则返回一个空字符串。更新: 分割错误是在GetUTF8Text()而不是在SetImage() 中引发的。SIGSEGV (signal SIGSEGV: invalid address (fault address: 0xc))
1 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
tess-two
它使用tesseract OCR
rgba rgb 或灰色格式的预期解码图像。
所以你需要解码你的png(这个问题解释了如何在java中做到这一点)并将结果转换为字节数组。
bpp是 rgba 格式的每像素字节数,它是 4(1 个字节是红色 2 是绿色 3 是蓝色 4 是 alpha)对于 rgb 它将是 3(1 个字节是红色 2 是绿色 3 是蓝色)对于灰度它将是1.
bpl是每行字节数 = bpp * 图像宽度
添加回答
举报
0/150
提交
取消