Java Binding (JNA)
Java wrapper cho CVEDIX runtime qua JNA — không cần compile JNI.
Yêu cầu
- JDK 17+, Maven 3.6+
libcvedix_capi.so+libcvedix_core.sotrongLD_LIBRARY_PATH(có sẵn tạilib/x86_64/của SDK)
Build & chạy sample
bash
cd $CVEDIX_SDK_DIR/bindings/java
mvn -q package
export LD_LIBRARY_PATH=$CVEDIX_SDK_DIR/lib/x86_64:$LD_LIBRARY_PATH
mvn -q exec:java -Dexec.args="video.mp4 yolo11n.onnx labels.txt"Dùng trong project của bạn
java
try (CvedixPipeline pipeline = new CvedixPipeline()) {
var src = pipeline.fileSource("src", 0, "video.mp4", 0.5f, true);
var det = pipeline.yoloDetector("det", "model.onnx", CvedixLibrary.YOLO11, "labels.txt");
var app = pipeline.appDestination("app", 0, (frame, dets) -> {
dets.forEach(System.out::println); // Detection: label, score, trackId, bbox
});
det.attachTo(src);
app.attachTo(det);
pipeline.start(src);
// ...
} // try-with-resources: tự động stop + giải phóng native handleKiến trúc wrapper
| Lớp | Vai trò |
|---|---|
CvedixLibrary | Interface JNA map 1-1 với cvedix_c_api.h |
CvedixPipeline | Facade cấp cao — quản lý vòng đời + callback reference |
Detection | Record kết quả: label, score, trackId, bbox |
CvedixException | Bọc lỗi native (message từ cvedix_last_error()) |
Lưu ý quan trọng
Callback thread
Callback được gọi từ thread native của pipeline:
- Không block lâu trong callback (làm nghẽn pipeline).
- Không cập nhật UI trực tiếp — chuyển sang UI thread (
SwingUtilities.invokeLater, JavaFXPlatform.runLater).
GC an toàn
CvedixPipeline giữ strong-reference cho JNA callback — tránh trường hợp GC thu hồi callback khi native vẫn đang giữ function pointer.
Maven dependency (dùng lại module)
xml
<dependency>
<groupId>com.cvedix</groupId>
<artifactId>cvedix-sdk</artifactId>
<version>1.0.0</version>
</dependency>Cài vào local repo: mvn install trong bindings/java.