Skip to content

Commit afd45d6

Browse files
update to v11.0.6100
1 parent ffe60c3 commit afd45d6

File tree

9 files changed

+162
-48
lines changed

9 files changed

+162
-48
lines changed

Samples/GeneralSettings/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<dependency>
2020
<groupId>com.dynamsoft</groupId>
2121
<artifactId>dbr</artifactId>
22-
<version>11.0.6000</version>
22+
<version>11.0.6100</version>
2323
</dependency>
2424
</dependencies>
2525

Samples/HelloWorld/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<dependency>
2020
<groupId>com.dynamsoft</groupId>
2121
<artifactId>dbr</artifactId>
22-
<version>11.0.6000</version>
22+
<version>11.0.6100</version>
2323
</dependency>
2424
</dependencies>
2525

Samples/ParameterTuner/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<dependency>
2020
<groupId>com.dynamsoft</groupId>
2121
<artifactId>dbr</artifactId>
22-
<version>11.0.6000</version>
22+
<version>11.0.6100</version>
2323
</dependency>
2424
</dependencies>
2525

Samples/ParameterTuner/src/main/java/com/dynamsoft/ParameterTuner.java renamed to Samples/ParameterTuner/src/main/java/ParameterTuner.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
package com.dynamsoft;
2-
31
import com.dynamsoft.core.EnumErrorCode;
42
import com.dynamsoft.cvr.CaptureVisionError;
53
import com.dynamsoft.cvr.CaptureVisionException;

Samples/ReadDPMBarcode/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<dependency>
2020
<groupId>com.dynamsoft</groupId>
2121
<artifactId>dbr</artifactId>
22-
<version>11.0.6000</version>
22+
<version>11.0.6100</version>
2323
</dependency>
2424
</dependencies>
2525

Samples/ShowLocalizedVSDecodedBarcodes/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<dependency>
2020
<groupId>com.dynamsoft</groupId>
2121
<artifactId>dbr</artifactId>
22-
<version>11.0.6000</version>
22+
<version>11.0.6100</version>
2323
</dependency>
2424
</dependencies>
2525

Samples/ShowLocalizedVSDecodedBarcodes/src/main/java/com/dynamsoft/ShowLocalizedVSDecodedBarcodes.java renamed to Samples/ShowLocalizedVSDecodedBarcodes/src/main/java/ShowLocalizedVSDecodedBarcodes.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
package com.dynamsoft;
2-
31
import java.io.File;
42
import java.util.ArrayList;
53
import java.util.HashSet;
@@ -9,7 +7,9 @@
97

108
import com.dynamsoft.core.EnumErrorCode;
119
import com.dynamsoft.core.IntermediateResultExtraInfo;
10+
import com.dynamsoft.core.basic_structures.CapturedResultItem;
1211
import com.dynamsoft.core.basic_structures.ImageData;
12+
import com.dynamsoft.core.basic_structures.OriginalImageResultItem;
1313
import com.dynamsoft.core.basic_structures.Point;
1414
import com.dynamsoft.core.basic_structures.Quadrilateral;
1515
import com.dynamsoft.cvr.CaptureVisionException;
@@ -18,6 +18,7 @@
1818
import com.dynamsoft.cvr.EnumPresetTemplate;
1919
import com.dynamsoft.cvr.IntermediateResultManager;
2020
import com.dynamsoft.cvr.IntermediateResultReceiver;
21+
import com.dynamsoft.cvr.SimplifiedCaptureVisionSettings;
2122
import com.dynamsoft.dbr.BarcodeResultItem;
2223
import com.dynamsoft.dbr.DecodedBarcodesResult;
2324
import com.dynamsoft.dbr.intermediate_results.LocalizedBarcodeElement;
@@ -155,8 +156,25 @@ public static void main(String[] args) {
155156
return;
156157
}
157158

159+
try {
160+
SimplifiedCaptureVisionSettings settings = cvRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES);
161+
settings.outputOriginalImage = 1;
162+
cvRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, settings);
163+
} catch (CaptureVisionException e) {
164+
System.out.println("Failed to update settings: " + e.getMessage());
165+
return;
166+
}
167+
158168
CapturedResult result = cvRouter.capture(image, EnumPresetTemplate.PT_READ_BARCODES);
159169

170+
for (CapturedResultItem capturedResultItem : result.getItems()) {
171+
if (capturedResultItem instanceof OriginalImageResultItem) {
172+
OriginalImageResultItem originalImageResultItem = (OriginalImageResultItem)capturedResultItem;
173+
image = originalImageResultItem.getImageData();
174+
break;
175+
}
176+
}
177+
160178
if (result.getErrorCode() == (int)EnumErrorCode.EC_UNSUPPORTED_JSON_KEY_WARNING) {
161179
System.out.println("Warning: " + result.getErrorCode() + ", " + result.getErrorString());
162180
} else if (result.getErrorCode() != EnumErrorCode.EC_OK) {

Samples/VideoDecoding/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<dependency>
2020
<groupId>com.dynamsoft</groupId>
2121
<artifactId>dbr</artifactId>
22-
<version>11.0.6000</version>
22+
<version>11.0.6100</version>
2323
</dependency>
2424
<dependency>
2525
<groupId>org.bytedeco</groupId>

Samples/VideoDecoding/src/main/java/VideoDecoding.java

Lines changed: 136 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,23 @@
1313
import com.dynamsoft.license.LicenseException;
1414
import com.dynamsoft.license.LicenseManager;
1515
import com.dynamsoft.utility.MultiFrameResultCrossFilter;
16+
17+
import org.bytedeco.ffmpeg.global.avutil;
18+
import org.bytedeco.javacv.FFmpegFrameGrabber;
19+
import org.bytedeco.javacv.Frame;
20+
import org.bytedeco.javacv.OpenCVFrameConverter;
1621
import org.bytedeco.opencv.opencv_core.Mat;
1722
import org.bytedeco.opencv.opencv_videoio.VideoCapture;
1823

24+
import java.awt.GraphicsEnvironment;
25+
import java.nio.Buffer;
26+
import java.nio.ByteBuffer;
1927
import java.nio.file.Files;
2028
import java.nio.file.Paths;
2129
import java.util.Scanner;
2230

31+
import org.bytedeco.javacv.CanvasFrame;
2332
import static org.bytedeco.opencv.global.opencv_highgui.*;
24-
import static org.bytedeco.opencv.global.opencv_videoio.CAP_PROP_FRAME_HEIGHT;
25-
import static org.bytedeco.opencv.global.opencv_videoio.CAP_PROP_FRAME_WIDTH;
2633

2734
class MyCapturedResultReceiver extends CapturedResultReceiver {
2835

@@ -86,43 +93,116 @@ private static void decodeVideo(boolean useVideoFile, String videoFilePath) {
8693
return;
8794
}
8895

89-
try (VideoCapture vc = !useVideoFile ? new VideoCapture(0) : new VideoCapture(videoFilePath)) {
90-
int videoWidth = (int) vc.get(CAP_PROP_FRAME_WIDTH);
91-
int videoHeight = (int) vc.get(CAP_PROP_FRAME_HEIGHT);
92-
vc.set(CAP_PROP_FRAME_WIDTH, videoWidth);
93-
vc.set(CAP_PROP_FRAME_HEIGHT, videoHeight);
94-
95-
if (!vc.isOpened()) {
96-
cvRouter.stopCapturing();
97-
return;
96+
CanvasFrame canvas = null;
97+
VideoCapture vc = null;
98+
FFmpegFrameGrabber grabber = null;
99+
OpenCVFrameConverter.ToMat converter = null;
100+
String windowName = "Video Barcode Reader";
101+
try {
102+
if (useVideoFile) {
103+
avutil.av_log_set_level(avutil.AV_LOG_QUIET);
104+
grabber = new FFmpegFrameGrabber(videoFilePath);
105+
try {
106+
grabber.start();
107+
} catch (Exception e) {
108+
System.out.println("Error: " + e.getMessage());
109+
return;
110+
}
111+
} else {
112+
vc = new VideoCapture(0);
113+
if (!vc.isOpened()) {
114+
System.out.println("Error: Cannot open camera.");
115+
return;
116+
}
98117
}
99118

100-
String windowName = "Video Barcode Reader";
119+
boolean isHeadless = GraphicsEnvironment.isHeadless();
120+
if (!isHeadless) {
121+
canvas = new CanvasFrame(windowName, 1);
122+
canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
123+
canvas.setAlwaysOnTop(true);
124+
canvas.setVisible(true);
125+
canvas.setAlwaysOnTop(false);
126+
}
101127

102128
int imageId = 0;
103-
Mat frame = new Mat();
104-
while (true) {
129+
Frame frame;
130+
converter = new OpenCVFrameConverter.ToMat();
131+
while (canvas == null || canvas.isVisible()) {
105132
imageId++;
106-
boolean rval = vc.read(frame);
107-
if (!rval) {
133+
if (grabber != null) {
134+
frame = grabber.grab();
135+
} else if (vc != null) {
136+
Mat mat = new Mat();
137+
if (!vc.read(mat)) {
138+
break;
139+
}
140+
141+
if (mat.empty()) {
142+
System.out.println("Error: Frame is empty.");
143+
break;
144+
}
145+
146+
frame = converter.convert(mat);
147+
} else {
148+
System.out.println("Error: No video source available.");
149+
break;
150+
}
151+
152+
if (frame == null) {
153+
break;
154+
} else if (frame.image == null) {
155+
continue;
156+
}
157+
158+
byte[] byteArray;
159+
Buffer buffer = frame.image[0];
160+
if (buffer instanceof ByteBuffer) {
161+
ByteBuffer byteBuffer = (ByteBuffer)buffer;
162+
byteBuffer.rewind();
163+
byteArray = new byte[byteBuffer.remaining()];
164+
byteBuffer.get(byteArray);
165+
} else {
166+
System.out.println("Error: Frame is not a ByteBuffer.");
108167
break;
109168
}
110169

111170
FileImageTag tag = new FileImageTag("", 0, 0);
112171
tag.setImageId(imageId);
113-
byte[] byteArray = new byte[(int) (frame.total() * frame.channels())];
114-
frame.data().get(byteArray);
115-
ImageData image = new ImageData(byteArray, frame.cols(), frame.rows(), (int) frame.step(), EnumImagePixelFormat.IPF_RGB_888, 0, tag);
172+
ImageData image = new ImageData(byteArray, frame.imageWidth, frame.imageHeight, frame.imageStride, EnumImagePixelFormat.IPF_RGB_888, 0, tag);
116173
fetcher.addImageToBuffer(image);
117174

118-
imshow(windowName, frame);
119-
int key = waitKey(1);
120-
if (key == 27)
121-
break;
175+
if (canvas != null) {
176+
canvas.showImage(frame);
177+
}
178+
}
179+
180+
} catch (Exception e) {
181+
e.printStackTrace();
182+
} finally {
183+
if (canvas != null) {
184+
if (canvas.isVisible()) {
185+
canvas.setVisible(false);
186+
}
187+
canvas.dispose();
188+
}
189+
190+
if (converter != null) {
191+
converter.close();
192+
}
193+
194+
try {
195+
if (useVideoFile && grabber != null) {
196+
grabber.stop();
197+
grabber.release();
198+
} else if (vc != null) {
199+
vc.release();
200+
}
201+
} catch (Exception e) {
202+
e.printStackTrace();
122203
}
123204

124205
cvRouter.stopCapturing();
125-
destroyWindow(windowName);
126206
}
127207
}
128208

@@ -162,24 +242,42 @@ public static void main(String[] args) {
162242
System.out.println("1. Decode video from camera.");
163243
System.out.println("2. Decode video from file.");
164244
System.out.println(">> 1 or 2:");
165-
int mode = scanner.nextInt();
166-
scanner.nextLine();
167-
168-
if (mode == 1 || mode == 2) {
169-
if (mode == 1) {
170-
useVideoFile = false;
171-
} else {
172-
useVideoFile = true;
173-
while (true) {
245+
String strChoice = scanner.nextLine();
246+
if (strChoice.trim().isEmpty()) {
247+
continue;
248+
}
249+
250+
boolean choosedMode = false;
251+
try {
252+
int mode = Integer.parseInt(strChoice.trim());
253+
if (mode == 1 || mode == 2) {
254+
useVideoFile = mode == 2;
255+
choosedMode = true;
256+
}
257+
} catch (NumberFormatException e) {
258+
videoFilePath = strChoice.replaceAll("^\"|\"$", "");
259+
useVideoFile = true;
260+
}
261+
262+
if (useVideoFile) {
263+
do {
264+
if (videoFilePath.isEmpty()) {
174265
System.out.println(">> Input your video full path:");
175266
videoFilePath = scanner.nextLine();
176-
videoFilePath = videoFilePath.replaceAll("^\"|\"$", "");
177-
if (Files.exists(Paths.get(videoFilePath))) {
178-
break;
267+
if (videoFilePath.trim().isEmpty()) {
268+
continue;
179269
}
180-
System.out.println("Error: File not found");
270+
videoFilePath = videoFilePath.replaceAll("^\"|\"$", "");
181271
}
182-
}
272+
if (Files.exists(Paths.get(videoFilePath))) {
273+
break;
274+
}
275+
System.out.println("Error: File not found");
276+
videoFilePath = "";
277+
} while (choosedMode);
278+
}
279+
280+
if ((!useVideoFile && choosedMode) || !videoFilePath.isEmpty()) {
183281
break;
184282
}
185283
} catch (Exception ignored) {

0 commit comments

Comments
 (0)