iOSアプリ「Pyto」
きっかけはTwitterでフォローしている @robo8080 さんの以下ツイートでした。
iPhone + Pyto + OpenCVで、画像から顔を検出して笑い男を上書き😁 pic.twitter.com/U5GOtNkQGy
— robo8080 (@robo8080) June 7, 2020
これですが、以前から@robo8080 さんに、iOSアプリの「Pyto」というiPhone/iPad上でPython開発ができる(しかもOpenCVまで動く)ということを聞いていて気になっていたのですよね。有料ということと、iPhoneだけだと開発が難しそうということで二の足を踏んでいたのですが、やはり百聞は一見に如かずですね。デモをみてたまらず買ってしまいました。
自分が買ったときは1200円くらいでした。
「Pyto」を使ったiPhoneカメラの顔の上書きアプリ
早速真似して作ってみました。顔を上書きする、いわゆる「笑い男」アプリですね。
.@robo8080 さんのこれに触発されてiPhoneにPyto入れてOpenCVで自分のアイコンで顔を上書きしてみた。フリー素材は@monestar さんです!
— からあげ (@karaage0703) June 7, 2020
Pythonで手軽にiPhoneカメラアプリ作れるの良いですね。顔より大きい画像を上書きするのが意外にめんどくさかった。 https://t.co/T9rOUAoTgZ pic.twitter.com/R9mk1Q5R45
Pythonで顔認識は、以下記事に書いたようにOpenCVさえあれば簡単にできるので、1時間くらいで完成しました。
iPhoneのカメラアプリがこれだけ手軽にPythonで書けちゃうのは楽しいし感動ですね。Pyto良いです!
ソースコードはGitHubで公開しています。PythonとOpenCVが使えればPC上でも動きますので気軽に試してみてください(ただし、後述しますがPC上だと赤と青の色が入れ替わってしまいます)。
「Pyto」でカメラアプリを開発する方法
PytoでPython開発する上で多少注意しないといけないポイントやコツがあるので、メモがわりにまとめておきます。
コードを書くときはメモアプリやタスク管理ソフトからのコピペが便利
特にiPhoneで開発するときiPhone上でコード書くのは辛いです。PCでコードを書いてコピペするのが一番楽です。
私はタスク管理サービスの「Microsoft To Do」を活用しました。PC上でコピペしたコードがすぐiPhoneに同期されるので、そこからiPhone上でPytoにコピペをします。
To Doでコピペしている様子
To Doに関して詳細は以下記事参照ください。
もちろん、iPhone標準のメモアプリや他のお好みのアプリでも良いと思います。
画像ファイルを「Pyto」で使用する方法
今回は自分のアイコン画像を上書きするので、画像ファイルをiPhoneの「Pyto」アプリのフォルダに送る必要があります。ファイルを送るには、iTunesでiPhoneに接続して「Pyto」フォルダを選択してファイルを追加します。あとは、以下のように「Pyto」フォルダ上に実行するソースコードを作成します。最終的にソースコードと画像ファイルが同じ場所にあればOKです。
Argumentsでフロントカメラとバックカメラを切り替える
右下の設定アイコンをクリックすると、プログラムのArguments(引数)を設定できます。「Pyto」のカメラアプリのサンプルコードはデフォルトではフロントカメラを使用しますが、Argumentsに0を渡すとバックカメラを使用するようになります。
Argumentsを使って、色々ソフトの挙動を変えることもできます。サンプルのソースコードをみれば使い方は分かると思います。
cv2.waitKey
は動かない
PCでは、環境によってOpenCVのカメラ表示のループを回す際に以下のようにcv2.waitKey
を設定しないと表示されないケースがあります。ただ「Pyto」だとエラーになるので、以下のようにtryで囲めばPCでもPyto上でも動くソフトになります。
try: if cv2.waitKey(1) == 27: break
RGBとBGRの並び
OpenCVの場合、RGBの並びがBGRとなることはよく知られていますが、Pytoの場合、何故か最後の表示のときはBGRでなくてRGBの並びにしないといけません。RGBを入れ替えるのは以下コマンドです。
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
サンプルアプリの通り、imshow
の前に実行すればよいだけなのですがPC上で同じプログラムを実行すると色のRとBが入れ替わることになるので注意しましょう。気になる人は「Arguments」を使ってうまくPCとPytoで切り替えるようにすると良いと思います。
まとめ
iOSアプリの「Pyto」を使ってiPhoneで動くカメラアプリを作ってみました。iPhoneのカメラアプリは、昔作りたいなと思ってチャレンジしことあるのですが、開発環境を構築したり、Appleに申請を送ったりしているだけで力尽きて、結局Appleにお布施だけ支払って挫折した記憶があります。それが、今や1日もかからずPythonで手軽に開発できるのは良いですよね。もちろん、デザインに凝ったりは難しいですし、実際のカメラアプリとしてリリースすることはできませんが、プロトタイプ・デモ・個人用途なら十分なポテンシャルがあると思います。
さらにOpenCVはOpen CV DNNというディープラーニングの機能もあるので、ディープラーニングを使用したカメラアプリとかも作れるようです。そちらも気が向いたらいずれ試してみたいなと思います。
というわけでiPhone/iPadで手軽にカメラアプリ作りたいPython使いの方には「Pyto」おすすめです!
関連記事
変更履歴
- 2020/10/06 文章を微修正