如何在Java中过滤OpenCV错误消息
这个问题的问题已经讨论过了,例如如何在Java中过滤OpenCV错误消息,java,opencv,Java,Opencv,这个问题的问题已经讨论过了,例如 描述 ErrorCallback cv::redirectError ( ErrorCallback errCallback, void * userdata = 0, void ** prevUserdata = 0 ) 如何利用此功能过滤烦人的信息? 例如 [mjpeg @ 0x7fe5a696ea00] unable to decode APP fields: In
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流,该流在每一帧上创建,是超级流,不需要
还有一个可用的。不幸的是,import 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
}
会有帮助吗?如何使用此功能来过滤烦人的信息?
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
}
如何从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
}
目前(2020-01年)还不能。即使可以从Java访问API,bug也会阻止它
是否[将System.out和System.err重定向到slf4j][5]有帮助?
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
}
否-见下文。结果是:
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
解码应用程序字段部分仍然通过一些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();
}
有趣的一面
根据文件
通过设置环境变量AV_Log_FORCE_NOCOLOR或NO_COLOR,可以禁用日志着色,也可以强制设置环境变量AV_Log_FORCE_COLOR。不推荐使用环境变量NO_COLOR,并将在将来的FFmpeg版本中删除
但似乎没有选项从环境变量更改日志记录级别…IIRC,您作为示例提供的消息不是来自OpenCV,而是来自ffmpeg,它只是将其写入标准错误流。@DanMašek thx它将看到正确方向的点。但是,在OpenCV场景中,ffmpeg作为库嵌入,如何实现这一点呢