So-net無料ブログ作成
前の10件 | -

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についてるカメラで取り込んで、顔の位置を認識してそこに四角い枠を追加して、
リアルタイムに表示された。

タグ:OpenCV
nice!(0)  コメント(0) 

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


nice!(0)  コメント(0) 

Raspberry Pi で Tensorflow [Raspberry Pi]

Raspberry Pi で Deep Learning の Tensorflow を動かしてみる。

まずはインストール
 ここを見て、Raspberry Pi で動くバイナリパッケージのダウンロードの仕方を見ておく。
 Python3 が入っているので Python3用のパッケージをダウンロードする。
  % wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp34-cp34m-linux_armv7l.whl
 そしてインストールしてみると、
  % sudo pip3 install tensorflow-1.1.0-cp34-cp34m-linux_armv7l.whl
  tensorflow-1.1.0-cp34-cp34m-linux_armv7l.whl is not a supported wheel on this platform.
 エラーになった。
 どうやらダウンロードしたパッケージは Python3.4 用だけど、
 インストールされている Python は Python3.5 ということが判明。
 ソースからビルドしてもいいけど、今の目的は「とりあえず使ってみる」なので、
 Python2.7用のバイナリパッケージを使うことにしてみた。
 ダウンロードしてインストールする。
  % wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp27-none-linux_armv7l.whl
  % sudo pip install tensorflow-1.1.0-cp27-none-linux_armv7l.whl
 今度は問題なくインストール完了。
 インストール方法を見てみると、下記もやっておけと書いてあるので、やっておく。
  % sudo pip uninstall mock
  % sudo pip install mock

動くか確認
 hello_tf.py というファイルを作って、期待通り動くかを確認する。
  % vi hello-tf.py
   ======
   #hello-tf.py
   import tensorflow as tf
   import multiprocessing as mp

   core_num = mp.cpu_count()
   config = tf.ConfigProto(
    inter_op_parallelism_threads = core_num,
    intra_op_parallelism_threads = core_num )
   sess = tf.Session(config=config)

   hello = tf.constant('hello tensorflow')
   print sess.run(hello)

   a = tf.constant(10)
   b = tf.constant(32)
   print sess.run(a+b)
   ======
 そして実行
  % python hello-tf.py
 下記のように表示されれば問題なく動いたことになる。
  hello tensorflow
  42

サンプルの画像分類を試す
 Tensorflowにサンプルで用意されている画像分類を試してみる。
 既に学習まで終わった状態で提供されているので、すぐに動かして試してみることが出来る。
 ただ、ネットで少し検索するとTensorflowをインストールすると
 ~/tensorflow/tensorflow/models/image/imagenet/classify_image.py ファイルが出来ていると
 書いてあるが探してみても見つからない。
 どうやらTensorflow 1.1 ではパッケージには同梱されていない様子。

 よって、gihubから
classify_image.py をダウンロードしてきた。
  % mkdir imagenet
  % cd imagenet
  % wget https://raw.githubusercontent.com/tensorflow/models/master/tutorials/image/imagenet/classify_image.py

 初めの1回目は学習済みデータのダウンロードが行われてから、パンダの画像を使って
 パンダと認識するかが実行される。
  % python classify_image.py
  >> Downloading inception-2015-12-05.tgz 100.0%
  Successfully downloaded inception-2015-12-05.tgz 88931400 bytes.
  giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89107)
  indri, indris, Indri indri, Indri brevicaudatus (score = 0.00779)
  lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00296)
  custard apple (score = 0.00147)
  earthstar (score = 0.00117)
 89%の確率でパンダであると認識できた。

 学習済みデータは Raspberry Pi を再起動すると消えてしまうので、ローカルに移動して
 実行できるか試してみる。
  % mv /tmp/imagenet/ .
  % python classify_image.py --model_dir imagenet/ --image_file imagenet/cropped_panda.jpg
 これで、ローカルにある学習データを使って画像の分類が出来た。

 ネットからいくつか画像データをダウンロードして、試してみた。
  猫画像
   % python classify_image.py --model_dir imagenet/ --image_file cat_1.jpg
   Egyptian cat (score = 0.49180)
   tiger cat (score = 0.25432)
   tabby, tabby cat (score = 0.14356)
   lynx, catamount (score = 0.03078)
   mouse, computer mouse (score = 0.01840)
  49%で Egyptial cat と認識した。

  飛行機雲 その1
   % python classify_image.py --model_dir imagenet/ --image_file jet_cloud_1.jpg
   airliner (score = 0.77991)
   wing (score = 0.04719)
   warplane, military plane (score = 0.03326)
   space shuttle (score = 0.02544)
   missile (score = 0.00422)
  78%で airliner。5%で wing。3%でwarplane と認識された。

  飛行機雲 その2
   % python classify_image.py --model_dir imagenet/ --image_file jet_cloud_2.jpg
   airliner (score = 0.38874)
   wing (score = 0.03683)
   ski (score = 0.03144)
   hook, claw (score = 0.02940)
   warplane, military plane (score = 0.02702)
  39%で airliner。4%で wing。3%でski と認識された。

  飛行機雲は分類にもなくて、学習データにもないんだろうな・・・

nice!(0)  コメント(0) 

Raspberry Pi で RetroPie を動かし、X68kのエミュレーターを起動する [Raspberry Pi]

Rasberry Pi に RetroPie を入れて遊んでみた

RetroPie というのはいろんなエミュレータをパッケージして、
一つのランチャーから各種エミュレータを実行できるものです。
しかもPS3のコントローラが使えます。

今回は、RetroPieのインストールからX68kエミュのインストールと、
Human68k の起動までを試してみます。

インストール
 RetroPie のサイトからイメージをダウンロードする。
 https://retropie.org.uk/ から、Raspberry Pi 2 用のイメージをダウンロードします。
 ダウンロードしたファイルはgzipファイルなので、7-zipなどで解凍します。
 自分は、Windowsマシンに Bash on Ubuntsu on Windows をインストールしてあるので、
 gzip -d *.img.gz で解凍しました。

microSDにイメージを書き込む
 http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows
 ここにある DD for Windows を使って、解凍したイメージファイルをSDに書き込みます。
 注意点は、管理者権限で実行すること。

RetroPieの起動と設定
 microSDをRaspberry Piへセットして、
 テレビ、キーボードとPS3のコントローラを接続して、電源を接続します。
 RetroPieのロゴが表示され、しばらくするとemulation stationが起動します。
 
 ゲームパッドの設定
  初回は、ゲームパッドの設定画面が表示されるので、
  https://cloud.githubusercontent.com/assets/10035308/22185413/f10f27de-e099-11e6-97a4-ecbbc82c9e46.png
  を参考にして、ボタンを割り当てていきます。
  最後はHotkeysの設定をします。Selectボタンを割り当てておけばいいです。
  Hotkeysと他のボタンの同時押しで、エミュレータの終了など各コマンドを実行できます。
  https://retropie.org.uk/docs/First-Installation/#configure-controllers
  を参考にしてください。
 
 ファイルシステムの拡張
  大きめのmicroSDを使っても、はじめは解凍したイメージファイルまでの領域しか使えないので、
  すべての容量を使えるように拡張します。
  emulation stationのトップ画面でRetroPieに合わせ(はじめはこのメニューしか選べないですが)
  Aボタンを押し、その後 RASPI CONFIG を選択します。
  次に 7 Advanced Options を選択、
  次に A1 Expand FileSystem を選択すると、
  ファイルシステムが拡張されます。
  その後トップメニューへ戻り、STARTボタンを押し、QUITを選択、RESTART SYSTEMを選択して、
  再起動します。
 
 ロケーションの設定
  RetroPieメニューから、RASPI CONFIG -> 4 Localisation Options -> I1 Change Locale -> Ja_JP.UTF-8 UTF-8を追加する、
  次の画面では、en_GB.UTF-8 UTF-8を選択しておきます。
  次に、RetroPieメニューに戻り、4 Localisation Options -> I2 Change Timezoneを選択し、
  ASIA->TOKYO を選択します。
  次にまたRetroPieメニューに戻り、4 Localisation Options -> I3 Change Keyboard Layoutを選択、
  Generic 105-key (Intel) PC -> Other -> Japanese -> Japanese -> The default for the keyboard layout -> No compose keyを選択、
  RetroPieメニューに戻り、4 Localisation Options -> I4 Change Wi-Fi Countryを選択、
  JP Japanを選択する。
 
 ここで一度再起動しました。
 
 パスワードの変更
  デフォルトのユーザー pi は パスワード raspberry が設定されているので、
  パスワードを変更します。
  RetroPieメニューから、RASPI CONFIG -> 1 Change User Password でパスワードを変更します。
 
 WiFiの設定
  RetroPieメニュー面から、WIFIを選択し、
  1 Connect to WiFi networkを選択、
  すると接続可能なSSIDが表示されるので接続したいSSIDを選択し、
  SSIDのパスワードを入力します。
 
 パッケージのアップデート
  RetroPieメニューから RETROPIE SETUPを選択し、
  U Update all installed packages を選択し、YESを選択するとアップデートが始まります。
  しばらくすると終了するので、再起動します。
 
 SAMBAの設定
  必要なROMファイルなどをRetroPieへ持ってくるために、Windowsマシンからフォルダーを共有するために、
  SAMBAの設定をします。
  RetroPieメニューから RETROPIE SETUP -> C Configuration / tools -> 828 samba - Configure Samba ROM Shares
  -> 1 Install RetroPie Samba shares と選択し、OKを押すと完了です。
  
  これでWindowsマシンのExplorerから "\\retropie" へアクセスできるようになります。
  ユーザー名パスワードを入力する画面が出たら、pi / 設定したパスワード を入力します。
  もし、 "\\retropie" でアクセス出来ない場合は、"\\ipアドレス" でアクセスできます。
 
 lr-px68kのインストール
  x68kのエミュであるlr-px68kをインストールする。
  まだ実験的なパッケージでソースからビルドする必要がある。
  しかもX68000のBIOSやHuman68kはシャープが公開しているので、それを利用する。
 
  RetroPieメニューからRetroPie SETUPを選択、
  -> Manage packages
   -> Manage experimental packages
    -> lr-px68k
     -> Update from source
  これだけで、ソースのダウンロードからビルドまでが自動で行われる。
  終わったら再起動する。
 
  PC上で、X68000用のファイルをダウンロードする。
   サイトは http://www.retropc.net/x68000/person/fsharp.htm
   ROMは http://www.retropc.net/x68000/software/sharp/x68bios/index.htm
   Human68kは http://www.retropc.net/x68000/software/sharp/human302/
  必要なファイルは
   cgrom.dat
   iplrom.dat
   iplromco.dat
   iplromxv.dat
   iplrom30.dat
   HUMAN302.XDF
 
  ダウンロードしたファイルをRetroPieへSAMBAを介して持っていく。
  上5つのROMファイルは \\retropie\bios\keropi へ配置する。
   ファイル名はすべて小文字にしておく。
  HUMAN302.XDFは、 \\retropie\roms\x68000 へ配置します。
 
  RetroPie では X68000 のROMファイルの拡張子は .dim/.DIM のみが有効になっているが .XDF も利用できるので設定する。
   RetroPie の画面からSTARTボタンを押し、QUIT-> QUIT EMULATION STATION を選んでEmulation Stationを終了する。
   $ sudo nano /etc/emulationstation/es_system.cfg
   と入力して、エディタを起動し、
   x68000 の拡張子(extension)の部分に、".XDF" を追加する。
  その後 $ emulationstation と入力することで、再起動する。
  すると今までトップメニューでは RetroPie しか選択できなかったのが、X68000 が追加される。
  X68000 を選択すると、HUMAN302 というファイルが見れるので、それを選択すると、
  エミュレーターが起動し、Human68k が起動する。
   キーボードから dir などのコマンドを入力すると動くのが確認できる。
 
  ちなみに、
   F12キー : ディスクイメージの入れ替えやリセットなど
   select+STARTボタン : エミュレーターの終了
  が行える。
 
  ただし、HUMAN302.XDF ファイルを別名でコピーして、
  そのイメージをドライブ1 で設定し、
   % format b:
  としてみたが、うまくフォーマットできなかった。
  もう少し遊んでみよう。
80ABEA60-CB1C-43E5-B794-7CC04E638C44.jpeg
nice!(0)  コメント(0) 

Raspberry Pi で IchigoJam [Raspberry Pi]

専用ハードで動くBASICインタプリタのIchigoJamが欲しいなと前から思ってところへ、
(IchigoJam はこちら)
Raspberry Pi 上で IchigoJam が動くというのを聞いたので試してみた。
https://ichigojam.github.io/RPi/ からラズパイ用のファイルをダウンロードして、
解凍したファイルをFAT32でフォーマットした SDcard にコピーする。
その SDcard をラズパイにセットしてラズパイの電源をOnすると、
すぐに IchigoJam の画面が出た。
そのまま簡単なプログラムを書いて RUN すると、プログラムが動いた。
(写真はなぜかさかさま)

IMG_4785.JPG

昔の電源ONでBASICインタプリタが立ち上がるMSXを思い出して、とても楽しい。
よく、雑誌に載ってたプログラムを入力して、改造して遊んでたころを思い出す。

この IchigoJam はネットには繋がらないけどラズパイのI/Oピンにもアクセスできるらしいし、
このままでプログラムを5つは保存しておける。
BASICの入門として子供に使わせるのも楽しいだろうか?


nice!(0)  コメント(0) 

Windows10 で bash on Ubuntu [Windows10]

Windows10 上で Linuxのバイナリがそのまま動くという、bash on Ubuntu を試してみた。

インストール
 最初は Windows上でLinux Subsystemの有効化を行う。
 スタートメニュー->右クリック->"プログラムと機能"
  ->左側のメニューで "Windowsの機能の有効化または無効化"
  ->"Windows Subsystem for Linux (Beta) をチェック
  ->再起動

開発者モードの有効化
 スタートメニュー->設定->更新とセキュリティ
  ->左側のメニューで"開発者向け"
  ->"開発者モード" をチェック

インストール
 コマンドプロンプトを起動して bash を実行する。
  bash
  "y" と入力するとインストールされる。
  ここのインストールでしばらく時間がかかる。
 ユーザー作成になるので、ユーザー名とパスワードを入力する。
 これでインストールは完了

 lsb_release -a とすると、
 Ubuntu 14.04.5
 と出た

host名の設定
 sudo vi /etc/hosts
  1行目の後ろに自分のhost名を追加する。

リポジトリの変更
 デフォルトでは海外のサーバーの設定されているので、日本のサーバーへ変更する。
  sudo vi /etc/apt/sources.list
   ubuntu.com を ftp.jaist.ac.jp/pub/Linux へ変更する。

パッケージのアップデート
 sudo apt-get update
 sudo apt-get upgrade

Git のインストール
 sudo apt-get install git

gcc のインストール
 sudo apt-get install build-essential libtool automake autoconf pkg-config
 gcc -v
  4.8.4 が入っている

インストールが完了したら、スタートメニューに Bash on Ubuntu on Windows が追加される。

ここで、Webサーバーなどなどが動かせるらしい。

Windows10 でffmpegをコンパイル [ffmpeg]

Windows10 でffmpegをコンパイルする。

ffmpegでAACエンコーディングするには自分でコンパイルする必要があったので、コンパイルメモ。
あまりメモを残していなかったので、メモがない部分は省略。
ffmpeg 3.0 からは緩和されてるらしいので、コンパイルは不要かも。

1. mingw64 をインストールして、コンパイルする環境を整える。
2. Windows版git環境をインストールする。
3. fdk-aac のコンパイル&インストール。
4. faac のコンパイル&インストール。
5. lame のコンパイル&インストール。
6. openh264 のコンパイル&インストール。
7. opus のコンパイル&インストール。
8. xvidcore のコンパイル&インストール。
9. x264 のコンパイル&インストール。
10. ffmpeg のコンパイル&インストール。


1. mingw64 をインストールして、コンパイルする環境を整える。
 省略
  pkgconfig の設定とか
  make の設定とか
  いろいろ設定したと思うけど覚えてない


2. Windows版git環境をインストールする。
 省略


3. fdk-aac のコンパイル&インストール。

 ソースのダウンロード
  wget http://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-0.1.4.tar.gz

 コンパイル
  cd fdk-aac-0.1.4
  ./configure --prefix=/mingw/x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --disable-shared
  make

 インストール
  make install


4. faac のコンパイル&インストール。

 ソースのダウンロード
  wget http://downloads.sourceforge.net/faac/faac-1.28.tar.bz2
  wget http://abechin.sakura.ne.jp/sblo_files/k-tai-douga/ffmpeg/faac-1.28.diff

 コンパイル
  cd faac-1.28
  patch -p1 < ../faac-1.28.diff
  ./bootstrap
  ./configure --prefix=/mingw/x86_64-w64-mingw32 --host=x86_64-w64-mingw32
  make

 インストール
  make install


5. lame のコンパイル&インストール。
 省略


6. openh264 のコンパイル&インストール。
 省略


7. opus のコンパイル&インストール。
 省略


8. xvidcore のコンパイル&インストール。
 省略


9. x264 のコンパイル&インストール。

 ソースのダウンロード
  git clone http://git.videolan.org/git/x264.git

 コンパイル
  ./configure --prefix=/mingw/x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --enable-static
  make

 インストール
  make install


10. ffmpeg のコンパイル&インストール。

 ソースのダウンロード
  git clone git://source.ffmpeg.org/ffmpeg.git

 コンパイル
  PKG_CONFIG_PATH=/mingw/x86_64-w64-mingw32/lib/pkgconfig \
   ./configure --arch=x86_64 --target-os=mingw32 --enable-runtime-cpudetect \
   --enable-nonfree --enable-gpl --enable-version3 --enable-libmp3lame \
   --enable-libfdk-aac --enable-libopus --enable-libopenh264 --enable-libx264 \
   --enable-libx265 --enable-libxvid \
   --enable-w32threads --disable-ffserver --disable-ffplay --disable-ffprobe \
   --disable-debug --extra-ldflags=-static --extra-cflags="-mtune=core2 \
   -mfpmath=sse -msse" --optflags="-O2 -finline-functions"
  make

 これで ffmpeg.exe が出来ているので、任意のディレクトリにコピーして使う。


Raspberry Pi 2 WheezyからJessieへアップデート [Raspberry Pi]

Raspberry Pi のOSが Debian 7 Wheezy から Debian 8 Jessie に更新されたということなので、
アップデートしてみた。
アップデートには3時間以上かかるので、時間に余裕がある時にした方がいいです。

1.Wheezy の状態で最新に更新して再起動する。
 % sudo apt-get update
 % sudo apt-get upgrade
 % sudo apt-get dist-upgrade
 % sudo reboot

2.apt の参照先を Jessie に変更する。
 wheezy となっているところを jessie に書き換える。
 % sudo vi /etc/apt/sources.list
  deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi

3.アップデート(ここに3時間以上かかる) して再起動する。
 % sudo apt-get update
 % sudo apt-get upgrade
 % sudo apt-get dist-upgrade
 % sudo reboot

 アップデート中に、sshやapacheやsambaなどの設定を初期値に戻すか聞かれるので、Y/N で設定しておく。

4.不要なパッケージを削除して、念のために再起動する。
 % sudo apt-get autoremove
 % sudo apt-get autoclean
 % sudo reboot

5.確認
 % hostnamectl
  Operating System: Raspbian GNU/Linux 8 (jessie)
 jessie と出ているので成功。

6.apacheの設定
 apache が動いているはずなのに http://(ラズパイのIP)/ にアクセスしても forbbiden となってうまく表示されない。
 apache のログ(/var/log/apache2/error.log) を見ると、下記のようなエラーが出ていた。
  AH01630: client denied by server configuration: (Directory名)
 apache が 2.2系から2.4系に変わっているために設定方法を変える必要があるようだ。

 % su -
 % cd /etc/apache2

 まずは "ServerName" を設定しておく。
 % vi apache2.conf
  ServerName 適当な名前

 次にドキュメントディレクトリの設定。
 "allow from all" の設定は "Require all granted" に変える必要がある。
 % vi sites-enabled/000-default.conf
  <Directory />
   Options FollowSymLinks
   AllowOverride None
   Require all granted
  </Directory>
 ("<"">"は全角で書いてあるが、半角で書くこと)

 apacheを再起動する。
 % apachectl restart

 ブラウザから http://(ラズパイのIP)/ にアクセスして、Webページが表示されることを確認した。

7.その他
 samba, minidlna(DLNAサーバー) など、アクセスできることを確認したところ、
 問題なく動いていることが分かった。





タグ:Raspberry Pi

Raspberry Pi 2 に Ruby on Rails の環境を [Raspberry Pi]

Raspberry Pi 2 に Ruby on Rails の環境を設定してみる。
インストールする環境は下記の予定
 Ruby 2.2系
 Rails 4.2系

まずは今入ってる Ruby のバージョンを確認する。
 % ruby -v
 ruby 1.9.3p194 (2012-04-20 revision 35410) [arm-linux-eabihf]

Rubyが古いので新しいバージョンをインストールする。

その前に必要なライブラリとsqlite3のインストールをする
 % sudo apt-get install libreadline-dev
 % sudo apt-get install sqlite3 ruby-dev libsqlite3-dev libsqlite3-ruby

rbenv のインストール
 % mkdir /mnt/hdd1/data/src/rbenv
 % cd ~
 % ln -s /mnt/hdd1/data/src/rbenv .rbenv
 % git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

 インストールしたrbenvにPATHを通す
 % vi ~/.bashrc
  export PATH="$HOME/.rbenv/bin:$PATH"
  eval "$(rbenv init -)"
 % source ~/.bashrc

ruby-buildをインストールする
 % git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

rubyのインストール
 % rbenv install -l
 とするとインストールできるバージョン一覧が出るので、その中から2.2.5をインストールすることにした。

 % export MAKE_OPTS="-j4"
 % rbenv install 2.2.5
 インストールに1時間ほどかかる

 % rbenv versions
 とすることで、2.2.5 がインストールされたことが分かる。
 2.2.5をデフォルトのバージョンに設定する。
 % rbenv global 2.2.5

 確認
 % ruby -v
 ruby 2.2.5p319 (2016-04-26 revision 54774) [armv7l-linux-eabihf]
 完了

bundlerをインストール
 % rbenv exec gem install bundler

Railsをインストール
 % gem install rails --no-ri --no-rdoc
 % rails -v
 Rails 4.2.6
 と表示された。
 これでRailsのインストールが完了。

テスト: myapp というアプリを作って動くことを確認する
 % mkdir /mnt/hdd1/data/src/rails
 % cd /mnt/hdd1/data/src/rails
 % rails new myapp
 % cd myapp
 % rails s
 とするとエラーが出た。therubyracer というものが見つからないらしい。
 therubyracerを有効化する。
 % vi Gemfile 下記の部分のコメントを削除して有効にする。
  gem 'therubyracer', platforms: :ruby
 % bundle install
 ここでまたしばらく時間がかかる。
 
 終わったらサーバーを起動する。ネット越しにアクセスするので、-bオプションを使用する。
 % rails s -b 0.0.0.0
 エラーが出なかったので、PCのブラウザからアクセスしてみる。
  http://ipアドレス:3000/
 なにやら動いているらしい画面が出たので、成功したらしい。
 CTRL+C で停止する。
 
 DBの処理が動くことを確認する。
 % rails generate scaffold User user_id name:string
 % rake db:migrate
 サーバーを起動
 % rails s -b 0.0.0.0
 またPCのブラウザからアクセスして確認する
  http://ipアドレス:3000/users
 なにやら画面が出て動いてるらしい。

これでRuby on Rails の環境が出来た。


タグ:Raspberry Pi

Raspberry Pi 2 mp4 ハードウェアエンコード [Raspberry Pi]

Raspberry Pi 2 にはmp4のハードウェアエンコーダーが入ってるので、動画変換が速くなるはず、
を試してみました。

ffmpegではまだ対応していないようなので、libav を試してみた。

まずは、faac,fdk-aacエンコーダーとx264エンコーダーのインストールはffmpegの時にインストールしているので、こちらを参照 。

libav ソースのダウンロードとコンパイル
 git clone git://github.com/libav/libav
 cd libav
 ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libfaac --enable-libx264 --enable-omx-rpi --enable-mmal
 make -j 2

 ./avconv -codecs > codecs.txt
 で codecs.txt ファイルに h264_omx が入っていることを確認した。
 DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_mmal ) (encoders: libx264 h264_omx )

動画変換テスト
 変換テストに用意した元データは約1分のtest.ts

 まずは、libx264 での変換は、
 CPU400%使って13分以上かかった。
  time ../src/libav/avconv -i test.ts -c:v libx264 -b:v 2000k -c:a libfdk_aac -b:a 48k -ac 2 -y test_libx264.mp4
  real 13m16.522s
  PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  2590 20 0 640m 368m 8128 S 394.7 39.8 1:35.10 avconv

 次はハードウェアデコーダーを使う h264_omx で変換してみたところ、
 CPU130%しか使っていないのに1分半で変換が終わった。
 ただし、TVでこのファイルを再生するとアスペクト比がおかしくて、4:3で再生している。
  time ../src/libav/avconv -i test.ts -c:v h264_omx -b:v 2000k -c:a libfdk_aac -b:a 48k -ac 2 -y test_h264_omx.mp4
  real 1m31.210s
   PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  2634 20 0 219m 39m 7728 S 130.2 4.2 0:28.47 avconv

 アスペクトの調整をしようと -sar 4:3 を追加してみる。
 結果変わらず。
  time ../src/libav/avconv -i test.ts -sar 4:3 -c:v h264_omx -b:v 2000k -c:a libfdk_aac -b:a 48k -ac 2 -y test_sar_h264_omx.mp4
  real 1m35.739s
  PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  2667 20 0 217m 37m 7844 R 123.3 4.0 0:14.24 avconv

 -aspect 16:9 を試してみるが、結果変わらず。
  time ../src/libav/avconv -i test.ts -aspect 16:9 -c:v h264_omx -b:v 2000k -c:a libfdk_aac -b:a 48k -ac 2 -y test_aspect_h264_omx.mp4
  real 1m33.503s
   PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  2705 20 0 221m 41m 7832 R 128.8 4.5 0:20.26 avconv

 いつものiPhone用 1280x720 16:9 に変換してみると、 -aspect 16:9 -s 1280x720
 TVで見るとアスペクト比がちゃんと表示された。
 ただし、時間が8分半かかってしまう。
 -s オプションを指定すると時間が延びるというブログを見たが、その通りになった。
  time ../src/libav/avconv -i test.ts -aspect 16:9 -c:v h264_omx -b:v 2000k -s 1280x720 -c:a libfdk_aac -b:a 48k -ac 2 -y test_aspect_h264_omx.mp4
  real 8m25.143s
   PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  2744 20 0 217m 37m 7868 R 104.5 4.0 0:41.68 avconv

他に -sar 16:9 や -sar 1:1 を試してみるが、TVで見るとアスペクト比があってない結果となった。
ハードウェアエンコーディングはうまく動いているように見えるけど、
いまいちアスペクト比が合わないので、もう少し調整が必要そう。
-s オプションのサイズ変換をして変換時間がもう少し速ければいいんだけどな。

iPhoneのVLCで再生してみると、全部のファイルが問題なく再生出来ることを確認した。
再生するソフトの問題なのかな?

タグ:Raspberry Pi
前の10件 | -
メッセージを送る