MyMonsterCat / RapidOcr-Java

🔥🔥🔥Java代码实现调用RapidOCR(基于PaddleOCR),适配Mac、Win、Linux,支持最新PP-OCRv4
Apache License 2.0
197 stars 28 forks source link

有一个打包问题,咨询一下 #47

Closed lycfr closed 1 month ago

lycfr commented 2 months ago

代码

public static void main(String[] args) {
        String image_file = "";
        if (args.length == 0) {
            URL url = OCR.class.getClassLoader().getResource("test4.png");
            if (url != null) {
                image_file = url.getFile();
            } else {
                System.out.println("资源文件test4.png未找到");
                return;
            }
        } else {
            image_file = args[0];
        }
        long startTime = System.currentTimeMillis();
        InferenceEngine engine = InferenceEngine.getInstance(Model.ONNX_PPOCR_V4);
        OcrResult ocrResult = engine.runOcr(image_file);
        List<TextBlock> textBlocks = ocrResult.getTextBlocks();
        for (TextBlock block : textBlocks) {
            System.out.println(block);
        }
        System.out.println("End Test:" + (System.currentTimeMillis() - startTime) + " ms");
    }

pom.xml

<dependencies>
        <!--  rapidocr这个必须要引入     -->
        <!--  可前往maven中央仓库https://central.sonatype.com/artifact/io.github.mymonstercat/rapidocr/versions,查看版本      -->
        <!-- core -->
        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr</artifactId>
            <version>${ocr.common.version}</version>
        </dependency>
        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-common</artifactId>
            <version>${ocr.common.version}</version>
        </dependency>

        <!--  一般只需要引入一个,CPU端建议使用onnx,移动端建议使用ncnn     -->
        <!--  可前往maven中央仓库https://central.sonatype.com/artifact/io.github.mymonstercat/rapidocr-onnx-platform/versions,查看版本      -->
        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-models</artifactId>
            <version>${model.version.122}</version>
        </dependency>
        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-macosx-arm64</artifactId>
            <version>${model.version.122}</version>
        </dependency>
        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-macosx-x86_64</artifactId>
            <version>${model.version.122}</version>
        </dependency>
        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-linux-x86_64</artifactId>
            <version>${model.version.122}</version>
        </dependency>
        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-windows-x86_64</artifactId>
            <version>${model.version.122}</version>
        </dependency>
        <dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-windows-x86</artifactId>
            <version>${model.version.122}</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>io.github.mymonstercat</groupId>-->
<!--            <artifactId>rapidocr-onnx-linux-arm64</artifactId>-->
<!--            <version>${model.version.122}</version>-->
<!--        </dependency>-->

        <!-- other -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.3</version>
        </dependency>

    </dependencies>

我现在在Mac OS Intel芯片上运行时,报错了:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /private/var/folders/f_/mp2mfwk540dby1r_r5ny1jc80000gn/T/ocrJava/onnx/libRapidOcr.dylib: dlopen(/private/var/folders/f_/mp2mfwk540dby1r_r5ny1jc80000gn/T/ocrJava/onnx/libRapidOcr.dylib, 0x0001): tried: '/private/var/folders/f_/mp2mfwk540dby1r_r5ny1jc80000gn/T/ocrJava/onnx/libRapidOcr.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64h' or 'x86_64')), '/System/Volumes/Preboot/Cryptexes/OS/private/var/folders/f_/mp2mfwk540dby1r_r5ny1jc80000gn/T/ocrJava/onnx/libRapidOcr.dylib' (no such file), '/private/var/folders/f_/mp2mfwk540dby1r_r5ny1jc80000gn/T/ocrJava/onnx/libRapidOcr.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64h' or 'x86_64'))
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1817)
    at java.lang.Runtime.load0(Runtime.java:810)
    at java.lang.System.load(System.java:1086)
    at io.github.mymonstercat.JarFileUtil.copyFileFromJar(JarFileUtil.java:68)
    at io.github.mymonstercat.OnnxMacX8664LibraryLoader.loadLibrary(OnnxMacX8664LibraryLoader.java:14)
    at io.github.mymonstercat.ocr.InferenceEngine.loadFileIfNeeded(InferenceEngine.java:78)
    at io.github.mymonstercat.ocr.InferenceEngine.runOcr(InferenceEngine.java:55)
    at io.github.mymonstercat.ocr.InferenceEngine.runOcr(InferenceEngine.java:50)
    at com.lyyd.ocr.OCR.main(OCR.java:28)

看这个报错的是动态库加载找到了M芯片,我要如何在代码中去加载我maven目录下的对应平台的动态库呢?我在api上面没找到接口

lycfr commented 2 months ago

另外一个问题

<dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-linux-arm64</artifactId>
            <version>${model.version.122}</version>
        </dependency>

这个jar拉取不下来,是版本有问题?

Could not find artifact io.github.mymonstercat:rapidocr-onnx-linux-arm64:pom:1.2.2 in central (https://repo.maven.apache.org/maven2)
MyMonsterCat commented 2 months ago

第一个问题:Inerl芯片的可能有些问题,我在这里下载编译好的dylibRapidOcrOnnx。你可以拉取RapidOcr-Java,然后替换macosx-x86_64包内相应的dylib,重新打包到本地,使用本地的jar试一下。

MyMonsterCat commented 2 months ago

另外一个问题

<dependency>
            <groupId>io.github.mymonstercat</groupId>
            <artifactId>rapidocr-onnx-linux-arm64</artifactId>
            <version>${model.version.122}</version>
        </dependency>

这个jar拉取不下来,是版本有问题?

Could not find artifact io.github.mymonstercat:rapidocr-onnx-linux-arm64:pom:1.2.2 in central (https://repo.maven.apache.org/maven2)

onnx-linux-arm64是前两天新上传的,还没有打包到中央仓库,同样拉取项目打包到本地,使用本地jar包。提交日志在这arm64

lycfr commented 2 months ago
image

RapidOcrOnnx 这几个后缀代表啥意思?不同平台怎么区分

MyMonsterCat commented 2 months ago
image

RapidOcrOnnx 这几个后缀代表啥意思?不同平台怎么区分

jni的