Selenium×AIカメラで、ブラウザ音楽プレイヤーを自動操作【ラズパイ,Python,Picamera,Keras,OpenCV】


久々にまたラズパイガジェットを作りました。だいぶ以前に公開した、AIカメラプログラムを使用して、何か面白いことができないか考えていたところSeleniumと組み合わせた、ブラウザ音楽プレイヤーを思いつきました。

Seleniumは、Google Chrome(Chromium)やFireFoxなどのPCブラウザを自動操作することができる、オープンソースライブラリです。自分もWebアプリのテスト業務で数年前から使っている割と枯れた技術です。これとAIカメラを組み合わせて、ブラウザの音楽視聴サイト(YouTube Music)で音楽を自動で流したり、止めたりするプログラムを作ってみました。

プログラムの機能をざっくり説明すると
・本人がカメラに映っている場合に、YouTube Musicのプレイリストを再生
・本人がカメラに映っていない場合、プレイリスト再生を一時停止
という単純なものです。デスクに座っている間に音楽を自動再生させるちょっとした便利ガジェットとしてラズパイで実装してみました。

開発環境

■ハードウェア

・Raspberry Pi 

【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品

■OS

・Raspbian GNU/Linux 9.13 (stretch)

■プログラミング言語、主なライブラリとバージョン

・Python 3.5.3
・Selenium 2.53.2
・picamera 1.13
・OpenCV(cv2) 4.4.0
・Keras 2.3.1
・numpy 1.18.3
・theano 1.0.4

■ブラウザ

・Chromium
-ラズパイ環境で動作するブラウザ。Google Chromeの元になっているオープンソースブラウザです。

※ラズパイのAI環境開発は以下の本が参考になります。

カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで (ブルーバックス) Kindle版

プログラム

GitHubにサンプルプログラムを公開します。
https://github.com/kotetsu99/ai_music

■各プログラムの概要

(1) 01-face_detection.py: 顔検出プログラム
・画像から人物の顔を検出して、顔画像ファイルをディレクトリに保存。

(2) 02-cnn_face_train.py: 顔学習プログラム
・(1)で生成した顔画像をAIに学習させ、予測モデルを生成。
・予測モデルは、CIFAR-10 画像データセット向けのAIモデル(9層畳み込みネットワーク)の構成。本人と本人以外の2値分類モデルとする。

(3) 03-cnn_face_recognition.py: 顔認識プログラム
・(2)で生成した予測モデルを使って、テスト画像に対して顔認識を実行。

(4) 04-ai_camera.py: AIカメラプログラム
・(2)で生成した予測モデルを使って、カメラ映像上の人物をリアルタイムで顔認識。
・本人が顔認識された場合、YouTube Musicで音楽を再生。
・本人がカメラに映らなかった場合、音楽を一時停止。
・カメラ認識開始から制限時間後に、プログラムを自動終了。

(5) haarcascade_frontalface_alt.xml: 人物の正面顔検出 カスケード分類器
・(1)(3)(4)のプログラムで使用。OpenCVのパッケージに標準で付属している分類器。

(6) dataset: 画像データセット保存ディレクトリ
・01-org: 学習に使用する人物画像ファイル保存先。
  -person(本人), others(他人)の2フォルダあり。
・02-face: 01-orgから検出した顔画像ファイル保存先
  -person(本人), others(他人)の2フォルダあり。
・03-test: 顔認識テストに使用する人物画像ファイル保存先
・04-rec: 03-testに対する顔認識結果ファイル保存先

(7) model: 予測モデル保存ディレクトリ

プログラム使用方法

(4)以外のプログラムについては、↓のページの「プログラム使用方法」とほぼ同じです。ただし今回はPython3環境であるため、「python」コマンドを「python3」に変更して実行します。

https://nine-num-98.blogspot.com/2020/02/ai-camera-01.html

ここでは主に(4)のプログラムについて使用方法を説明します。Seleniumによるブラウザ操作を実装しているため、Selenium関連の設定が必要です。といっても、設定箇所は1つだけで、再生するプレイリストのURLを記述する箇所のみです。

# URL定数定義
PLAYLIST_URL = 'https://music.youtube.com/watch?v=0cGBTbjvwuo&list=RDAMVM0cGBTbjvwuo'
WEB_DRIVER = '/usr/bin/chromedriver'

この箇所です。ここのPLAYLIST_URLをYouTube Musicで流したいプレイリストURLに設定します。そのうえで、以下のコマンドを実行します。

$ python3 04-ai_camera.py model/face-model.h5

しばらくすると、Chromiumブラウザが開き、さらにカメラ映像を映したウィンドウがデスクトップ画面上に現れます。そして本人の顔が映ると、YouTube Musicのプレイリスト画面に遷移します。



↑のように、本人の顔がカメラに映ると赤枠と「person」という文字が顔の周りに表記されます。この間はYouTube Musicで音楽が再生され続けます。YouTube Musicの仕様では、再生中はプレイヤーの再生/一時停止ボタンが || (一時停止)の表示になります。
※↑のカメラ画像はイメージです。

ちなみに、ここで指定しているプレイリストは最初の曲以外はYouTube Musicが自動で選曲して作成したものです。最初の曲だけは自分で指定しているのですが、なんでこの曲選んでるかは、直近の過去記事見ればお分かりですね(笑)

この後、本人がカメラ映像に映らなくなった場合、再生が一時停止されます。


このように、プレイヤーの再生が止まります。YouTube Musicでは、一時停止中はボタンが▶(再生)の表示になります。また以下のように本人とは違う、別の人が映った場合も同様に、再生が一時停止されます。


以後、上記の流れでYouTube Musicプレイリストの再生/一時停止が自動で切り替えられます。顔を少し動かしただけで、再生が止まってしまったりと、使い勝手としては微妙なところがありますが、AIを利用したIoTガジェットの簡単な例として一つ作ってみました。

プログラムの解説は、以下の記事に記しています。参考になれば幸いです。
https://nine-num-98.blogspot.com/2021/04/ai-music-02.html

スポンサーリンク