【问题标题】:Processing 4 error: WARNING: Illegal reflective access by gab.opencv.OpenCV处理 4 错误:警告:gab.opencv.OpenCV 的非法反射访问
【发布时间】:2021-05-22 21:47:09
【问题描述】:

我正在尝试在带有 Catalina 的 MAC 上使用 OpenCV 和 Processing 4。 但是,我收到以下错误:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by gab.opencv.OpenCV (file:/Users/mmemmo/Documents/Processing/libraries/opencv_processing/library/opencv_processing.jar) to field java.lang.ClassLoader.sys_paths

当我运行这段代码时

import gab.opencv.*;
import processing.video.*;
import java.awt.*;

Capture video;
OpenCV opencv;

void setup() {
  size(640, 480);
  video = new Capture(this, 640/2, 480/2);
  opencv = new OpenCV(this, 640/2, 480/2);
  //CASCADE_EYE
  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);  
 // opencv.loadCascade(OpenCV.CASCADE_EYE);  

  video.start();
}

void draw() {
  scale(2);
  opencv.loadImage(video);

  image(video, 0, 0 );

  noFill();
  stroke(0, 255, 0);
  strokeWeight(3);
  Rectangle[] faces = opencv.detect();
  println(faces.length);

  for (int i = 0; i < faces.length; i++) {
    println(faces[i].x + "," + faces[i].y);
    rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
  }
  
  if(faces.length > 0 ){
    println("Hello Human");enter code here
  }
}

void captureEvent(Capture c) {
  c.read();
}

我知道 Processing 的 Catalina 存在相机问题。这似乎不是这里的问题。我能够让相机在其他草图中正常工作。

如有任何反馈,我将不胜感激。谢谢。

【问题讨论】:

    标签: java opencv processing face-recognition


    【解决方案1】:

    Java 9 中引入的模块系统对哪些模块可以使用其他模块的功能有更多的限制。有关更多信息,请参阅此问题和答案:what is an illegal reflective access

    您使用处理 4 是否有特定原因?目前只有 alpha 版本可用,所以如果可能,我会使用 Processing 3。当我尝试在处理 4 中运行您的代码时,我收到与您相同的错误。当我在处理 3.5.4(在 Ubuntu 上)中运行您的代码时,它运行没有任何问题并且面部识别正在工作。我建议尝试一下 Processing 3。

    【讨论】:

    • 感谢您的回复。这很有帮助。我使用的是 Processing 4,因为所有以前版本的处理和 MAC OS Catalina 都报告了问题。然而。这适用于 3.5.4!作为说明,我确实必须通过终端运行它才能让相机工作。否则,MAC OS 不会授予您访问摄像机的权限。再次感谢。
    【解决方案2】:

    我修改了 opencv-processing 库,它适用于处理 4。 不完美,但它仍然有效。 https://github.com/jaegonlee/opencv-processing/releases

    原来的opencv处理库用这个代码设置库路径。但它不适用于 Java 11(处理 4),并导致警告。

    public static void setLibraryPath(String path) throws Exception {
        System.setProperty("java.library.path", path);
    
        //set sys_paths to null so that java.library.path will be reevalueted next time it is needed
        final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
        sysPathsField.setAccessible(true);
        sysPathsField.set(null, null);
    }
    

    我删除了它,警告消失了。修改后的库在 Processing IDE 上运行良好,但导出的应用程序在 macOS 上无法运行。

    【讨论】:

    • 仅链接的答案被认为质量非常低,因为它不直接回答问题并解决问题。链接通常用作给出答案的参考
    猜你喜欢
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多