LoginSignup
0
5

More than 3 years have passed since last update.

Windows .NET の OCR を使ってビルドするまでの手順 (2020年版)

Last updated at Posted at 2020-01-04

何年か前にミクミンPのtweet https://twitter.com/ksasao/status/928643759822086144 によりWindows OCR (Windows.Media.Ocr) の存在を知り、今年になって突然思い出したので試してみました。

image.png

ビルドできるようになるまでに無用な手間が多かったので、それの記録です。コードは参考コードそのまま動かしただけなので、この記事内に独自の情報はありません。

手順概要

  • .csproj ファイルに主導で TargetPlatformVersion を追加
  • Windowsのアセンブリ情報がVisual Studioから参照できるように細工
  • C#プロジェクトの参照設定で Windows → コア から WinRT 関係のアセンブリを参照
  • 必要なdllを参照
  • 非同期周りをどうにかするコードを用意
  • (準備完了。あとはコードを書くだけ)

参考にした資料

手順詳細

.csproj ファイルに主導で TargetPlatformVersion を追加

資料[2] より。
C#プロジェクトファイルをテキストエディタで開いて、それっぽい数値で追加。
image.png

Windowsのアセンブリ情報がVisual Studioから参照できるように細工

Windows 10 の 1903 で起きた問題らしいので、いずれ解決されて不要な手順になりそう。
資料[4] ではコピーしているけど、重複するのも微妙なので手元では system32/WinMetadata へのシンボリックリンクを SysWOW64/WinMetaqdata として作成。

C#プロジェクトの参照設定で Windows → コア から WinRT 関係のアセンブリを参照

ここまでの手順で参照できるようになっているはずなので、資料[2] そのままの手順でいけるはず。

必要なdllを参照

これも 資料[2] そのまま。参照マネージャーでなぜか「OK」の左にある「参照」ボタンから System.Runtime.WindowsRuntime.dll を探して選択します。
image.png
C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETCore/(.NETのバージョン)/System.Runtime.WindowsRuntime.dll みたいな場所にあるはず。

非同期周りをどうにかするコードを用意

資料[3] を見ると System.WindowsRuntimeSystemExtensions がうまくやってくれそうなことを書いてあるけど、これはどうやって使うのか謎で検索しても全然情報がありません。資料[2] でも 「うまくいかないので自前で作る」 とあるので、そういうものなのでしょうか。資料[2] 「GetAwaiter メソッドを自作で拡張する」にある TaskEx クラスと同等のものを作りましょう。

これでようやく資料[1]のサンプルコード、 await ocrEngine.RecognizeAsync(bitmap) あたりがコンパイル、ビルドできるようになります。スタート地点です。

0
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5