前の10件 | -
Android StudioでFire TV Stickのアプリ開発 [Android]
Fire TV Stick(4Kじゃないほう)を手に入れたのでいろいろ調べているうちに
初Androidマシンを手に入れたことに気づいた。
いくつかのアプリのインストールからAndroid Studioをインストールして
Androidアプリ開発を試して、実際にFire TV Stickへインストールして
実行するまでのメモです。
まずは Fire TV Stickに入れたアプリ。
1. AirReciever (iPhoneからの画面ミラー)
有料ですがiPhoneの画面ミラーが便利です。
検索画面から普通にインストール可能。
2. VLC
無料の動画再生ソフト。
家にはラズパイ上で動いているDLNAサーバーがあるのでそこに接続して再生できるのが良い。
検索画面から普通にインストール可能。
3. KODI
無料の動画再生ソフト。
普通にアプリのインストールは出来ないので、PCにadbLinkをインストールして、そこからFire TV Stickへインストールしました。
ネットでインストール方法を探すとES File Explorerを使う方法が出てくるけど、よく調べるとマルウェアっぽいのでやめたほうが良さそうな雰囲気。
ここからはPC上でのアプリ開発と、作ったアプリをFire TV Stickへインストールする方法。
1. Android Studio (PC)
ここからダウンロードしてインストールします。
Fire TV Stick向けにアプリ開発をするための注意点としては、
Fire TV StickのOSが Android 5.1 (Lolipop) ベースなので、
Minimum API level は "API 22: Android 5.1 (Lolipop) に合わせて、
実行エミュレータ環境も Virtual Device に "Android TV (720p) API 22" を選択しておくこと。
また、Kotlinを選択しておくことで、アプリ開発はJavaではなくKotlinで開発できる。
実際のアプリ開発手順は省略。
アプリをBuildするとコンパイル済みのパッケージが
"<プロジェクトディレクトリ>\app\build\outputs\apk\debug\app-debug.apk" に作られる。
2. adbの使いかた (PC)
コンパイルしたapk を Fire TV Stickへインストールしたり、ファイルを転送したりするツール。
Android Studioをインストールすると下記にインストールされている。
c:\Users\<ユーザー名>\AppData\Local\Android\Sdk\platform-tools
コマンドプロンプトを起動して、そのディレクトリに移動して実行してみる。
% cd \Users\<ユーザー名>\AppData\Local\Android\Sdk\platform-tools
Fire TV Stick への接続
先にFire TV StickのIPアドレスを調べておき、開発者オプションの
ADBデバッガと不明ソースからのアプリをオンにしておく。
% adb connect IPアドレス:5555
Fire TV Stickに接続していいかの確認画面が出るので、OKを押すと接続できる。
接続したことの確認
% adb devices
List of devices attached
192.168.0.60:5555 device
と出ていればOK
うまく接続できていないときは、
% adb kill-server
% adb start-server
などとしてみる。
作ったapkのインストール
% adb install <フルパスapkファイル名>
Performing Push Install
<フルパスapkファイル名>: 1 file pushed. 1.1 MB/s (2289198 bytes in 1.980s)
pkg: /data/local/tmp/app-debug.apk
Success
と出ていれば成功
apkのアップデート
% adb install -r <フルパスapkファイル名>
shellを起動する
% adb shell
> cd /storage/sdcard0/Movies
など Fire TV Stickのファイル構造を見ることができる。
動画ファイルを転送するのは /storage/sdcard0/Moviesへファイルを転送すれば良い。
% adb push movie_1.mp4 /storage/sdcard0/Movies/
これで、VLCなどを起動すると、ビデオのフォルダの中に転送したファイルが見れるようになる。
切断
% adb disconnect
初Androidマシンを手に入れたことに気づいた。
いくつかのアプリのインストールからAndroid Studioをインストールして
Androidアプリ開発を試して、実際にFire TV Stickへインストールして
実行するまでのメモです。
まずは Fire TV Stickに入れたアプリ。
1. AirReciever (iPhoneからの画面ミラー)
有料ですがiPhoneの画面ミラーが便利です。
検索画面から普通にインストール可能。
2. VLC
無料の動画再生ソフト。
家にはラズパイ上で動いているDLNAサーバーがあるのでそこに接続して再生できるのが良い。
検索画面から普通にインストール可能。
3. KODI
無料の動画再生ソフト。
普通にアプリのインストールは出来ないので、PCにadbLinkをインストールして、そこからFire TV Stickへインストールしました。
ネットでインストール方法を探すとES File Explorerを使う方法が出てくるけど、よく調べるとマルウェアっぽいのでやめたほうが良さそうな雰囲気。
ここからはPC上でのアプリ開発と、作ったアプリをFire TV Stickへインストールする方法。
1. Android Studio (PC)
ここからダウンロードしてインストールします。
Fire TV Stick向けにアプリ開発をするための注意点としては、
Fire TV StickのOSが Android 5.1 (Lolipop) ベースなので、
Minimum API level は "API 22: Android 5.1 (Lolipop) に合わせて、
実行エミュレータ環境も Virtual Device に "Android TV (720p) API 22" を選択しておくこと。
また、Kotlinを選択しておくことで、アプリ開発はJavaではなくKotlinで開発できる。
実際のアプリ開発手順は省略。
アプリをBuildするとコンパイル済みのパッケージが
"<プロジェクトディレクトリ>\app\build\outputs\apk\debug\app-debug.apk" に作られる。
2. adbの使いかた (PC)
コンパイルしたapk を Fire TV Stickへインストールしたり、ファイルを転送したりするツール。
Android Studioをインストールすると下記にインストールされている。
c:\Users\<ユーザー名>\AppData\Local\Android\Sdk\platform-tools
コマンドプロンプトを起動して、そのディレクトリに移動して実行してみる。
% cd \Users\<ユーザー名>\AppData\Local\Android\Sdk\platform-tools
Fire TV Stick への接続
先にFire TV StickのIPアドレスを調べておき、開発者オプションの
ADBデバッガと不明ソースからのアプリをオンにしておく。
% adb connect IPアドレス:5555
Fire TV Stickに接続していいかの確認画面が出るので、OKを押すと接続できる。
接続したことの確認
% adb devices
List of devices attached
192.168.0.60:5555 device
と出ていればOK
うまく接続できていないときは、
% adb kill-server
% adb start-server
などとしてみる。
作ったapkのインストール
% adb install <フルパスapkファイル名>
Performing Push Install
<フルパスapkファイル名>: 1 file pushed. 1.1 MB/s (2289198 bytes in 1.980s)
pkg: /data/local/tmp/app-debug.apk
Success
と出ていれば成功
apkのアップデート
% adb install -r <フルパスapkファイル名>
shellを起動する
% adb shell
> cd /storage/sdcard0/Movies
など Fire TV Stickのファイル構造を見ることができる。
動画ファイルを転送するのは /storage/sdcard0/Moviesへファイルを転送すれば良い。
% adb push movie_1.mp4 /storage/sdcard0/Movies/
これで、VLCなどを起動すると、ビデオのフォルダの中に転送したファイルが見れるようになる。
切断
% adb disconnect
WSLでffmpegをコンパイル [WSL]
Windows Subsystem for Linux (以下 WSL)上でffmpegをコンパイルしてみた。
1. Windows10上にUbuntu 18.04をインストールする。
方法は省略。
その後最新にアップデートしておく。
sudo apt update
sudo apt upgrade
その後コンパイラ環境をインストールしておく。
sudo apt install build-essential
sudo apt install nasm
2. コンパイル済みffmpegをインストールしてみる。
sudo apt install ffmpeg
試してみるが、内蔵aacのエンコーダはあるが音質が悪いらしい。
音質のいいlibfdk-aacはライセンスの都合上バイナリ配布出来ないので、
自分でコンパイルが必要になる。
3. 必要なライブラリをインストールしておく。
sudo apt install fdkaac libfdk-aac-dev
sudo apt install libx264 libx264-dev
sudo apt install libvpx libvpx-dev
4. ffmpegのソースをダウンロードしてコンパイル。
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libvpx --disable-ffplay --disable-ffprobe --disable-debug --disable-x86asm
make
これで ffmpegのバイナリが出来る。
5. mp4ファイルへの変換
../ffmpeg/ffmpeg -threads 3 -i "input.mpeg" -c:v libx264 -b:v 900k -s 800x450 -aspect 16:9 -c:a libfdk_aac -b:a 48k -ac 2 -y "output.mp4"
6. VP9ファイルへの変換
../ffmpeg/ffmpeg -threads 3 -i "input.mpeg" -c:v libvpx-vp9 -b:v 900k -s 800x450 -aspect 16:9 -c:a libfdk_aac -b:a 48k -ac 2 -y "output.mkv"
1. Windows10上にUbuntu 18.04をインストールする。
方法は省略。
その後最新にアップデートしておく。
sudo apt update
sudo apt upgrade
その後コンパイラ環境をインストールしておく。
sudo apt install build-essential
sudo apt install nasm
2. コンパイル済みffmpegをインストールしてみる。
sudo apt install ffmpeg
試してみるが、内蔵aacのエンコーダはあるが音質が悪いらしい。
音質のいいlibfdk-aacはライセンスの都合上バイナリ配布出来ないので、
自分でコンパイルが必要になる。
3. 必要なライブラリをインストールしておく。
sudo apt install fdkaac libfdk-aac-dev
sudo apt install libx264 libx264-dev
sudo apt install libvpx libvpx-dev
4. ffmpegのソースをダウンロードしてコンパイル。
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libvpx --disable-ffplay --disable-ffprobe --disable-debug --disable-x86asm
make
これで ffmpegのバイナリが出来る。
5. mp4ファイルへの変換
../ffmpeg/ffmpeg -threads 3 -i "input.mpeg" -c:v libx264 -b:v 900k -s 800x450 -aspect 16:9 -c:a libfdk_aac -b:a 48k -ac 2 -y "output.mp4"
6. VP9ファイルへの変換
../ffmpeg/ffmpeg -threads 3 -i "input.mpeg" -c:v libvpx-vp9 -b:v 900k -s 800x450 -aspect 16:9 -c:a libfdk_aac -b:a 48k -ac 2 -y "output.mkv"
Rasberry Pi のPythonでRAW現像プログラムテスト [Raspberry Pi]
rawpyというPythonのモジュールでカメラのRAWファイルを読み込んで、
自分でRAW現像のプログラムがかけるという情報を得たので試してみた。
なお、作ったプログラムはgithubに置いてあるので、参照してください。
(ブログ中の画像ファイルはすべて画素数を小さく加工してあります)
参考記事 というか、下記の手順をそのまま試してみた。
ゼロから作るRAW現像その1 - 基本的な処理
http://uzusayuu.hatenadiary.jp/entry/2018/09/23/162412
1. 必要なモジュールのインストール
% pip3 install rawpy
としてみるとなにやら libraw が無いというようなエラーが出た。
Raspberry Pi では使えないかと一瞬思ったが、librawというのが必要なのかも? と思い
% sudo apt-get install libraw-bin libraw-dev libraw-doc
% pip3 install rawpy
あっさりインストール出来た。ついでに他に必要なモジュールもインストールしておく。
% pip3 install imageio
2. 最初のテスト
まずはrawpyがPENTAXのRAWファイル (*.PEF) に対応してるかが不安だったので、
RAWファイルを読み込んで、RAWファイルの情報を取得するものを作ってみる。
ファイルは raw_info.py (github参照)
実行してみると、(下記は一部のみ表示)
% python3 raw_info.py
camera_whitebalance
[13312.0, 8192.0, 9152.0, 8192.0]
color_desc
b'RGBG'
sizes
ImageSizes(raw_height=2624, raw_width=3936, height=2616, width=3896, top_margin=0, left_margin=0, iheight=2616, iwidth=3896, pixel_aspect=1.0, flip=5)
ちゃんと情報が表示された。PENTAXに対応してて良かった。
3. try1 RAWファイルを読み込んで無理やり表示
今回のテストとして下記のRAWファイルを入力した。
ただし、この画像は通常の現像ソフトを使って明るさやコントラストなどを調整した画像です。
最初のファイルは try1.py (githubを参照)。
実行した結果はこうなった。
なんとなくRAWファイルが読み込めているのが分かる。
縦横が違うのは最後に調整すればいいので、今は気にしない。
4. try2 Black level 調整
黒レベルの調整を行ってみる。
ただし調整するためのblack_level_per_channelの値が[0, 0, 0, 0]なので変化はないはず。
ファイルは try2.py (githubを参照)
結果は下記の画像。
全然変わってない。
5. try3 demosaicの実行
RAWファイルの1画素の値はRGBの値ではなくて、RかGかBのどれかの色の値しか持っていない。
だいたい2x2の画素で下記のように配置されている (R=Red, G=Green, B=Blue)
R G
G B
これを合成することで各画素の色を作り出すようになっている。
ただし、ここでは最初のお試しなので、4つの画素から1つの画素を作る簡易でモザイク処理を
試してみる。(結果的に画素数は縦横半分の大きさになる)
R = R
G = 2つのGの値の平均値
B = B
という計算をして色を作り出して画像を作ってみた。
ファイルは try3.py (githubを参照)
結果は下記の画像
なんとなく色が出てるけど全体的に青っぽい感じ。
4. try4 ホワイトバランスの調整
RAWファイルにcamera_whitebalance [13312.0, 8192.0, 9152.0, 8192.0] という値があるので
これを利用してホワイトバランスの調整を行う。
調整値は、下記の式になるらしい。
R = 13312 / 8192
G = 8192 / 8192
B = 9152 / 8192
ファイルは try4.py (githubを参照)
これでRGBの値を調整した結果が下記の画像
全体的に暗いけど、赤みが増した感じ。try3の結果より色がいいが、ちょっと赤く感じる。
5. try5 ガンマ補正
目に映る色の強度はリニアではないので、それに合わせてガンマ補正を行う。
ファイルは try5.py (githubを参照)
結果が下記の画像
コントラストが低めだけど、少し明るくなった感じ。
6. try6 カラーマトリクス補正
カメラのセンサーの色の癖を見た目に合わせて調整する。
ただしRAWファイルに保管されているcolor_matrixの値がすべて "0" だったので、
かわりにrgb_xyz_matrix
[[ 0.9566 -0.2863 -0.0803]
[-0.717 1.5172 0.2112]
[-0.0818 0.0803 0.9705]
[ 0. 0. 0. ]]
を利用してみた。
ファイルは try6.py (githubを参照)
結果が下記の画像。
赤が強すぎて色味がエグい感じに見える。
たぶんrgb_xyz_matrixを使うのが間違いな感じ。これは失敗。
とりあえずここまでで try5.pyの結果、RAWファイルから画像ファイルを作り出せるようになった。
PythonでRAWファイルの現像を自分で試せるとは思っていなかった。
しかもRaspberry Piで動くのは便利。
処理時間はtry5.pyで10分くらい時間がかかっているのはしょうがないかな?
自分でRAW現像のプログラムがかけるという情報を得たので試してみた。
なお、作ったプログラムはgithubに置いてあるので、参照してください。
(ブログ中の画像ファイルはすべて画素数を小さく加工してあります)
参考記事 というか、下記の手順をそのまま試してみた。
ゼロから作るRAW現像その1 - 基本的な処理
http://uzusayuu.hatenadiary.jp/entry/2018/09/23/162412
1. 必要なモジュールのインストール
% pip3 install rawpy
としてみるとなにやら libraw が無いというようなエラーが出た。
Raspberry Pi では使えないかと一瞬思ったが、librawというのが必要なのかも? と思い
% sudo apt-get install libraw-bin libraw-dev libraw-doc
% pip3 install rawpy
あっさりインストール出来た。ついでに他に必要なモジュールもインストールしておく。
% pip3 install imageio
2. 最初のテスト
まずはrawpyがPENTAXのRAWファイル (*.PEF) に対応してるかが不安だったので、
RAWファイルを読み込んで、RAWファイルの情報を取得するものを作ってみる。
ファイルは raw_info.py (github参照)
実行してみると、(下記は一部のみ表示)
% python3 raw_info.py
camera_whitebalance
[13312.0, 8192.0, 9152.0, 8192.0]
color_desc
b'RGBG'
sizes
ImageSizes(raw_height=2624, raw_width=3936, height=2616, width=3896, top_margin=0, left_margin=0, iheight=2616, iwidth=3896, pixel_aspect=1.0, flip=5)
ちゃんと情報が表示された。PENTAXに対応してて良かった。
3. try1 RAWファイルを読み込んで無理やり表示
今回のテストとして下記のRAWファイルを入力した。
ただし、この画像は通常の現像ソフトを使って明るさやコントラストなどを調整した画像です。
最初のファイルは try1.py (githubを参照)。
実行した結果はこうなった。
なんとなくRAWファイルが読み込めているのが分かる。
縦横が違うのは最後に調整すればいいので、今は気にしない。
4. try2 Black level 調整
黒レベルの調整を行ってみる。
ただし調整するためのblack_level_per_channelの値が[0, 0, 0, 0]なので変化はないはず。
ファイルは try2.py (githubを参照)
結果は下記の画像。
全然変わってない。
5. try3 demosaicの実行
RAWファイルの1画素の値はRGBの値ではなくて、RかGかBのどれかの色の値しか持っていない。
だいたい2x2の画素で下記のように配置されている (R=Red, G=Green, B=Blue)
R G
G B
これを合成することで各画素の色を作り出すようになっている。
ただし、ここでは最初のお試しなので、4つの画素から1つの画素を作る簡易でモザイク処理を
試してみる。(結果的に画素数は縦横半分の大きさになる)
R = R
G = 2つのGの値の平均値
B = B
という計算をして色を作り出して画像を作ってみた。
ファイルは try3.py (githubを参照)
結果は下記の画像
なんとなく色が出てるけど全体的に青っぽい感じ。
4. try4 ホワイトバランスの調整
RAWファイルにcamera_whitebalance [13312.0, 8192.0, 9152.0, 8192.0] という値があるので
これを利用してホワイトバランスの調整を行う。
調整値は、下記の式になるらしい。
R = 13312 / 8192
G = 8192 / 8192
B = 9152 / 8192
ファイルは try4.py (githubを参照)
これでRGBの値を調整した結果が下記の画像
全体的に暗いけど、赤みが増した感じ。try3の結果より色がいいが、ちょっと赤く感じる。
5. try5 ガンマ補正
目に映る色の強度はリニアではないので、それに合わせてガンマ補正を行う。
ファイルは try5.py (githubを参照)
結果が下記の画像
コントラストが低めだけど、少し明るくなった感じ。
6. try6 カラーマトリクス補正
カメラのセンサーの色の癖を見た目に合わせて調整する。
ただしRAWファイルに保管されているcolor_matrixの値がすべて "0" だったので、
かわりにrgb_xyz_matrix
[[ 0.9566 -0.2863 -0.0803]
[-0.717 1.5172 0.2112]
[-0.0818 0.0803 0.9705]
[ 0. 0. 0. ]]
を利用してみた。
ファイルは try6.py (githubを参照)
結果が下記の画像。
赤が強すぎて色味がエグい感じに見える。
たぶんrgb_xyz_matrixを使うのが間違いな感じ。これは失敗。
とりあえずここまでで try5.pyの結果、RAWファイルから画像ファイルを作り出せるようになった。
PythonでRAWファイルの現像を自分で試せるとは思っていなかった。
しかもRaspberry Piで動くのは便利。
処理時間はtry5.pyで10分くらい時間がかかっているのはしょうがないかな?
Pythonistaでgitを使う [Pythonista]
プログラムのソース管理である Github に Pythonistaから直接アクセスして、
作ったプログラムを登録してみた。
1. まずはgithub にアカウントの登録
https://github.co.jp/ でアカウントを登録し、
その後に "New repository" から新しいレポジトリを作っておく。
するとそのレポジトリは "https://github.com/アカウント名/レポジトリ.git" でアクセス出来るようになる。
2. Pythonista で git を使う環境 stash をインストールする
Pythonista を起動し、画面の右から左へスワイプするとコンソール画面が出るので、
そこで、
とするとインストールが始まるので、
と出るのを待つ。
終わったらPythonistaを再起動(ホーム画面ダブルタップからPythonistaを上へスワイプして終了し、再度起動する)
するとPythonistaのホームに "launch_stash.py" が配置されるので、それを選択して実行すると、
シェルが起動する。
3. gitを使ってみる
stash を起動して、githubに登録したいファイルのあるディレクトリに移動する。
git の初期化をする。
なにやらエラーが出てうまく動いていない様子。
調べてみたけど的を得た解答が見つからなかったけど、ふとPython 2.7で実行することを思いつく。
stashを実行するときに実行ボタンを長押しするとPython 2.7を選択できるので、そこから実行し、
gitの初期化をしてみる。
エラーが出なくてうまく動いている様子。ls -a で見ると ".git" ディレクトリも出来ているので、うまく出来た。
まずはローカルレポジトリにファイルを追加して、commitする。
その後 Github へ登録してみる。
うまく出来たようなので、Webからgithubへアクセスしてファイルを確認してみると、
ちゃんとソースが登録されていた。
Pythonistaから直接githubへアクセス出来るのはすごいな~
stash は普通のシェルだから、Pythonista上でプログラムのコピーは面倒なんだけど、
stash でディレクトリを作ってファイルコピーすればバックアップも簡単に出来る。
便利。
作ったプログラムを登録してみた。
1. まずはgithub にアカウントの登録
https://github.co.jp/ でアカウントを登録し、
その後に "New repository" から新しいレポジトリを作っておく。
するとそのレポジトリは "https://github.com/アカウント名/レポジトリ.git" でアクセス出来るようになる。
2. Pythonista で git を使う環境 stash をインストールする
Pythonista を起動し、画面の右から左へスワイプするとコンソール画面が出るので、
そこで、
import requests as r; exec(r.get('http://bit.ly/get-stash').text)
とするとインストールが始まるので、
Installation completed.
と出るのを待つ。
終わったらPythonistaを再起動(ホーム画面ダブルタップからPythonistaを上へスワイプして終了し、再度起動する)
するとPythonistaのホームに "launch_stash.py" が配置されるので、それを選択して実行すると、
シェルが起動する。
3. gitを使ってみる
stash を起動して、githubに登録したいファイルのあるディレクトリに移動する。
$ cd (directory)
git の初期化をする。
git init .
なにやらエラーが出てうまく動いていない様子。
gittle already exists funky already exists
調べてみたけど的を得た解答が見つからなかったけど、ふとPython 2.7で実行することを思いつく。
stashを実行するときに実行ボタンを長押しするとPython 2.7を選択できるので、そこから実行し、
gitの初期化をしてみる。
git init .
エラーが出なくてうまく動いている様子。ls -a で見ると ".git" ディレクトリも出来ているので、うまく出来た。
まずはローカルレポジトリにファイルを追加して、commitする。
git add (ファイル名) git commit
その後 Github へ登録してみる。
git push https://github.com/(アカウント名)/(レポジトリ).git
うまく出来たようなので、Webからgithubへアクセスしてファイルを確認してみると、
ちゃんとソースが登録されていた。
Pythonistaから直接githubへアクセス出来るのはすごいな~
stash は普通のシェルだから、Pythonista上でプログラムのコピーは面倒なんだけど、
stash でディレクトリを作ってファイルコピーすればバックアップも簡単に出来る。
便利。
タグ:Pythonista GitHub
PythonistaでSonyのデジカメのリモートコントロール [Pythonista]
Wifiに繋がるソニーのデジカメはWifi経由でカメラをコントロールするための
Camera Remote APIを公開しているので、
iPhone上で動くPythonistaから接続を試してみた。
1. SSDPでデジカメの接続先を探す
iPhoneをデジカメのWifiに接続して、SSDPを送ることでカメラのIPアドレスと
接続するURLを調べられるようだ。
ということでPythonistaからSSDPを送ってみる。
実行してみたけどtimeoutしてデジカメが検出出来なかった。
不思議なことにiPhoneをデジカメのWifiに繋いでも、iPhoneのWifi接続マークが出なくて、
"4G"のままになっていた。けど状態でソニーが作ったデジカメをコントロールするアプリはちゃんと動くし、さらに普通にネットにも繋がってるという、両方に繋がっている状態に見える。
よくわからない状態だったので、ネットで調べてると接続先URLを見つけたのでそこへ接続することにした。
後で分かったことだけど、デジカメにWifiで繋ぐと、デジカメのIPは10.0.0.1、iPhoneのIPは10.0.1.1となっているが、
デフォルトゲートウェイが設定されていないせいで、SSDPの通信はデジカメに行かないでインターネット側に送っていたらしい。
iPhoneの"4G"の通信を止めてやることで、上のプログラムを実行するとデジカメから反応があった。
このLOCATIONに書いてあるURLにアクセスすると、カメラをコントロールするためのURLを返してくれるらしい。
2. デジカメのコントロール
JSONでカメラをコントロールするためのコマンドを書いてURLへ送ることでカメラが動いてくれるらしい。
試しにシャッターを切るコマンドを送ってみた。
ちゃんとシャッターを切ってくれた。
これでカメラをコントロール出来るようになった。
後はシャッターボタンとかのUIを作ってやれば、写真を撮るアプリが出来そう。
Camera Remote APIを公開しているので、
iPhone上で動くPythonistaから接続を試してみた。
1. SSDPでデジカメの接続先を探す
iPhoneをデジカメのWifiに接続して、SSDPを送ることでカメラのIPアドレスと
接続するURLを調べられるようだ。
ということでPythonistaからSSDPを送ってみる。
import socket MSEARCH_REQUEST_LINES = ( 'M-SEARCH * HTTP/1.1', 'HOST: 239.255.255.250:1900', 'MAN: "ssdp:discover"', 'MX: %(timeout)s', 'ST:urn:schemas-sony-com:service:ScalarWebAPI:1', '', '' ) timeout = 5 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(timeout) req = '\r\n'.join(MSEARCH_REQUEST_LINES) % {'timeout': timeout} sock.sendto(bytes(req, encoding='utf-8'), ('239.255.255.250', 1900)) while True: try: res, device = sock.recvfrom(4096) print('----------- from %s' % (device,)) print(res) print('-----------') except socket.timeout: print("timeout") break sock.close()
実行してみたけどtimeoutしてデジカメが検出出来なかった。
不思議なことにiPhoneをデジカメのWifiに繋いでも、iPhoneのWifi接続マークが出なくて、
"4G"のままになっていた。けど状態でソニーが作ったデジカメをコントロールするアプリはちゃんと動くし、さらに普通にネットにも繋がってるという、両方に繋がっている状態に見える。
よくわからない状態だったので、ネットで調べてると接続先URLを見つけたのでそこへ接続することにした。
後で分かったことだけど、デジカメにWifiで繋ぐと、デジカメのIPは10.0.0.1、iPhoneのIPは10.0.1.1となっているが、
デフォルトゲートウェイが設定されていないせいで、SSDPの通信はデジカメに行かないでインターネット側に送っていたらしい。
iPhoneの"4G"の通信を止めてやることで、上のプログラムを実行するとデジカメから反応があった。
b'HTTP/1.1 200 OK CACHE-CONTROL: max-age=1800 EXT: LOCATION: http://10.0.0.1:64321/scalarwebapi_dd.xml SERVER: UPnP/1.0 SonyImagingDevice/1.0 ST: urn:schemas-sony-com:service:ScalarWebAPI:1 USN: uuid:00000000-xxxx-xxxx-xxxx-xxxxxxxx::urn:schemas-sony-com:service:ScalarWebAPI:1 X-AV-Physical-Unit-Info: pa=""; pl=; X-AV-Server-Info: av=5.0; hn=""; cn="Sony Corporation"; mn="SonyImagingDevice"; mv="1.0";
このLOCATIONに書いてあるURLにアクセスすると、カメラをコントロールするためのURLを返してくれるらしい。
2. デジカメのコントロール
JSONでカメラをコントロールするためのコマンドを書いてURLへ送ることでカメラが動いてくれるらしい。
試しにシャッターを切るコマンドを送ってみた。
import json import requests SONY_CAMERA_URL = 'http://10.0.0.1:10000/sony/camera' def sony_cam_control_1 (): req_body = json.dumps({ 'method' : 'actTakePicture', 'params' : [], 'id' : 1, 'version': '1.0' }) res = requests.post(SONY_CAMERA_URL, data=req_body) #print("%s" %(res)) print(res.json()) return res.json() ret = sony_cam_control_1()
ちゃんとシャッターを切ってくれた。
これでカメラをコントロール出来るようになった。
後はシャッターボタンとかのUIを作ってやれば、写真を撮るアプリが出来そう。
Raspberry Pi で Tensorflow その2 [Raspberry Pi]
TensorflowがRaspberry Piを正式にサポートしたということなので、
再度インストールしてみた。
まずは前回インストールしたパッケージのアンインストール。
そしてTensorFlowのインストール
ちゃんと入ったか確認してみる。
ちゃんとPython3 で動いている。
サンプルの画像分類を試す
前回と同じように実行したがエラーとなった。
結果的には最後の行を下記のように修正して動くようになった。
再度インストールしてみた。
まずは前回インストールしたパッケージのアンインストール。
% sudo pip uninstall tensorflow
そしてTensorFlowのインストール
% sudo apt install libatlas-base-dev % sudo pip3 install tensorflow
ちゃんと入ったか確認してみる。
$ python3 Python 3.5.3 (default, Jan 19 2017, 14:11:04) [GCC 6.3.0 20170124] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow >>> hello = tensorflow.constant("Hello, TensorFlow") >>> sess = tensorflow.Session() >>> print(sess.run(hello)) b'Hello, TensorFlow' >>> exit()
ちゃんとPython3 で動いている。
サンプルの画像分類を試す
前回と同じように実行したがエラーとなった。
$ python3 classify_image.py --model_dir ./imagenet/ Traceback (most recent call last): File "classify_image.py", line 227, intf.app.run(main=main, argv=[sys.argv[0]] + unparsed) TypeError: run() got an unexpected keyword argument 'argv'
結果的には最後の行を下記のように修正して動くようになった。
tf.app.run()
PythonからTweet [Raspberry Pi]
PythonのプログラムからTweetしてみる。
まずはPythonからTweetするモジュールがあるのでそれをインストールする。
モジュールはいくつかあるようだけど、Twythonを使ってみた。
前に作ったTwitterのCONSUMER_KEYとACCESS_TOKENを下記のように config.py として保存する。
そして、Pythonで下記のように作る。twi.py
Jpegの画像ファイルと、日付をつけてTweetしてみる。
無事につぶやけました。
まずはPythonからTweetするモジュールがあるのでそれをインストールする。
モジュールはいくつかあるようだけど、Twythonを使ってみた。
% sudo apt-get install python3-twython
前に作ったTwitterのCONSUMER_KEYとACCESS_TOKENを下記のように config.py として保存する。
CONSUMER_KEY = "xxxx" CONSUMER_SECRET = "xxxx" ACCESS_TOKEN = "xxxx" ACCESS_TOKEN_SECRET = "xxxx"
そして、Pythonで下記のように作る。twi.py
Jpegの画像ファイルと、日付をつけてTweetしてみる。
from twython import Twython from PIL import Image import io import config twitter = Twython(config.CONSUMER_KEY, config.CONSUMER_SECRET, config.ACCESS_TOKEN, config.ACCESS_TOKEN_SECRET) photo = Image.open("data/20180805/photo_20180805_173503.jpg") image_io = io.BytesIO() photo.save(image_io, format='JPEG') image_io.seek(0) image_ids = twitter.upload_media(media=image_io) twitter.update_status(status="20180805 173503", media_ids=[image_ids['media_id']])
無事につぶやけました。
PythonからTwitterへTweetするための設定
PythonのプログラムでTweetするための設定をしたのでメモ
1. まずは専用のアカウントを作成する。
https://twitter.com/ へ行ってTwitterのアカウントを作る。
ただし、プログラムからのTweetをするようなアプリを作る目的の時は、電話番号も登録する必要がある。
2. Twitterの開発者登録をする。
Twitterにログインしたまま、https://apps.twitter.com/ へ行く。
すると、いろいろWebで調べてみた感じと違って、開発者登録が必要と出ている。
どうやら2018年7月から変わったらしい。
開発者登録画面には、アプリの詳細を書く場所があって、300文字以上入力しないといけないとかいてある。
しかも英語で・・・
しょうがないので簡単に100文字くらいで書いて、"aaaaa" って感じで埋めてみた。
登録されたらメールが来ると書いてあったので待ってみた。
3日くらいたってようやくメールが来たが、メールには、
もっとアプリの詳細を書け、としか書いてなかった・・・
しょうがないので英文でもう少し細かい内容の説明を書いてメールを返信。
さらに2日くらいたって、「登録されました」と返信メールが来た。
やっとスタートライン。面倒になったなぁ。
3. Consumer API keysとAccess tokenを受け取る。
http://developer.twitter.com/en/account/get-started へ行って、
新しいアプリの登録をして、
Consumer API keysとAccess tokenを受け取る。
この辺は他のブログに良く書いてあるのと同じなので省略。
これでようやくTweetする準備が完了した。
今日はここまで。
1. まずは専用のアカウントを作成する。
https://twitter.com/ へ行ってTwitterのアカウントを作る。
ただし、プログラムからのTweetをするようなアプリを作る目的の時は、電話番号も登録する必要がある。
2. Twitterの開発者登録をする。
Twitterにログインしたまま、https://apps.twitter.com/ へ行く。
すると、いろいろWebで調べてみた感じと違って、開発者登録が必要と出ている。
どうやら2018年7月から変わったらしい。
開発者登録画面には、アプリの詳細を書く場所があって、300文字以上入力しないといけないとかいてある。
しかも英語で・・・
しょうがないので簡単に100文字くらいで書いて、"aaaaa" って感じで埋めてみた。
登録されたらメールが来ると書いてあったので待ってみた。
3日くらいたってようやくメールが来たが、メールには、
もっとアプリの詳細を書け、としか書いてなかった・・・
しょうがないので英文でもう少し細かい内容の説明を書いてメールを返信。
さらに2日くらいたって、「登録されました」と返信メールが来た。
やっとスタートライン。面倒になったなぁ。
3. Consumer API keysとAccess tokenを受け取る。
http://developer.twitter.com/en/account/get-started へ行って、
新しいアプリの登録をして、
Consumer API keysとAccess tokenを受け取る。
この辺は他のブログに良く書いてあるのと同じなので省略。
これでようやくTweetする準備が完了した。
今日はここまで。
WindowsにOpenCV [OpenCV]
前回はRaspberry PiにOpenCVをインストールしてみたけど、
今回はWindows上にOpenCVをインストールしてみた。
Windows上にAnacondaをインストールしておくことが必要。
Anacondaのインストールは省略。
Anaconda Prompt を起動したところからスタート。
まずはOpenCVのインストール
Anaconda Forge というところに最新版のOpenCVがあることを確認したので、
そこからインストールする。
% conda install -c conda-forage opencv
動作確認
python
>>> import cv2
>>> print(cv2.__version__)
3.4.1
>>> exit()
ちゃんと 3.4.1 がインストールされた。
前回と同じ、camera_face.py を試してみる。
Haarの認識モデルは下記のディレクトリにインストールされていたので、コピーしてくる。
c:\Anaconda3\pkgs\opencv-3.4.1-py35_200\Library\etc\haarcascades\
% cp c:\Anaconda3\pkgs\opencv-3.4.1-py35_200\Library\etc\haarcascades\haarcascade_frontalface_alt.xml .
そして前回と同じように camera_face.py を作る。(ブログの都合上全角スペースでインデントしているので修正が必要かも)
import cv2
def camera_capture():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
face = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
if len(face) > 0:
for rect in face:
cv2.rectangle(frame, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (255,255,255), thickness=1)
cv2.imshow('camera capture', frame)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
cascade_path = "haarcascade_frontalface_alt.xml"
faceCascade = cv2.CascadeClassifier(cascade_path)
camera_capture()
そして実行
% python camera_face.py
PCについてるカメラで取り込んで、顔の位置を認識してそこに四角い枠を追加して、
リアルタイムに表示された。
今回はWindows上にOpenCVをインストールしてみた。
Windows上にAnacondaをインストールしておくことが必要。
Anacondaのインストールは省略。
Anaconda Prompt を起動したところからスタート。
まずはOpenCVのインストール
Anaconda Forge というところに最新版のOpenCVがあることを確認したので、
そこからインストールする。
% conda install -c conda-forage opencv
動作確認
python
>>> import cv2
>>> print(cv2.__version__)
3.4.1
>>> exit()
ちゃんと 3.4.1 がインストールされた。
前回と同じ、camera_face.py を試してみる。
Haarの認識モデルは下記のディレクトリにインストールされていたので、コピーしてくる。
c:\Anaconda3\pkgs\opencv-3.4.1-py35_200\Library\etc\haarcascades\
% cp c:\Anaconda3\pkgs\opencv-3.4.1-py35_200\Library\etc\haarcascades\haarcascade_frontalface_alt.xml .
そして前回と同じように camera_face.py を作る。(ブログの都合上全角スペースでインデントしているので修正が必要かも)
import cv2
def camera_capture():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
face = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
if len(face) > 0:
for rect in face:
cv2.rectangle(frame, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (255,255,255), thickness=1)
cv2.imshow('camera capture', frame)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
cascade_path = "haarcascade_frontalface_alt.xml"
faceCascade = cv2.CascadeClassifier(cascade_path)
camera_capture()
そして実行
% python camera_face.py
PCについてるカメラで取り込んで、顔の位置を認識してそこに四角い枠を追加して、
リアルタイムに表示された。
タグ:OpenCV
Raspberry Pi で OpenCV [Raspberry Pi]
Raspberry Pi に OpenCV をインストールして、顔認識を試してみた。
OpenCVのインストール
OpenCVをソースからビルドするのは時間がかかるので、今回はバイナリをインストールすることにした。
% wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.1-20180304.1_armhf.deb
% sudo apt install ./libopencv3_3.4.1-20180304.1_armhf.deb
% sudo ldconfig
動作確認
% python -c 'import cv2; print(cv2.__version__)'
3.4.1
% python3 -c 'import cv2; print(cv2.__version__)'
3.4.1
ちゃんとOpenCVのバージョンが表示されてるので、インストールされている様子。
お試し1 画像ファイルの顔認識テスト
OpenCVには最初から顔検出器用が用意されているのでそれを使用してみる。
% vi face.py (ブログの都合上全角スペースでインデントしているので修正が必要かも)
import cv2
import os
def face_detector(img_path, ):
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
face = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
if len(face) > 0:
for rect in face:
cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (255, 255, 255), thickness=2)
else:
print("no face")
cv2.imshow("result", img)
cv2.imwrite("outimg/" + os.path.basename(img_path), img);
key = cv2.waitKey(0)
cascade_path = "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
faceCascade = cv2.CascadeClassifier(cascade_path)
img_files = os.listdir('inimg')
for img_file in img_files:
full_path_name = 'inimg/' + img_file
print(full_path_name)
face_detector(full_path_name)
% mkdir inimg outimg
顔が入っている適当な画像ファイルを inimgディレクトリに置いて、実行すると、
顔を認識した部分に白い枠を追加して画像表示し、outimgディレクトリに出力してくれる。
% pytone3 face.py
うまく顔認識していることが確認出来た。
お試し2 USBカメラからのキャプチャ
ラズパイ用のカメラもジュールは持っていないけどUSBにつなぐWebカメラ(130万画素)は持っているので、
キャプチャしてみる。
% vi getcamera.py (ブログの都合上全角スペースでインデントしているので修正が必要かも)
import cv2
def camera_capture():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('camera capture', frame)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
camera_capture()
% python3 getcamera.py
ちゃんとカメラから取り込んだ画像(640x480くらい)が15〜20フレーム/secくらいで表示された。
ESCキーを押すと終了する。
お試し3 USBカメラからキャプチャして顔認識
お試し1と2を組み合わせてリアルタイム顔認識を試してみる。
% vi camera_face.py (ブログの都合上全角スペースでインデントしているので修正が必要かも)
import cv2
def camera_capture():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
face = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
if len(face) > 0:
for rect in face:
cv2.rectangle(frame, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (255,255,255), thickness=1)
cv2.imshow('camera capture', frame)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
cascade_path = "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
faceCascade = cv2.CascadeClassifier(cascade_path)
camera_capture()
% python3 camera_face.py
リアルタイムに顔認識出来るようになった。
ただし 1〜2フレーム/sec とだいぶ遅くなった。
参考にしたサイトはここです。
http://uepon.hatenadiary.com/entry/2018/02/12/113432
https://qiita.com/mt08/items/e8e8e728cf106ac83218
https://tomosoft.jp/design/?p=8876
OpenCVのインストール
OpenCVをソースからビルドするのは時間がかかるので、今回はバイナリをインストールすることにした。
% wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.1-20180304.1_armhf.deb
% sudo apt install ./libopencv3_3.4.1-20180304.1_armhf.deb
% sudo ldconfig
動作確認
% python -c 'import cv2; print(cv2.__version__)'
3.4.1
% python3 -c 'import cv2; print(cv2.__version__)'
3.4.1
ちゃんとOpenCVのバージョンが表示されてるので、インストールされている様子。
お試し1 画像ファイルの顔認識テスト
OpenCVには最初から顔検出器用が用意されているのでそれを使用してみる。
% vi face.py (ブログの都合上全角スペースでインデントしているので修正が必要かも)
import cv2
import os
def face_detector(img_path, ):
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
face = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
if len(face) > 0:
for rect in face:
cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (255, 255, 255), thickness=2)
else:
print("no face")
cv2.imshow("result", img)
cv2.imwrite("outimg/" + os.path.basename(img_path), img);
key = cv2.waitKey(0)
cascade_path = "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
faceCascade = cv2.CascadeClassifier(cascade_path)
img_files = os.listdir('inimg')
for img_file in img_files:
full_path_name = 'inimg/' + img_file
print(full_path_name)
face_detector(full_path_name)
% mkdir inimg outimg
顔が入っている適当な画像ファイルを inimgディレクトリに置いて、実行すると、
顔を認識した部分に白い枠を追加して画像表示し、outimgディレクトリに出力してくれる。
% pytone3 face.py
うまく顔認識していることが確認出来た。
お試し2 USBカメラからのキャプチャ
ラズパイ用のカメラもジュールは持っていないけどUSBにつなぐWebカメラ(130万画素)は持っているので、
キャプチャしてみる。
% vi getcamera.py (ブログの都合上全角スペースでインデントしているので修正が必要かも)
import cv2
def camera_capture():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow('camera capture', frame)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
camera_capture()
% python3 getcamera.py
ちゃんとカメラから取り込んだ画像(640x480くらい)が15〜20フレーム/secくらいで表示された。
ESCキーを押すと終了する。
お試し3 USBカメラからキャプチャして顔認識
お試し1と2を組み合わせてリアルタイム顔認識を試してみる。
% vi camera_face.py (ブログの都合上全角スペースでインデントしているので修正が必要かも)
import cv2
def camera_capture():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
face = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
if len(face) > 0:
for rect in face:
cv2.rectangle(frame, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (255,255,255), thickness=1)
cv2.imshow('camera capture', frame)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
cascade_path = "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
faceCascade = cv2.CascadeClassifier(cascade_path)
camera_capture()
% python3 camera_face.py
リアルタイムに顔認識出来るようになった。
ただし 1〜2フレーム/sec とだいぶ遅くなった。
参考にしたサイトはここです。
http://uepon.hatenadiary.com/entry/2018/02/12/113432
https://qiita.com/mt08/items/e8e8e728cf106ac83218
https://tomosoft.jp/design/?p=8876
前の10件 | -