惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Martin Fowler
Martin Fowler
博客园_首页
量子位
T
Tailwind CSS Blog
博客园 - Franky
G
Google Developers Blog
D
DataBreaches.Net
Vercel News
Vercel News
B
Blog
Recent Announcements
Recent Announcements
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
爱范儿
爱范儿
博客园 - 【当耐特】
The Cloudflare Blog
H
Help Net Security
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
C
Check Point Blog
有赞技术团队
有赞技术团队
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

Show HN

Show HN: AI agents for UK GDAD PCF roles and their skills The Two Pillars: Mixer Mode and Meta-Software in the Reorganization of Software Work After AI GitHub - JaiCode08/teleport-env What 1,000+ Harness Experiments Taught Me About Self-Improving Agents Show HN: Liiists, a Markdown-first, iOS and CLI list app SwiperTab – Get this Extension for 🦊 Firefox (en-US) GitHub - kouhxp/fftext: Summarize, explain, fact-check, or translate any text, URL, or file. No GPU. No cloud. One command GitHub - sweetpad-dev/sweetpad: Develop Swift/iOS projects using VSCode GitHub - dogmaticdev/IRON: IRON a.k.a. Intermediate Representation Object Notation is a Interpreter/Database that is used to create Programming Languages. GitHub - sjhalani7/vaen: Package your AI coding harness into a portable .agent file, and share it across repos, teams, & the community without ever having to copy-paste instructions, skills, MCP config, or secrets. Show HN: Gandalf the Grader Show HN: Citadeld – replay any CI failure locally from a single file GitHub - tdortman/cuSBF: High-Performance GPU Super Bloom Filter coral-ai/claude-code-token-xray at main · Coral-Bricks-AI/coral-ai GitHub - ulyssestenn/funes: Funes is a Git-based framework for LLM-managed knowledge work: an AI Librarian ingests raw sources, builds an interlinked Markdown knowledge base, and uses it to produce cited reports, analyses, and other outputs. GitHub - ThatXliner/gah: Git Add Hunk, built for agents to use GitHub - harmont-dev/harmont-cli: Command-line client for the Harmont CI platform GitHub - brooksmcmillin/mcp-authflow: OAuth 2.0 Authorization Server framework for MCP servers GitHub - javaid-codes/audit-supply-chain-agents GitHub - amorey/gochan: A small library of common channel architectures for Go, inspired by Rust GitHub - arifozgun/OpenGem: Free, Open-Source AI API Gateway with Gemini, OpenAI & Anthropic Compatibility in 1 file GitHub - Pranesh950/BioPetals: 🌸 Run BIOxAI models at home, BitTorrent-style. Fine-tuning and inference up to 10x faster than offloading GitHub - cnguyen14/bounty-doctor: Diagnose a GitHub bounty issue before you waste hours: detects honeypot scam repos, AI-bot attempt swarms, and stale contests. Show HN: CoreMCP – MCP Server for On-Prem DBs Show HN: KittyHTML – Render HTML/CSS as an inline image in your terminal GitHub - bingud/filemat: Web-based file manager Show HN: TruthLens – Free multi-signal deepfake image detector GitHub - apexlocal-jz/claude-usage-tray: Windows system-tray app showing your Claude Code rate-limit usage at a glance. Zero deps, ~300 lines of PowerShell. Cross-IDE (works regardless of VS Code, Cursor, plain terminal). Release v0.1.2.1 · kouhxp/yapsnap GitHub - noopolis/moltnet: Self-hostable chat network for AI agents. Pre-built bridges for Claude Code, Codex, and the Claws. Rooms, DMs, history. No Slack bots, no Matrix, no glue code.
GitHub - BrugolaOvoidale/Visical: A cross-platform tool f...
BrugolaOvoid · 2026-06-15 · via Show HN

A cross-platform C++ application for camera calibration with modular quality evaluation and multi-source image acquisition.


Introduction • Features • Installation • Quick Start • Architecture • License

C++ OpenCV wxWidgets Platform

Introduction

Visical is a cross-platform camera calibration tool built with OpenCV and wxWidgets. It combines a OpenCV-driven calibration pipeline with a non-blocking evaluation framework, where calibration can proceed even if individual evaluations fail. In this design, OpenCV remains the authoritative source of the process, while evaluation acts as an independent, quality-assessment layer.

Features

  • Multi-source acquisition - load images from disk, capture from webcams, or connect to GigE/USB3 Vision cameras via Aravis.
  • Full calibration pipeline - OpenCV-driven board detection, pose estimation, and camera optimization in a single workflow.
    • Supports single-camera calibration. Stereo and multi-camera setups are currently out of scope.
    • Supports chessboard and circles grid patterns.
  • Modular evaluation framework - independent quality plugins assess boards and calibration results. Plugins are independently enabled, disabled, configured, and persisted as JSON; covers individual boards, board sequence, and final calibration metrics
  • Cross-platform - runs on Linux and Windows, built with C++23, CMake, and vcpkg

Installation

Quick Installation (Recommended)

Prebuilt binaries are available for supported platforms through the GitHub Releases page.

  1. Open the repository's Releases page.
  2. Download the latest package for your platform.
  3. Extract the archive.
  4. Launch Visical.

No compilation or dependency installation is required.

Build from Source (Advanced)

This project uses CMake as its build system, with configuration managed through CMakePresets.json. Dependencies are handled via vcpkg, defined in vcpkg.json.

The project is primarily developed and tested with Clang, but other C++ compilers may work with minimal adjustments.


Prerequisites

Before building, ensure you have the following installed:

  • CMake (≥ 3.20 recommended)
  • Clang (or another C++23-compatible compiler)
  • Git
  • vcpkg

Setup vcpkg

If vcpkg is not already installed:

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh   # Linux
.bootstrap-vcpkg.bat   # Windows

Make sure that environment variable VCPKG_ROOT is correctly set.


Clone the Repository

git clone https://github.com/BrugolaOvoidale/Visical.git
cd Visical

Install Dependencies

Dependencies are automatically resolved via vcpkg.json during CMake configuration.


Configure & Build

Using CMake presets (recommended):

cmake --preset <preset-name>
cmake --build --preset <preset-name>

To list available presets:

Alternatively, you can configure manually:

cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
cmake --build build

Notes

On Linux, vcpkg may not be able to install all third-party dependencies automatically. If this happens, install the missing dependencies manually. Check the CMake configuration output for details.


Quick Start

Before starting, make sure your calibration board is properly printed and mounted. Refer to the official OpenCV guide: Create Calibration Pattern. Mount it rigidly on a flat surface before acquisition.

  • Configure - on the Setup page, set the image size in pixels ("Camera intrinsics" box). Then navigate to the Detection page → Setup sub-page, choose the image source, and set the board parameters ("Detection parameters" box).
  • Detect - navigate to the Detection sub-page and load images using the folder icon. The app will display images on the left and detection and evaluation results on the right.

  • Evaluate - quality assessments per board and per sequence are also displayed.

  • Calibrate - once satisfied with the dataset, click "Accept dataset": Visical will automatically move to the Calibration page, run the calibration, and return the camera parameters, evaluation results, and the option to see the images undistorted.

  • Save - export the calibration result to a JSON file using the save button on the left.

Example of a calibration result in a JSON file:

{
    "camera": {
        "focal_length_x": 3778.998517383195,
        "focal_length_y": 3795.4120564419795,
        "principal_point_x": 550.0582420918876,
        "principal_point_y": 648.8049607977425
    },
    "distortion_model": {
        "standard": {
            "k1": -0.39599703363377464,
            "k2": 1.044774916481398,
            "p1": 0.0007796825585351178,
            "p2": 0.0009423617956795151,
            "k3": -9.679592041202422
        }
    },
    "cameraModel": {
        "reprojectionError": 0.14116148019896574
    }
}

Architecture

Visical is organized into four layers:

  • Acquisition: where images are loaded or grabbed, ready to be analyzed by the board detector.
  • Detection: where OpenCV will try to find board on images and estimate their pose.
  • Calibration: where OpenCV will optimize the camera using detected boards.
  • Evaluation: runs along both Detection and Calibration layers, evaluating quality of detected boards and calibration results. It behaves as a non-authoritative guide, giving only advice to get a good calibration, but does not block it, even if evaluations fails.

Acquisition Layer

Visical supports two image acquisition modes:

  • Disk loading - import existing images from the filesystem for offline calibration workflows.
  • Live camera capture - acquire images directly from hardware:
    • GenICam-compliant cameras via Aravis.
    • Webcams via OpenCV's VideoCapture interface.

Detection Layer

During detection, OpenCV will try to find a board on image and estimate its pose. The Visical system will store all detection result (found or not), to allow re-detection or re-evaluation.

Calibration Layer

After collecting a dataset of boards, Visical will run calibration using only detected board. This is the only constraint by OpenCV, boards with failed evaluation are still used.

Evaluation Framework

Quality evaluation is organized around a set of modular, composable plugins that can assess:

  • Single detected board - evaluates the geometric quality of an individual detected calibration board.
  • Detected board sequence - assesses the collected board set as a whole.
  • Single calibrated board - inspects each board's contribution to the final calibration result.
  • Calibration result - evaluates the calibration outcome through reprojection errors and related metrics.

Each plugin is independent and can be enabled, disabled, configured and saved in JSON files. The evaluation system is intentionally decoupled from the calibration pipeline, in order to keep OpenCV as the only authoritative source of the calibration process.

Examples

The Constrast check calculates contrast metrics to ensure that markers are sufficiently distinguishable from the background.

The FOV Coverage check analyzes the board sequence to determine if the detected points sufficiently cover the Field of View (FOV).


Contributing

Feedback and bug reports are very welcome.

Reporting Issues

If you encounter a bug or unexpected behavior, please open an issue and include:

  • A clear description of the problem
  • Steps to reproduce it
  • Your platform (Linux / Windows) and compiler version
  • Any relevant error output or screenshots

Pull Requests

If you'd like to contribute code, please open an issue first to discuss the change. This avoids wasted effort on PRs that may not align with the project's direction.


Limitations & Roadmap

Visical is actively developed but currently scoped to a specific set of use cases. The following lists what is not yet supported and what may be addressed in the future.

Current Limitations

  • Single-camera only — stereo and multi-camera calibration setups are not supported. Each calibration session produces intrinsics for one camera.
  • Chessboard and circles grid only — ArUco markers, ChArUco boards, and other OpenCV-supported patterns are not yet available in the detection pipeline.

Possible Future Directions

These are not commitments — just honest candidates for future work based on current gaps:

  • Stereo calibration — extending the pipeline to support camera pairs and extrinsic estimation between them.
  • Additional board patterns — ArUco and ChArUco support in particular, since they are more robust under partial occlusion and in low-texture scenes.

Contributions addressing any of the above are welcome. See Contributing.


License

This project is licensed under the Apache License 2.0.

You may use, distribute, and modify this software under the terms of the Apache 2.0 license. See the LICENSE file for the full license text.