Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

civilian7/winrtOcr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

4 Commits

Repository files navigation

WinRT OCR

English | 한국어

Windows 내장 OCR 엔진(Windows.Media.Ocr)을 .NET 런타임 없이 사용할 수 있게 해주는 네이티브 C++ DLL(sc_ocr.dll)과 Delphi VCL 데모 애플리케이션입니다.

특징

  • 런타임 의존성 제로 — CRT 정적 링크 단일 DLL (약 175KB). .NET, VC 재배포 패키지, COM 등록 모두 불필요
  • x64 / x86 지원sc_ocr.dll (64비트), sc_ocr32.dll (32비트)
  • 평면 C API — UTF-16 + stdcall, Delphi·C·C# 등 어떤 언어에서도 호출 가능
  • 스레드 안전 — 내부 MTA 워커 스레드로 격리되어 호출 스레드의 COM 초기화가 필요 없음
  • Delphi 래퍼 포함SCOcr.pasTSCOcr 클래스로 한 줄 호출
  • headless CLI 포함winocr.exe 로 스크립트/배치에서 바로 OCR
  • OCR 엔진은 Windows 내장이므로 별도 학습 데이터·외부 라이브러리가 필요 없음

요구 사항

항목 내용
실행 Windows 10 (1507, 빌드 10240) 이상
OCR 언어 Windows 언어팩의 OCR 기능 설치 필요 (설정 → 시간 및 언어 → 언어)
DLL 빌드 Visual Studio 2022 (C++/WinRT, 헤더 온리)
데모 앱 빌드 Delphi 13 (Win64)

폴더 구조

├─ src\ Delphi 소스 (데모 앱 + SCOcr.pas 래퍼)
├─ cpp\ C++ DLL 소스 (sc_ocr.cpp, sc_ocr.def)
├─ bin\ 빌드 산출물 (exe, dll) — Release 에서 다운로드
├─ dcu\ Delphi 중간 산출물
└─ build_cpp.bat DLL 빌드 스크립트 (x64 + x86)

빌드

rem 1) C++ DLL (x64 + x86 동시 빌드 → bin\)
build_cpp.bat
rem 2) Delphi 데모 앱 (src\ 에서)
dcc64 -B -E..\bin -N0..\dcu WinRTOCR.dpr

명령줄 도구 (winocr)

GUI 없이 스크립트에서 사용할 수 있는 headless CLI 입니다. sc_ocr.dll 과 같은 폴더에 두고 실행합니다.

winocr scan.png rem 텍스트를 표준 출력으로 (파이프 가능)
winocr scan.png -l ko-KR -o out.txt rem 한국어 인식 후 UTF-8 파일 저장
winocr --list-langs rem 사용 가능한 OCR 언어 목록
winocr --help rem 사용법
옵션 설명
-i, --input <파일> 입력 이미지 (위치 인자로도 지정 가능)
-o, --output <파일> 결과를 UTF-8 파일로 저장 (생략 시 표준 출력)
-l, --lang <태그> OCR 언어 (BCP-47). 생략 시 사용자 프로필 언어
--list-langs 사용 가능한 OCR 언어 목록
-v, --version / -h, --help 버전 / 도움말

종료 코드: 0 성공 · 1 OCR 오류 · 2 사용법 오류

DLL API

모든 문자열은 UTF-16(wchar_t*), 호출 규약은 stdcall 입니다. 텍스트 반환 함수는 2단계 호출 패턴을 사용합니다: 버퍼에 null 을 넘기면 필요한 문자 수(널 제외)를 반환하고, 버퍼를 넘기면 복사 후 전체 길이를 반환합니다.

함수 설명
SC_OcrExtractText(imagePath, langCode, buffer, bufferSize) 이미지 파일에서 텍스트 추출. langCode 가 빈 문자열이면 사용자 프로필 언어 사용
SC_OcrGetAvailableLanguages(buffer, bufferSize) OCR 가능한 언어 태그 목록 (CRLF 구분)
SC_OcrIsLanguageSupported(langCode) 언어 지원 여부 (1 = 지원, 0 = 미지원)
SC_OcrGetLastError(buffer, bufferSize) 호출 스레드의 마지막 오류 메시지

오류 코드 (음수 반환값): -1 일반 오류 · -2 언어팩 미설치 · -3 엔진 생성 실패 · -4 잘못된 인자

Delphi 사용 예

uses
 SCOcr;
// 한국어 OCR (sc_ocr.dll 은 exe 와 같은 폴더에 배치)
var LText := TSCOcr.ExtractText('C:\images\sample.png', 'ko-KR');
// 시스템 기본 언어로 인식
var LAuto := TSCOcr.ExtractText('C:\images\sample.png');
// 사용 가능한 언어 확인
for var LTag in TSCOcr.GetAvailableLanguages do
begin
 Writeln(LTag);
end;

오류는 ESCOcrError 예외로 전달됩니다. 워커 스레드에서 호출해도 안전합니다.

C 사용 예

wchar_t buf[65536];
int len = SC_OcrExtractText(L"C:\\images\\sample.png", L"en-US", buf, 65536);
if (len < 0)
{
 wchar_t err[1024];
 SC_OcrGetLastError(err, 1024);
}

Windows Defender 오탐 안내

갓 빌드된 무서명 실행 파일은 Windows Defender의 머신러닝 휴리스틱이 멀웨어로 오탐(Trojan:Win32/Wacatac.A!ml 등)하여 자동 격리·삭제할 수 있습니다. "작은 무서명 콘솔 exe + 정적 링크 + 평판 없음"이라는 특징이 멀웨어 로더와 통계적으로 겹치기 때문입니다.

  • winocr.exe 는 OCR 본체를 정적 링크하지 않고 sc_ocr.dll동적 로드하는 구조라 일반적으로 오탐을 피합니다. 그래도 ML 모델 업데이트에 따라 재발할 수 있습니다.
  • 개발 중 파일이 사라지면 다음으로 확인·해결할 수 있습니다:
# 탐지 기록 확인
Get-MpThreatDetection | Where-Object { $_.Resources -match 'winrtOcr' }
# 프로젝트 폴더를 제외 경로로 등록 (관리자 PowerShell)
Add-MpPreference -ExclusionPath 'D:\PROJECTS\winrtOcr'

배포 시 근본 해결책은 코드 서명 인증서로 서명해 평판을 확보하는 것입니다.

라이선스

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /