英語学習補助ソフトの作成 第一回ウィンドウキャプチャ
こんにちは、valogamer(仮称)です。初投稿です。
最近、英語を勉強していて、今の学習方法において、DeepL翻訳やGoogle画像検索、単語帳アプリAnkiを多用しています。しかし、手動で入力する手間が多く、効率が悪いと感じたので自前の学習補助ソフトを作成することにしました。
私はPythonを少しだけ触ったことがある程度のプログラミング初学者なので、本記事はあまり技術的な参考にはなりません!学んだことのメモぐらいの気持ちで書いくことをご了承ください!
目標
今回作成するアプリでは、ウィンドウキャプチャから英文を読み取り、英文の翻訳、画像検索、単語帳登録をワンクリックで実現し、英語の学習コストを下げることを目標とします。
英文の書かれたウィンドウの文字を読み取り、瞬時に全体を翻訳し、名詞などについてはワンクリックで画像検索して視覚的学習を補助。また難しい単語を自動でピックアップしワンクリックで単語帳に追加。最終的にはAnkiを丸パクリしたスマホアプリに単語帳に追加した単語を同期できるようにしたいと思っています。(↓ちなみにこんな感じにしたい。)
GDIのデバイスコンテキストを取得(失敗)
私はまともなアプリの1つも作ったことのない初心者なので、まずはGoogle様にやり方の教えを乞いて、以下のような記事を見つけました。
https://qiita.com/danupo/items/e196e0e07e704796cd42
試しにメモ帳をキャプチャして見ます・・・できた!
次にGoogle Chromeをキャプチャしてみます・・・できない!!!!!
原因は理解不足で詳しく説明できないのですが、プロセスによって描画方法が違うことが原因のようです。この方法ではwin32apiからプロセスごとのGDIのデバイスコンテキストなるものを取得して画像を作っているのですが、現在の多くのアプリでは描画処理にGDIではなくDirectXを通してGPU"が使われていて、ウィンドウキャプチャを取ってくるにはこっちのデータを取ってくる必要があるようです。
Windows Graphics capture API
調べていくと、Windows Graphics capture APIというものを使えばこれが実現できるとわかりました。しかしPythonで書かれた記事が見当たりません。仕方ないので一度も書いたことがありませんがC#でアプリ開発を進めることにしました。(ところでこのWindows Graphics capture API、意外と最近(2018年ごろ?)できたものらしく、それまではウィンドウキャプチャをどうやってやっていたのでしょうか?)
以下urlの一番下のほうをコピペして、ウィンドウキャプチャ(リアルタイムで動くやつ)をすることができました!!(動かすには書かれている通り、フロントエンドにボタンを追加する必要があります。)
終わりに
初めてのnote投稿でしたが、途中から誰の役に立つ記事なのかわからなくなってきて雑になってしまいました。ここまで真面目に読んでくれた方がいれば申し訳ありません。。。
今回は目標であったウィンドウキャプチャを取ることができました。次回はキャプチャしたプロセスを操作(ページをめくったりコピペや検索をしたり)をしていきたいと思っています。