Skip to content

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.so trong LD_LIBRARY_PATH (có sẵn tại lib/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 handle

Kiến trúc wrapper

LớpVai trò
CvedixLibraryInterface JNA map 1-1 với cvedix_c_api.h
CvedixPipelineFacade cấp cao — quản lý vòng đời + callback reference
DetectionRecord kết quả: label, score, trackId, bbox
CvedixExceptionBọ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, JavaFX Platform.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.

Phần mềm độc quyền — CVEDIX