win11-oneocr

by hawkhai

0 视觉与多模态github收录于 08-21

DSH 的本地 Windows 11 OneOCR 工具:`oneocr_recognize` 返回 OCR 文本,以及包含行/词多边形、置信度、旋转角度和手写体样式的结构化结果。

Local Windows 11 OneOCR tool for DSH: `oneocr_recognize` returns OCR text and structured line/word polygons, confidence, rotation, and handwriting style.

安装

dsh plugin --profile web add github:hawkhai/win11-oneocr

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

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.dll
  • oneocr.onemodel
  • onnxruntime.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

License

MIT

原始 README: https://github.com/hawkhai/win11-oneocr/blob/master/README.md ↗