Commit Graph

78 Commits

Author SHA1 Message Date
7e772f76bc Improve ANSCV 2026-04-21 09:26:02 +10:00
9f0a10a4c8 Improve ANSCV with sotfware decoder:
Thread-local staging Mat (video_player.cpp:1400-1407) — single biggest win. Eliminates the 12 MB per-call malloc/free cycle.
Contiguous get_buffer2 allocator (video_decoder.cpp:35-102) — keeps the 3 bulk memcpys cache-friendly. Would also enable FAST/zero-copy for resolutions where visible_h % 64 == 0.
SW-decoder thread config (video_decoder.cpp:528-540) — thread_count=0, thread_type=FRAME|SLICE. FRAME is downgraded to SLICE-only by AV_CODEC_FLAG_LOW_DELAY, but decode throughput is sufficient for your input rate.
SetTargetFPS(100) delivery throttle (already there) — caps onVideoFrame post-decode work at 10 FPS. Keeps the caller path warm-cached.
Instrumentation — [MEDIA_DecInit] / [MEDIA_Convert] / [MEDIA_SWDec] / [MEDIA_Timing] / [MEDIA_JpegTiming] — always-on regression detector, zero cost when ANSCORE_DEBUGVIEW=OFF.
2026-04-20 12:18:43 +10:00
adf32da2a2 Add early stale-out in ANSRTSPClient::GetImage
When the decoder hasn't produced a frame in 5s, skip the call to
_playerClient->getImage() entirely and return the cached frame with
unchanged _pts. LabVIEW sees STALE PTS one poll earlier and can
trigger reconnect sooner.

Threshold matches the existing checks on the duplicate-PTS branch and
in areImagesIdentical() so all three stale paths agree. Near-zero cost:
one getLastFrameAgeMs() call before the main path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 08:35:23 +10:00
0925aa1d63 Fix RTSP stall by releasing _mutex during BGR conversion
getImage() previously held _mutex across the 4K NV12->BGR sws_scale in
avframeToCVMat, blocking the decoder callback (onVideoFrame) for 100-300ms
per frame. Under multi-camera load this cascaded into 5-21s frame stalls
and STALE PTS events in the log.

- avframeToCVMat: drop outer _mutex. NV12/YUV420P paths touch no shared
  state; avframeAnyToCvmat still locks internally for swsCtx.
- getImage: split into two short locked phases with the BGR conversion
  unlocked between them. Decoder callbacks can push new frames and run
  the CUDA HW capture path in parallel with the reader's conversion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 08:23:28 +10:00
3418090042 - Remove ALPR_OD Tracker and voting system.
- Disable debugview
2026-04-19 23:15:50 +10:00
51fe507dfd Fix unregister issue 2026-04-19 14:47:29 +10:00
2de11c4b0c Fix: remove the leak protection entirely 2026-04-18 20:51:50 +10:00
247c91db50 Fix ANSAWS3 multiple instance creation 2026-04-18 20:33:44 +10:00
a47ea25e8b Fix Image management (BMP, BMPtoJPEG) and remove debug info from AWS Upload 2026-04-17 20:59:21 +10:00
fcc985efb9 Fix AWS S3 upload failure: remove ClearAllHeaders that was wiping SigV4 state
Removing the Fix 1 ClearAllHeaders/ClearAllQueryParams block from all 8
upload entry points. CkRest.AddHeader already overwrites by header name,
so the clears were unnecessary; they also wipe the internal state
Chilkat's SigV4 signer relies on between requests, which caused AWS to
reject every PUT with HTTP 400 MaxMessageLengthExceeded (max 35240 B).
Per-step ClearAllQueryParams inside multipart kept (followed immediately
by AddQueryParam).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 08:13:32 +10:00
a63feab0ff Ensure the threadsafe for video upload 2026-04-17 07:03:03 +10:00
2abfd6e87c Update the video conversion: Ensure the correct file order 2026-04-16 22:32:03 +10:00
308843bc6b Merge claude/beautiful-kare: remove [Engine] and [EnginePoolManager] debug logs 2026-04-16 18:09:17 +10:00
8d2db78cee Remove [Engine] and [EnginePoolManager] debug log messages
Cleaned up verbose engine telemetry emitted to stdout/stderr and the
Windows Event Viewer. Removes logEngineEvent/logEvent calls (and their
diagnostic-only locals) across the TensorRT engine load, build, run,
multi-GPU, and pool-manager paths, plus the now-unused logEvent helper
in EnginePoolManager.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 18:09:08 +10:00
7cb0b3930e Disabled BMP for now 2026-04-16 16:34:27 +10:00
8bb4f49b09 Improve jpeg conversion 2026-04-16 10:59:28 +10:00
6c72751a14 Add NvJpegPool (4 encoders) and JPEG passthrough in BmpToJpeg
- NvJpegPool: singleton pool of 4 NvJpegCompressor instances with
  lock-free slot acquisition (~160MB VRAM). Threads that can't grab
  a slot fall back to TurboJPEG with zero wait.
- JPEG passthrough: BmpToJpeg now checks if input is already JPEG
  (FF D8 FF magic) and copies directly without re-encoding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 08:33:17 +10:00
53a82da74a Add nvJPEG GPU-accelerated JPEG encoding with NVIDIA auto-detection
BmpToJpeg was slow (~25-45ms for 4K) due to two bottlenecks:
1. cv::imdecode for BMP parsing (unnecessary for uncompressed BMP)
2. TurboJPEG CPU encoding (~11ms for 4K)

Fix 1: Zero-copy BMP parsing — parse header directly and wrap pixel
data in cv::Mat without allocation or copy. Eliminates ~47MB of heap
allocations per 4K frame.

Fix 2: NvJpegCompressor class using nvJPEG hardware encoder on NVIDIA
GPUs (~1-2ms for 4K). Integrated into CompressJpegToString so all 5
JPEG encoding callsites benefit automatically. Reusable GPU buffer
avoids per-frame cudaMalloc/cudaFree. Silent fallback to TurboJPEG
on Intel/AMD or if nvJPEG fails.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 07:50:13 +10:00
750ccff58b Plan ffmpeg migration v1 2026-04-15 23:51:30 +10:00
7ea9fd0923 Plan ffmpeg migration 2026-04-15 23:38:57 +10:00
808df4656d Fix ALPR Batch and memory leak 2026-04-15 23:00:19 +10:00
b05c49ad93 Fix ALPR Batch and memory leak 2026-04-15 09:23:05 +10:00
7778f8c214 Two-part fix
Fix 1 — Chunk oversized bucket groups (the correctness fix)
ONNXOCRRecognizer::RecognizeBatch now slices each bucket group into chunks of ≤ kRecMaxBatch before submitting to TRT. A frame with 30 crops in bucket 320 produces two back-to-back batched calls (24 + 6), both within the profile, both on the fast path.

Fix 2 — Raise the profile max from 16 to 24 (the performance fix)
The old profile max was 16; your real scenes routinely hit 24. Raising the profile max to 24 means the common 12-plate scene (24 crops) fits in a single batched call with no chunking needed. Scenes with > 24 crops now use chunking, but that's rare.
2026-04-15 07:27:55 +10:00
5706615ed5 Support tracker to improve ALPR_OCR 2026-04-14 21:18:10 +10:00
f9a0af8949 Improve ALPR_OCR peformance 2026-04-14 20:30:21 +10:00
3349b45ade Update video conversion 2026-04-13 21:55:57 +10:00
8e60126c4c Fix mutex lock issues (OCR and FR) 2026-04-13 20:38:40 +10:00
844d7396b2 Fix mutex lock issues 2026-04-13 19:48:32 +10:00
56a8f09adf Support BMP and JPG conversion 2026-04-13 14:12:47 +10:00
3a4320f253 Add support to IMAQ conversion 2026-04-13 10:39:26 +10:00
749c7db3c6 Add support to IMAQ conversion 2026-04-12 21:55:09 +10:00
0a8aaed215 Add CPU/GPU gate and support new ANSALPR using OCR 2026-04-12 17:16:16 +10:00
27083a6530 Remove unused files 2026-04-12 05:39:36 +10:00
257145c429 Fix Intel ONNX runtime 2026-04-10 17:13:47 +10:00
eb863bf510 Support getEngine 2026-04-09 11:00:34 +10:00
eeb205779a Fix model optimisation 2026-04-09 08:09:02 +10:00
34854d87f4 Fix Uncode server API 2026-04-08 15:22:48 +10:00
69787b0ff0 Fix AMD and OpenVINO 2026-04-08 13:45:52 +10:00
a4a8caaa86 Fix mixed UTF16 issue (LabVIEW) and fix ANSFR for Intel 2026-04-08 08:47:10 +10:00
866e0282e2 Add more unicode functions 2026-04-07 08:53:53 +10:00
cb3e856a6e Add more unicode APIs 2026-04-07 07:59:46 +10:00
6d792ee4c0 Support unicode to get users/user APIs 2026-04-06 17:02:42 +10:00
b98aed21bf Support unicode APIs for LabVIEW 2026-04-06 14:20:43 +10:00
091a61d2be Fix Window search path for ANSLIB 2026-04-06 08:31:26 +10:00
f7cef5015a Fix ALPR pipeline. Ready for production 2026-04-05 11:55:37 +10:00
db089c3697 Use CPU resize before upload to GPU to remove PCIe bottleneck 2026-04-05 06:55:15 +10:00
98681f4da6 Use CPU resize before upload to GPU to remove PCIe bottleneck 2026-04-04 22:29:08 +11:00
e134ebdf15 Use software decoder by default 2026-04-04 20:19:54 +11:00
3a21026790 Disable NV12 path for ANSCV by default. Currenly use cv::Mat** directly 2026-04-04 10:09:47 +11:00
445abefebe first stable version 2026-04-03 15:52:21 +11:00