流行りのReCallをLinuxでも使いたい！OpenRecallを試してみた

# はじめに
最近LLMの進化が激しいですよね。特にローカルで動くLLMの需要が高まっていると思います。
5月にはあのMicrosoftもローカルAIを利用した新機能「ReCall」を発表しました。

https://www.itmedia.co.jp/news/articles/2405/21/news095.html

スナップショットを数秒ごとに取得して内容を分析することで、操作履歴の検索を可能にした機能です。
とても魅力的ですが、公式サイトを見ると以下の機能が必須条件として挙げられていました。
> お使いの PC には、Recall の次の最小システム要件が必要です。
> - Copilot+ PC
> - 16 GB RAM
> - 8 つの論理プロセッサ
> - 256 GB のストレージ容量
>   - Recall を有効にするには、少なくとも 50 GB の空き容量が必要です
>   - デバイスのストレージ領域が 25 GB 未満になると、スクリーンショットを自動的に一時停止する

Copilot+ PCが必須となっており、使用ハードルは少し高めな印象を受けました。

# OpenRecallとは
「Recall」 は高性能なNPU[^1]が必要になり、かつ、マルチプラットフォームに非対応です。そんな「ReCall」をOS選ばず、NPU非搭載PCでも実行可能にしたのが`OpenRecall`になります。

https://github.com/openrecall/openrecall

これなら私の非力なUbuntuPCでも使えそうです。素晴らしきOSS精神！
# OpenRecallをPCに導入してみる
今回使用する環境は以下です。
- OS: Ubuntu 22.04 LTS
- CPU: AMD Ryzen 5 5600u
- Memory: 16GB

## 1. pipでOpenRecallをインストールする
OpenRecallはpythonで動作するためpip installを行います。
```terminal
$ python3 -m pip install --upgrade --no-cache-dir git+https://github.com/openrecall/openrecall.git
```
## 2. python3で実行
appを以下のコマンドで実行します。
```terminal
$ python3 -m openrecall.app
```

:::note warn
`ImportError: No module named '_sqlite3'`エラーが出た場合
- Ubuntuではデフォルトでsqlite3は入っていないため発生している
- `sudo apt ~`でsqliteパッケージをインストールしてから、再度pythonをインストールし直す必要がある
- 詳しくは[こちら](https://qiita.com/chatrate/items/bc37e3b7b303e834dd1e)
- pythonの再インストールは面倒であるため仮想環境の導入をおすすめする
:::

:::note warn
`Doctr`が見つからないエラーが出た場合
- `pip install python-doctr tf2onnx`でインストールする
:::

:::note warn
`mss.exception.ScreenShotError: XGetImage() failed`エラーが出た場合
- Ubuntu22.04は、X Window SystemではなくWaylandを採用している
- OpenRecallでは画面のスクリーンショットを取る際に`mss`というライブラリを使用している
- mssではlinuxの場合X Window Systemにしか対応しておらず、Waylandには未対応
  - そのため上手く実行できずクラッシュしていた
- issueでも同様の報告があった
  - https://github.com/BoboTiG/python-mss/issues/115
- Waylandのサポートを提案するissueも立っているがまだ未対応
  - https://github.com/BoboTiG/python-mss/issues/155
### 対応
- Ubuntu22.04のデフォルトディスプレイサーバをWaylandからX Window Systemに変更する
```terminal
$ sudo vim /etc/gdm3/custom.conf

---
[daemon]
# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=false <- コメントアウトを外す
---
```
:::

## 3. ローカルサーバーにアクセスする
http://localhost:8082 にアクセスすると、Recall機能が利用できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2605179/26c8a4b5-87b6-3976-9aa6-b4e1fe08b613.png)

すごく簡単ですね。

# 使ってみた所見
実際に私が使用してみた感想としては、以下になります。
- うろ覚えでみた記事を探したいときに今までは検索履歴から辿るしかなかったが、Recall機能でスクリーンショットとして確実に見つけることができるようになった
- 高性能なLLMではなく普通のOCRライブラリを利用しており、そのため動作は軽量だが検索性能が使い物にならなかった

あまり明確な用途を見つけることはできませんでしたが、仕事のPCに導入できれば割り込み後にタスクを再開するときにどこまでやっていたかを確認できる等の利点はあるように感じました。
スクリーンショットから読み取った内容をナレッジグラフで検索できる等の検索性能が向上すると、さらに用途の幅も広がってきそうです。

私の場合、業務PCはMacであり高性能であるため、OpenRecallではなくRewind.aiを使用すると思います。

# 終わりに
正直なところ、あったら便利な機能だとは思うのですが、これ単体で何かが劇的に変わったとは感じられませんでした。(ゴリゴリの高性能LLMが動けばまた変わってくるのかもです...)
とても革新的な機能をOSSで作っていただけたのはめちゃくちゃありがたいですし、良い経験になりました。

AIエージェントが勝手にReCall機能を使うようになってくると、ユーザの仕事や動作を肩代わり、もしくは閲覧履歴からタスクをこなしてくれる未来があるかもですね。

最後にHRBrainでは一緒に働いてくれる仲間を募集しています。

https://www.hrbrain.co.jp/recruit/career/

### 参考
https://support.microsoft.com/ja-jp/windows/recall-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E6%89%8B%E9%A0%86%E3%82%92%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%81%97%E7%9B%B4%E3%81%99-aa03f8a0-a78b-4b3e-b0a1-2eb8ac48701c

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0717

[^1]: 「Neural Processing unit（ニューラル プロセッシング・ユニット）」の略称で、AI（人工知能）を高速処理するために設計されたプロセッサのこと。「AIプロセッサ」とも呼ばれる。機械学習やディープラーニングに最適化されている。詳しくは[こちら](https://swri.jp/glossary/NPU)。