Local Windows 11 OneOCR tool for DSH: `oneocr_recognize` returns OCR text and structured line/word polygons, confidence, rotation, and handwriting style.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:hawkhai/win11-oneocr
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Offline OCR engine extracted from the Windows 11 Snipping Tool, with full-featured C++ CLI, reusable DLL wrapper, and Python visualization.
Based on: https://b1tg.github.io/post/win11-oneocr/
DeepSeek Harness plugin
This repository can be installed as a DeepSeek Harness plugin:
dsh plugin add github:hawkhai/win11-oneocr
It registers oneocr_recognize, a model-facing tool that accepts a local image path and returns recognized text together with OneOCR's structured line/word polygons, confidence values, image angle, and handwriting style. The tool runs locally on Windows 11; image bytes are not sent to an external OCR service.
The bundle defaults to the prebuilt bin/ocr.exe and its adjacent runtime files. Override ocrBin, timeoutMs, or maxOutputBytes in the plugin row if needed.
Features
| Feature | Description |
|---|---|
| 8-point Bounding Box | 4-corner polygon bbox for lines and words (not just axis-aligned rect) |
| Word Confidence | Per-word recognition confidence score (0.0–1.0) |
| Image Angle | Detected rotation angle of the text in the image |
| Line Style | Handwritten vs. printed text classification with confidence |
| Resize Resolution | Configurable max internal resize before OCR (performance/accuracy trade-off) |
| Resource Release | Proper cleanup via ReleaseOcrResult, ReleaseOcrPipeline, etc. |
| Unicode Path | Full Unicode file path support via _wfopen in the DLL wrapper |
| Multi-image Batch | Process multiple images in one invocation |
| Plain Text Output | --text mode for pipe-friendly output (no JSON) |
| Raw Buffer OCR | ocrImageRaw() for in-memory BGRA pixel buffers (no file I/O) |
| Visualization | Python script with confidence-colored word boxes and style labels |
Prerequisites
- Windows 11 (tested on 23H2+)
- Snipping Tool 11.2409.25.0+
Copy these 3 files from the Snipping Tool installation folder into the same directory as ocr.exe:
oneocr.dlloneocr.onemodelonnxruntime.dll
Find the Snipping Tool folder:
Get-AppxPackage Microsoft.ScreenSketch | Select-Object -ExpandProperty InstallLocation
Example: C:\Program Files\WindowsApps\Microsoft.ScreenSketch_11.2409.25.0_x64__8wekyb3d8bbwe\SnippingTool
CLI Usage (ocr.exe)
ocr.exe <image1.png> [image2.jpg ...] [options]
Options
| Option | Description |
|---|---|
--text, -t |
Output plain text only (no JSON) |
--output, -o <file> |
Write JSON to specified file (default: <image>.json) |
--max-lines <n> |
Max recognition lines, 1–1000 (default 1000) |
--resize <WxH> |
Max internal resize resolution (e.g. 1152x768) |
--quiet, -q |
Suppress progress messages |
--help, -h |
Show help |
Examples
# Single image → JSON
ocr.exe screenshot.png
# Plain text output (pipe to file)
ocr.exe screenshot.png --text > result.txt
# Batch process
ocr.exe img1.png img2.jpg img3.bmp
# Custom options
ocr.exe photo.jpg --max-lines 50 --resize 800x600 -o result.json
JSON Output Format
{
"file": "test.png",
"image": { "width": 771, "height": 479, "step": 3084 },
"image_angle": 0.0643,
"line_count": 2,
"lines": [
{
"index": 0,
"text": "Hello World",
"bounding_box": [
13.0, 38.0, 458.0, 38.0,
458.0, 77.0, 13.0, 76.0
],
"style": { "type": "printed", "confidence": 0.035 },
"word_count": 2,
"words": [
{
"index": 0,
"text": "Hello",
"bounding_box": [
14.35, 39.70, 140.35, 41.31,
139.93, 73.42, 13.78, 74.09
],
"confidence": 0.987
}
]
}
]
}
DLL Wrapper (oneocr_wrapper.dll)
A reusable C DLL wrapper with 3 main APIs:
| Function | Description |
|---|---|
initModel(model_dir) |
Load DLL + model, initialize pipeline |
ocrImage(image_path, json, alloc) |
OCR an image file → JSON string |
ocrImageEx(image_path, json, alloc, max_lines, resize_w, resize_h) |
OCR with configurable options |
ocrImageRaw(pixel_data, w, h, step, json, alloc) |
OCR on raw BGRA pixel buffer |
releaseModel() |
Clean up all resources |
C++ Header-Only Usage (oneocr.h)
#include "oneocr.h"
OneOcr ocr; // loads oneocr_wrapper.dll
ocr.initModel(L"."); // directory with oneocr.dll + .onemodel
std::string json;
ocr.ocrImage(L"test.png", json); // basic OCR
ocr.ocrImageEx(L"test.png", json, 50); // max 50 lines
ocr.ocrImageRaw(bgra_ptr, w, h, json); // raw buffer OCR
Visualization (visualize.py)
python visualize.py <image_path> <json_path> [output_path]
Features:
- 8-point polygon bounding boxes (lines in red, words colored by confidence)
- Confidence score labels below each word
- Handwritten lines highlighted in orange, printed in red
- Image angle and line count overlay
Build
Requires: MSVC (Visual Studio), json.hpp (nlohmann/json), stb_image.h.
# Build CLI
cl /EHsc /O2 ocr.cpp /Fe:ocr.exe
# Build wrapper DLL
cl /EHsc /O2 /LD oneocr_wrapper.cpp /Fe:oneocr_wrapper.dll
# Build test
cl /EHsc /O2 oneocr_test.cpp /Fe:oneocr_test.exe
Other Implementations
| Directory | Language | Description |
|---|---|---|
oneocr/ |
Python | PyPI package with PIL/cv2 input, FastAPI web server |
oneocr-rs/ |
Rust | crates.io library with image crate, serde JSON |
oneocr-cli/ |
Rust | Minimal CLI, plain text output |
win11_oneocr_py/ |
Python | Basic ctypes script (original Python port) |
Credits
- b1tg - Original reverse engineering and C++ implementation
- AuroraWright/oneocr - Python package with web server
- wangfu91/oneocr-rs - Rust binding with full feature coverage
- Cecilia-pj/win11_oneocr_py - Original Python port
License
MIT
Links
More in this category
liustack/modlens★ 4100
Vision bridge for text-only models: paste an image, get structured JSON evidence (OCR, layout, semantics).
ysr666/dsh-vision-router★ 1128
Free vision for text-only agents: built-in keyless vision chain plus pixel tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots); paste an image to use it.
Anionex/dsh-vision-toolkit★ 887
Vision for text-only models: paste an image and the model switches to a Vision Toolkit variant for image Q&A, multi-image comparison, long-screenshot OCR, screenshot-to-UI reproduction, element grounding, and pixel diff. No API key by default — images are processed by the author-hosted free service, 100 per machine per day; configurable to your own provider.
dickpy/dsh-imagegen★ 99
AI image generation for the DSH Web GUI: text-to-image and image-to-image through a configurable OpenAI-compatible endpoint (gpt-image-2 / gpt-image-1 / dall-e-3), with an api_url/api_key settings card and a sidebar split-pane generation studio.
fandc520/dsh-comfyui★ 94
Drive a local or remote ComfyUI server from DeepSeek Harness: comfyui_run / comfyui_object_info / comfyui_workflow tools generate and edit images and videos, with a workflow library (graph extraction: per component / main flow / all), a load area with resolution auto-match, a live queue, SDXL and Wan 2.1 templates, a companion skill, and a same-origin media proxy.
sunxin-ai/dsh-design-qa★ 44
Design-fidelity QA for text-only models: a `deepseek_vision` tool borrows an eye from any OpenAI-compatible vision route, so the model can judge whether an implementation matches its mock — shipped with the benchmark behind that judgement (four fixtures, 23 injected defects, raw transcripts) and the questioning discipline it depends on.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.