gpt4 book ai didi

java - 如何在 Java 中过滤 OpenCV 错误消息

转载 作者:行者123 更新时间:2023-12-01 18:42:08 24 4
gpt4 key购买 nike

这个问题已经被讨论过,例如对于

The OpenCV documentation描述

ErrorCallback cv::redirectError     (   ErrorCallback   errCallback,
void * userdata = 0,
void ** prevUserdata = 0
)

如何将其用于例如过滤掉烦人的消息?

一个例子是

[mjpeg @ 0x7fe5a696ea00] unable to decode APP fields: Invalid data found when processing input

来自 Logitech USB 网络摄像头的 mjpeg 流,该流是在每一帧上创建的,是多余的,不需要。

还有一个loglevel可用的。不幸的是,导入 org.opencv.utils 仅包含“转换器”,但从 OpenCV 3.4.8 开始没有日志记录

如何从 Java 设置日志级别?

enum    LogLevel {
LOG_LEVEL_SILENT = 0,
LOG_LEVEL_FATAL = 1,
LOG_LEVEL_ERROR = 2,
LOG_LEVEL_WARNING = 3,
LOG_LEVEL_INFO = 4,
LOG_LEVEL_DEBUG = 5,
LOG_LEVEL_VERBOSE = 6
}

Redirect System.out and System.err to slf4j有帮助吗?

最佳答案

如何将其用于例如过滤掉烦人的消息?如何从 Java 设置日志级别?

目前(2020-01)还不能。即使可以从 Java 访问 API,错误 https://github.com/opencv/opencv/issues/12780会阻止它。

[将 System.out 和 System.err 重定向到 slf4j][5] 有帮助吗?

否 - 请参阅 Junit test case以下。结果是:

11:05:56.407 [main] DEBUG u.o.l.s.c.SysOutOverSLF4JInitialiser - Your logging framework class ch.qos.logback.classic.Logger should not need access to the standard println methods on the console, so you should not need to register a logging system package.
11:05:56.417 [main] INFO u.o.l.s.context.SysOutOverSLF4J - Replaced standard System.out and System.err PrintStreams with SLF4JPrintStreams
11:05:56.420 [main] INFO u.o.l.s.context.SysOutOverSLF4J - Redirected System.out and System.err to SLF4J for this context
11:05:56.421 [main] ERROR org.rcdukes.roi.TestROI - testing stderr via slf4j
[mjpeg @ 0x7f958b1b0400] unable to decode APP fields: Invalid data found when processing input
[mjpeg @ 0x7f958b027a00] unable to decode APP fields: Invalid data found when processing input

解码 APP 字段部分仍然通过一些 stderr 魔法显示。

  @Test
public void testLogStderr() throws Exception {
NativeLibrary.logStdErr();
System.err.println("testing stderr via slf4j");
NativeLibrary.load();
VideoCapture capture = new VideoCapture();
// Dorf Appenzell
//String url="http://213.193.89.202/axis-cgi/mjpg/video.cgi";
// Logitech Cam on test car
// url="http://picarford:8080/?action=stream";
File imgRoot = new File(testPath);
File testStream=new File(imgRoot,"logitech_test_stream.mjpg");
assertTrue(testStream.canRead());
capture.open(testStream.getPath());
Mat image=new Mat();
capture.read(image);
assertEquals(640,image.width());
assertEquals(480,image.height());
capture.release();
}

有趣的侧面事实

根据ffmpeg文档可以通过设置环境变量 AV_LOG_FORCE_NOCOLOR 或 NO_COLOR 来禁用日志着色,或者可以强制设置环境变量 AV_LOG_FORCE_COLOR。不推荐使用环境变量 NO_COLOR,并将在未来的 FFmpeg 版本中删除

但似乎没有选项可以从环境变量更改日志记录级别...

关于java - 如何在 Java 中过滤 OpenCV 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59907813/

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