ww23 / blindwatermark Goto Github PK
View Code? Open in Web Editor NEWJava 盲水印
License: Apache License 2.0
Java 盲水印
License: Apache License 2.0
└─$ gradle build
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7-Debian-1)
OpenJDK 64-Bit Server VM (build 17.0.8+7-Debian-1, mixed mode, sharing)
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Starting a Gradle Daemon (subsequent builds will be faster)
FAILURE: Build failed with an exception.
Where:
Build file '/home/kali/Downloads/tools/BlindWatermark/build.gradle' line: 24
What went wrong:
A problem occurred evaluating root project 'BlindWatermark'.
Could not find method useJUnitPlatform() for arguments [] on task ':test' of type org.gradle.api.tasks.testing.Test.
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 3s
✘ me@dayedebener ~/Downloads java -jar BlindWatermark-v0.0.3-macosx-x86_64.jar encode -ct 1.png 1.out.png
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at me.ww23.image.BlindWatermark.main(BlindWatermark.java:63)
水印为“中文测试test”没问题,
但是水印为“中文测试TEST”就会报错了
java.lang.RuntimeException: OpenCV(3.4.2) /Users/travis/build/bytedeco/javacpp-presets/opencv/cppbuild/macosx-x86_64/opencv-3.4.2/modules/core/src/arithm.cpp:659: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'arithm_op'
是不是不支持中文?我电脑上中文被替换成了 “?”
不需要原图解码的水印才叫“盲水印”吧?
你这个文本类型的是盲水印,图像类型的好像不算盲水印了?
以上拙见如有不当请指摘。
1、首先我改encode的代码 是因为你的代码dft的文字盲水印耗时需要3s 以上,我加了些优化的代码
` public void encode(String image, String watermark, String output) {
// Mat src = Utils.read(image, CV_8S);
//
// List channel = new ArrayList<>(3);
// List newChannel = new ArrayList<>(3);
// split(src, channel);
//
// for (int i = 0; i < 3; i++) {
// Mat com = this.converter.start(channel.get(i)).clone();
// this.addWatermark(com, watermark);
// this.converter.inverse(com);
// newChannel.add(i, com);
// }
//
// Mat res = new Mat();
// merge(newChannel, res);
//
// if (res.rows() != src.rows() || res.cols() != src.cols()) {
// res = new Mat(res, new Rect(0, 0, src.width(), src.height()));
// }
//
// imwrite(output, res);
Mat src = Utils.read(image, CV_8S);
Mat res = new Mat();
Mat padded = splitSrc(src);
planes.add(padded);
planes.add(1, Mat.zeros(padded.size(), CV_32F));
merge(planes, res);
dft(res, res);
Scalar s = new Scalar(0, 0, 0, 0);
Point p = new Point(res.cols() / 3, res.rows() / 3);
putText(res, watermark, p, FONT_HERSHEY_COMPLEX, 1.0, s, 3,
8, false);
flip(res, res, -1);
putText(res, watermark, p, FONT_HERSHEY_COMPLEX, 1.0, s, 3,
8, false);
flip(res, res, -1);
Mat invDFT = new Mat();
idft(res, invDFT, Core.DFT_SCALE | Core.DFT_REAL_OUTPUT, 0);
Mat restoredImage = new Mat();
invDFT.convertTo(restoredImage, 0);
if (allPlanes.size() == 0) {
allPlanes.add(restoredImage);
} else {
allPlanes.add(0, restoredImage);
}
Mat lastImage = new Mat();
merge(allPlanes, lastImage);
imwrite(output, lastImage);
}`
2、运行的时候报错
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.1.2) /Users/travis/build/bytedeco/javacpp-presets/opencv/cppbuild/macosx-x86_64/opencv-4.1.2/modules/core/src/merge.dispatch.cpp:129: error: (-215:Assertion failed) mv[i].size == mv[0].size && mv[i].depth() == depth in function 'merge' ] at org.opencv.core.Core.merge_0(Native Method) at org.opencv.core.Core.merge(Core.java:4067) at com.example.demo.converter.DftConverter.merge11(DftConverter.java:109) at com.example.demo.dencoder.Encoder.encode(Encoder.java:83) at com.example.demo.BlindWatermark.main(BlindWatermark.java:53)
3、如果我还原成你的就可以正常执行 ,所以我想问下 ,为什么我基于你的类库改的 ,为什么我运行不起来呢 ?
`
Exception in thread "main" java.lang.RuntimeException: OpenCV(3.4.2) C:\projects\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-3.4.2\modules\core\src\dxt.cpp:4149: error: (-213:The function/fe
ature is not implemented) Odd-size DCT's are not implemented in function 'cv::OcvDctImpl::apply'
at org.bytedeco.javacpp.opencv_core.dct(Native Method)
at me.ww23.image.BlindWatermark.startDCT(BlindWatermark.java:254)
at me.ww23.image.BlindWatermark.decodeDCT(BlindWatermark.java:186)
at me.ww23.image.BlindWatermark.main(BlindWatermark.java:64)
`
麻烦大佬看看谢谢
你好,"测试test"解码出来是"口口test"
中文解码出来是两个竖直的长方形
libpng warning: iCCP: profile 'ICC PROFILE': 60515C6Fh: exceeds application limits
libpng warning: iCCP: CRC error
libpng warning: iCCP: profile 'ICC PROFILE': 60515C6Fh: exceeds application limits
libpng warning: iCCP: CRC error
libpng warning: iCCP: profile 'ICC PROFILE': 60515C6Fh: exceeds application limits
libpng warning: iCCP: CRC error
2018-11-29 16:18:20.715 ERROR 8716 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context wi
th path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: OpenCV(3.4.2) C:\projects\javacpp-presets\opencv\cppbuild\wi
ndows-x86_64\opencv-3.4.2\modules\core\src\arithm.cpp:659: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arr
ays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'cv::arithm_op'
] with root cause
java.lang.RuntimeException: OpenCV(3.4.2) C:\projects\javacpp-presets\opencv\cppbuild\windows-x86_64\opencv-3.4.2\modules\core\src\arithm.cpp:659: error: (-209:Siz
es of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scal
ar', nor 'scalar op array' in function 'cv::arithm_op'
at org.bytedeco.javacpp.opencv_core.subtract(Native Method) ~[opencv-3.4.2-1.4.2.jar!/:3.4.2-1.4.2]
解水印不能解析出文字吗?
我执行java命令时增加的参数 -Djava.library.path=D:/app/opencv/java/x64
我的dll文件都这这个目录
public static void main(String[] args) {
SpringApplication.run(BlindWatermarkApplication.class, args);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
loadOpenCvTest();
Loader.load(opencv_core.class);
}
public static void loadOpenCvTest() {
Mat mat = Mat.eye(3, 3, CvType.CV_8UC1);
logger.info("opencv load success ! \n" + mat.dump());
}
这是我的java代码,第一种方式的测试可以通过,但是运行到load方法就报错,请问时什么原因?
2018-11-28 17:10:06.324 INFO 20216 --- [ main] c.c.z.b.BlindWatermarkApplication : opencv load success !
[ 1, 0, 0;
0, 1, 0;
0, 0, 1]
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1258)
at org.bytedeco.javacpp.Loader.load(Loader.java:999)
at org.bytedeco.javacpp.Loader.load(Loader.java:891)
at org.bytedeco.javacpp.opencv_core.<clinit>(opencv_core.java:10)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.bytedeco.javacpp.Loader.load(Loader.java:950)
at org.bytedeco.javacpp.Loader.load(Loader.java:907)
at cn.com.zybank.blindwatermark.BlindWatermarkApplication.main(BlindWatermarkApplication.java:27)
Caused by: java.lang.UnsatisfiedLinkError: no opencv_imgproc343 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1258)
at org.bytedeco.javacpp.Loader.load(Loader.java:977)
... 7 more
[2020-07-20 17:41:40.413] [main] [ERROR] [c.b.p.m.l.e.GlobalUncaughtExceptionHandler] [TID:N/A] - An exception has been raised by Name:main,Id:1,Class:class java.lang.Thread java.lang.reflect.InvocationTargetException: null at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) Caused by: java.lang.UnsatisfiedLinkError: no jniopencv_highgui in java.library.path: [/usr/local/lib64, /usr/local/lib, /usr/lib64, /usr/lib, /lib64, /lib, /usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib] at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2654) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:876) at java.base/java.lang.System.loadLibrary(System.java:1875) at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1543) at org.bytedeco.javacpp.Loader.load(Loader.java:1192) at org.bytedeco.javacpp.Loader.load(Loader.java:1042) at org.bytedeco.opencv.global.opencv_highgui.<clinit>(opencv_highgui.java:22) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at org.bytedeco.javacpp.Loader.load(Loader.java:1109) at org.bytedeco.javacpp.Loader.load(Loader.java:1058) ... 8 common frames omitted Caused by: java.lang.UnsatisfiedLinkError: /root/.javacpp/cache/opencv-4.1.2-1.5.2-linux-x86_64.jar/org/bytedeco/opencv/linux-x86_64/libjniopencv_highgui.so: /usr/lib64/libpango-1.0.so.0: undefined symbol: fribidi_get_par_embedding_levels_ex at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method) at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2424) at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2481) at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2678) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2611) at java.base/java.lang.Runtime.load0(Runtime.java:814) at java.base/java.lang.System.load(System.java:1838) at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1493) ... 16 common frames omitted
使用离散傅里叶变换编码过程中没有任何错误提示,执行完毕后会输出一张正常图片,图片体积略有增加,但是解码导出的图片中并没有得到正确结果(只有雪花)。
经测试
BlindWatermark-v0.0.3-windows-x86_64.jar
BlindWatermark-v0.0.3-windows-x86_64-gpu.jar
均出现相同情况,其他系统版本未测试。
使用离散余弦变换则可以正常编解码,没有出现问题。
jre版本信息
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
系统版本信息
Windows10 1803 (build 17134.706)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.