UnityのWWWでHTMLのレスポンスを受け取る
このブログの存在そのものを完全に忘却していた....
最近はUnityを触ることが多い、扱いが非常に楽だがMonoのC#が通常と異なる部分がいろいろある。
WWWもその一つ。(というよりUnityにしか入ってない機能)
UnityではWWWで外部通信を行うのが一般的っぽい。
やりたいこと
- WWWクラスでHTMLのレスポンスを受け取る(text or image or audio)
準備するもの
- Unity4.xかUnity5.x
実践
便利なもので、これだけで取得できます。
ネットでは、非同期処理のためにコルーチンで処理を一旦返しているサンプルが多かったのでその通りにします。
レスポンスが帰ってきたらResponceAction(WWW www)が実行されます。
さらに有難いことに、レスポンス結果が画像だったなら何もしなくてもWWW.textureにテクスチャデータがすでに入っています、ナンテコッタイ。
結果
- 簡単、便利、親切
- タイムアウトは別に実装必要
以上
Python + OpenCVでマウスクリック後の画面遷移判定をする
前々からpythonのOpenCVに興味があったので少し触ってみる
やりたいこと
準備する物
実践
処理の流れとしては以下のようなイメージ、基本的に345をループ実行する
- 一定間隔でスクショ画像を取得
- 予め保存してある画面情報と比較して閾値以上の画像を検索、現在の画面状態を把握する
- マウス移動&クリック
- 指定の遷移状態が確認できるまで待機
- 次のマウス操作
今回は外部設定ファイルにマウスクリック位置と、クリック後の画面状態のセットを登録し、それらを指定順番で実行する形式にしてみた・・・が適当に作りすぎて汚いコードになっちゃったので重要な部分の動きだけ抜粋
画像の比較サンプル
import cv2 as cv # 画像のロード img1 = cv.imread(filename1) img2 = cv.imread(filename2) # ヒストグラム作成 hist1 = cv.calcHist([img1],[0],None,[256],[0,256]) hist2 = cv.calcHist([img2],[0],None,[256],[0,256]) # この値が1.0に近いほど似た画像であるもよう value = cv.compareHist(hist1, hist2, 0)
画面キャプチャ
import ImageGrab def GetScreenCaptureImg(x, y, w, h) : # 指定領域をキャプチャ img = ImageGrab.grab((x,y,w,h)) img.save()
マウス操作
from ctypes import * user32 = windll.user32 def Move(x,y): user32.SetCursorPos(x,y) def Click(): user32.mouse_event(0x2,0,0,0,0)#押す user32.mouse_event(0x4,0,0,0,0)#離す
結果
- 誤判定だらけかと思いきや、なかなかの精度で画面遷移判定をしてくれたので満足。
- マウス操作だけのアプリと比べて画面遷移が確認できてから次のマウス操作を実行するため、タイミングのズレやラグが気にならない
- マウスのコントロールが取られるので他の作業ができない
以上
なんとなく気が向いたので
とりあえずアウトプットの場として使う予定。