Windows PC + SikuliX / ChatGPT Vision を活用したPC自動操作

---

## **はじめに**

Raspberry Pi 5 を使って、別端末を遠隔操作する手法を別記事で紹介しましたが、

- もし余っているWindows PCがあれば、Raspberry Pi 5 を使わなくても同等の構成が組めます。  
- Windows上で、HDMIキャプチャ・画像解析・AI処理、を担当し、操作指示を Raspberry Pi Zero 2 W へ gRPC+protobuf で送ることで、別端末を自動操作する仕組みを構築できます。  

Raspberry Pi Zero 2 W によるHIDエミュレーションの詳しい設定、マウスのキャリブレーションAPI、ChatGPTのプロンプトの書き方、などは別記事を参照いただき、本記事では、Windows側のSikuliX活用や構成全体の流れをメインに解説します。

---

## **できること＆構成のポイント**

1. **HDMIキャプチャ**で別端末の画面を**Windows PC**へ取り込む。  
2. **SikuliX / Python (OpenCV) / ChatGPT Vision**を使い、「ボタンをクリック」「テキスト入力」などの操作指示を作成。  
3. **Raspberry Pi Zero 2 W**がUSB HID（キーボード/マウス）として別端末に接続され、実際の入力を送る。  
4. **HDMIキャプチャデバイスのパススルー**機能を使えば、**モニターにも同時出力**して、手動操作やデバッグが容易。

Windows PCを使うメリットとして、**豊富なツール・高い処理能力**を活かせる点が挙げられます。SikuliXやOpenCVのセットアップも簡単で、Pi Zero単体で画像解析するより高速かつ拡張性が高いです。

---

## **全体構成イメージ**

```mermaid
flowchart LR
    subgraph Target PC
    A[操作対象<br>の別端末]
    end

    subgraph Raspberry Pi Zero 2 W
    B[HID<br>キーボード/マウス<br>エミュレーション<br>別記事参照]
    end

    A -- HDMI --> C[HDMI<br>キャプチャ<br>デバイス] -- HDMI<br>Pass<br>Through --> H[モニター]
    B -- USB<br>HID --> A
    C -- USB3 --> D[画面解析<br>SikuliX<br>OpenCV<br>ChatGPT Vision]

    subgraph Windows PC
    D --> E[gRPC/HTTP<br>クライアント<br>操作指示]
    end

    B <-- ネットワーク --> E
```

1. **別端末**  
   - Raspberry Pi Zero 2 W がUSB接続され、キーボード/マウスを仮想的にエミュレート  
   - HDMI出力をキャプチャデバイスへ  
2. **HDMIキャプチャデバイス**  
   - **Windows PC**にUSB接続して映像を取り込み  
   - パススルー出力端子から**モニター**へも映像を同時出力  
3. **Windows PC**  
   - キャプチャした映像を**SikuliX / OpenCV / ChatGPT Vision**で解析  
   - 得られた操作指示（クリック座標、入力文字列など）をPi Zero 2 Wへ送信  
4. **Raspberry Pi Zero 2 W**  
   - HIDエミュレーション（マウス＆キーボード）部分は**別記事**で詳細解説

---

## **1. WindowsでのHDMIキャプチャ**

### 1-1. キャプチャデバイスとソフト
- 一般的な**USB接続HDMIキャプチャボード**(UVC対応)をWindowsに挿す  
- ドライバをインストールすれば、**OBS Studio**や専用ビューワソフトで画面を確認可能  
- そのプレビュー画面をSikuliXが監視したり、OpenCVでフレーム取得し分析できる

### 1-2. パススルー出力とモニター
- HDMIキャプチャデバイスによっては**パススルー端子**を備え、入力された映像をそのままモニターへ出力可能  
- これにより、**別端末の画面をリアルタイムでモニター**で見ながら、Windows PCには解析用の映像を送れる  
- 手動操作やデバッグ時には大変便利

### 1-3. 遅延と解像度
- 一般的に**数フレーム（16～100ms程度）の遅延**が発生  
- 1080p@60fps等の高解像度で負荷が大きい場合は、OBSやデバイス設定で解像度/フレームレートを調整する

---

## **2. SikuliX / Python(OpenCV) / ChatGPT Vision の活用**

### 2-1. SikuliX
- **画像パターン検索**が強力  
  - たとえば`find("login_button.png")`でボタン画像を検出し、`click()`で仮想クリック  
- **OCR**（Tesseractベース）の機能も搭載  
- WindowsにJavaランタイムを導入し、`sikulixide-2.x.x.jar`を実行するだけで利用可能  
- **Pythonモード**に切り替えれば、Pythonに近い文法でスクリプトが書ける

### 2-2. Python + OpenCV で前処理
- ノイズが多い映像や特殊な解析が必要な場合、**OpenCV**を活用  
- 例: ノイズ除去、閾値処理、輪郭検出などで、SikuliXのマッチング精度を向上  
- **ChatGPT Vision**への送信用の画像を加工してOCR精度を上げる、などの使い方もある

### 2-3. ChatGPT Vision
- **高度なOCRやエラー文の理解**に効果的  
- 画面上に複雑な文章や多言語UIがあっても、**自然言語で解析し、要約や座標情報を返す**  
- Windows上でPythonスクリプトを走らせて、HTTPリクエストで画像 + プロンプトを送信  
- 応答をSikuliXスクリプトと連携し、操作フローを柔軟に分岐

---

## **3. Raspberry Pi Zero 2 W への操作指示**

### 3-1. ネットワーク通信の実装
- Windows PCが**クライアント**として「クリックしてください」「文字を入力してください」などをPi Zero 2 Wへ送る  
- Pi Zero 2 Wは**サーバー**(HTTP, gRPC, etc.)として待ち受け、USB HID経由で別端末に入力をエミュレート  
- **HIDエミュレーションの具体的設定**（ガジェットモードの有効化など）は**別記事**を参照

### 3-2. 操作フロー例
1. WindowsのSikuliXがキャプチャ映像から「login_button.png」を見つける  
2. `POST /click` (x, y 座標)をPi Zeroへ送信  
3. Pi ZeroがUSB経由で別端末にマウス操作を実行

---

## **4. 実装サンプル（概念）**

### 4-1. SikuliXスクリプト（Windows側）

```python
# sikuli_main.py (Pythonモード)
from sikuli import *
import requests

API_URL = "http://raspberrypi-zero2w.local:5000"  # Pi Zeroのサーバー

def click_on_image(img):
    m = find(img)
    center = m.getTarget()
    x, y = center.x, center.y
    # Pi Zeroへクリック指示
    requests.post(f"{API_URL}/click", json={"x": x, "y": y})

# ログイン例
click_on_image("login_button.png")
type("username")
type(Key.TAB)
type("password")
click_on_image("submit_button.png")
```

- `find("login_button.png")` が画面内でボタン画像を検索  
- `click_on_image()` 関数でPi Zeroへ座標を送信し、USBマウス操作を代行

### 4-2. Pi Zero 2 W側 (別記事参照)
- FlaskやgRPCサーバーを起動し、`/click`などのAPIで操作指示を受け取り  
- pyusb等でUSB HIDに反映し、別端末にマウス/キーボード入力する

---

## **5. メリット & デメリット**

### 5-1. メリット
1. **SikuliXでの手軽な画像検索・操作**  
   - GUI自動化が数行で実装可能  
2. **Windows環境の高い処理能力**  
   - OpenCVやChatGPT Visionを組み合わせても処理が軽い  
3. **Pi Zero 2 WでUSB HID**  
   - Windowsだけでは難しいUSBガジェットモードをPi Zeroが担当  
4. **余っているWindowsマシン活用**  
   - 新たに高性能なRaspberry Piを買わなくてもOK  
5. **パススルー出力でモニターにも映像**  
   - 手元で別端末の画面を直接見ながらデバッグできる

### 5-2. デメリット
1. **ネットワーク通信の実装が必要**  
   - Windows→Pi Zero間でHTTP/gRPCなど最低限の通信部分を自作  
2. **遅延**  
   - HDMIキャプチャのフレーム遅れ + ネットワーク越しの指示 + USB HID適用、と多段遅延  
3. **セットアップ・検証手間**  
   - Java環境やキャプチャドライバ、Pi ZeroでのHID設定など、初回の導入に時間がかかる

---

## **6. よくある質問（FAQ）**

**Q1. HIDエミュレーションの詳細はどうやるの？**  
A1. **別記事を参照**してください。Raspberry Pi Zero 2 WでUSBマウス/キーボードをガジェットモードで有効化し、Pythonスクリプト等で入力イベントを送る方法が一般的です。

**Q2. Windows PCだけでUSB HIDデバイス化できない？**  
A2. 基本的にWindowsはUSBホストとして動作するため、デバイス（ガジェットモード）側になるのは難しいです。よってPi Zeroのほうが現実的です。

**Q3. HDMIキャプチャによる遅延はどのくらい？**  
A3. 製品によりますが1～数フレーム（16～100ms程度）。リアルタイム性が必要な操作には注意が必要です。

**Q4. SikuliXだけでOCRも可能？**  
A4. はい、簡易OCRを内蔵しています。精度が足りない場合はOpenCV＋TesseractやChatGPT Vision APIを検討してください。

**Q5. MacやLinuxでも似た構成は可能？**  
A5. はい。HDMIキャプチャができれば同じアイデアで実装可能です。ここではWindows PCが余っているという想定です。

**Q6. スマートフォンやタブレットを操作したい場合は？**  
A6. USBホスト/デバイスの対応や解像度の扱いなどで複雑になります。PCや機器向けの構成が一番スムーズです。

**Q7. マウスのキャリブレーション方法やgRPCのAPI定義、ChatGPT Vision APIのプロンプト例は？**  
A7. これらも**別記事**で詳しく解説しています。座標の補正計算やメッセージ定義、自然言語プロンプトの書き方などを確認してください。

---

## **7. まとめ**

- **Raspberry Pi Zero 2 W (HID) + Windows PC (SikuliX / OpenCV / ChatGPT Vision)** の組み合わせで、  
  1. 別端末の画面を**HDMIキャプチャ**（パススルーでモニターにも出力）  
  2. Windowsで**画像パターン検索/AI解析**  
  3. **Pi Zero**が仮想マウス/キーボードで別端末に操作入力  
  という分散構成が実現できます。

- Windows PCを使うことで、**SikuliXの簡単操作・OpenCVの高度解析・ChatGPT VisionのAI処理**を軽快に回せるのが大きな利点です。  
- **HIDエミュレーション**に必要なUSBガジェットモードは、**Pi Zero 2 W**が担当するため、Windowsでは難しいUSBデバイス化問題を回避できます。

余っているWindowsマシンのパワーを活かし、Pi ZeroをHIDエミュレーターとして組み合わせることで、多彩なUI自動化や遠隔操作が可能になります。ぜひお試しください！

---

## **参考リンク**

- [SikuliX公式サイト](https://sikulix.com/)  
- [OpenCV公式サイト](https://opencv.org/)  
- [ChatGPT Vision (OpenAI公式)](https://openai.com/blog/chatgpt-vision/)  
- [OBS Studio](https://obsproject.com/) （WindowsでのHDMIキャプチャプレビューに便利）  
- **Raspberry Pi Zero 2 W でのHIDエミュレーション**  
  - 別記事参照
- **マウスキャリブレーション / gRPC API / ChatGPT Visionプロンプト例**  
  - 別記事参照

---

以上