gpt4 book ai didi

java - 每像素字节数,每行字节数 - 如何在 tess-two 的 tessbaseapi.cpp 中使用函数 nativeSetImageBytes?

转载 作者:行者123 更新时间:2023-11-30 04:58:40 26 4
gpt4 key购买 nike

我们正在解析显示文本片段的图像,该图像的分辨率为 2121x105 像素。在 Java 中,我们有以下代码来获取字节数组(我们的限制之一是在此处使用字节数组):

import org.apache.commons.io.IOUtils;

...

InputStream is = getAssets().open("images/text.png");
byte[] bytes = IOUtils.toByteArray(is);

然后这个字节数组被传递给本地 C++ 代码——我们没有使用 tess-two 的 Java 包装器,但是我们使用本地库。在 native 代码中,我们试图获取使用 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))

最佳答案

tess-two使用 tesseract OCR需要 rgba rgb 或灰色格式的解码图像。

因此您需要解码您的 png(this 问题解释了如何在 java 中执行此操作)并将结果转换为字节数组。

bpp 是每像素字节数,对于 rgba 格式它将是 4(1 字节是红色 2 是绿色 3 是蓝色 4 是 alpha)对于 rgb 它将是 3 (1 字节是红色,2 是绿色,3 是蓝色)对于灰度,它将是 1。

bpl 是每行字节数 = bpp * 图像宽度

关于java - 每像素字节数,每行字节数 - 如何在 tess-two 的 tessbaseapi.cpp 中使用函数 nativeSetImageBytes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51590161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com