WPF画像中の英語の長文を読むのがチョットつらい!英語ならまだしも中国語とか無理!そんな思いから、画面中の任意の場所をキャプチャして、キャプチャ範囲内の文字列をOCRして、OCR結果を機械翻訳するツールを作りました。CoreのWPFで作りました。こんな感じに動きます。ツールのデモ成果物GitHubに上げてます。github.com動かす際はImageOCR.App\app.configに下記4つの値を設定する必要があります。APIのEndPointなお、OCRのEndPointには?language=unk&amp;detectOrientation=trueあたりのQueryを。TranslationのEndPointには?api-version=3.0&amp;to=jaというQueryを付与したほうがよいかも。Serviceをプロビジョニングします。F0がアカウント毎に1個しか作れない点に注意です。CognitiveServiceのSKUがS0なのでお金がかかる点に注意です。WPFの設定で使用するのでメモっておきましょう。Docsを参考にしました。Docs的にはこちら?docs.microsoft.com以上で準備完了です。Docsを参考にOCRを試してみましょう。参考:クイックスタート参考:サンプル今回はMicrosoft.Azure.CognitiveServices.Vision.ComputerVisionを使用します。OCRはこんな感じに使います。imageFileStream);下記画像をOCRすると...OCR対象画像こんな感じのOcrResultが返ってきます。Docsを参考に機械翻訳を試してみます。TextはLibraryが用意されていないっぽいので、普通にRequestを投げて翻訳してもらいましょう。World翻訳結果LINQPadでDumpするとこんな感じです。※EndPointのQueryミスって日本語が2回表示されていますTranslation結果DumpWPFOCRと翻訳部分が動いたので、あとはWPFでテキトーにガワを作ります。Templateを使用してプロジェクトを作成します。この程度のアプリなのでCodeBehindにベタ書きでも良いとは思いますが、人はトンカチを持つと全てが釘に見えてしまうものです。注意点というか、ポイントをちょこっと書いておきます。指定範囲のみのキャプチャ指定した範囲のみをキャプチャしたいので、下記Blogのコードを使用させて頂きました。kaorun.hatenablog.com上記コードの作者さんの言う通り、デュアルディスプレイにある領域はキャプチャできなかったり色々と制限はありますが、今回の用途には十分すぎるので、ほんのチョッピリ手を加えて使用します。KeyやEndPointはapp.configに記載しています。ConfigurationManagerは既定ではExe名と同名のConfigファイルを読み込みます。今回はapp.configという名前でConfigファイルを作ったので、OpenMappedExeConfigurationでapp.configを指定しています。Vaultで管理しましょう。あと、XMLファイル内の&などの文字列はエスケープして記述する必要があるので注意。Dispose警察案件HttpClientを使いまわさずにDisposeしちゃってます。Dispose警察案件ですね。Docsdocs.microsoft.comSystem.DrawingBitmapクラスを使用するためにMicrosoft.Windows.Compatibilityを使用しています。www.hanselman.comImageに表示中の画像ファイルの更新Imageに表示中の画像はLockされている。Imageに表示するImageSourceはメモリにキャッシュした画像を表示する。高DPI対応のためにapp.manifestを追加しdpiAwarenessとdpiAwareを追加しました。APIは対象言語が英語かつ画像の背景色が単色なら精度が高いですね。背景がカラフルだと誤検出してしまうので、精度を上げるには画像をbinarizeしたり適宜フィルタリングした方がよいかも。あと、他言語が混ざるとつらい感じになってしまいます。