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分くらい時間がかかっているのはしょうがないかな?
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']])
無事につぶやけました。
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
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 と認識された。
飛行機雲は分類にもなくて、学習データにもないんだろうな・・・
まずはインストール
ここを見て、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 と認識された。
飛行機雲は分類にもなくて、学習データにもないんだろうな・・・
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:
としてみたが、うまくフォーマットできなかった。
もう少し遊んでみよう。
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:
としてみたが、うまくフォーマットできなかった。
もう少し遊んでみよう。
Raspberry Pi で IchigoJam [Raspberry Pi]
専用ハードで動くBASICインタプリタのIchigoJamが欲しいなと前から思ってところへ、
(IchigoJam はこちら)
Raspberry Pi 上で IchigoJam が動くというのを聞いたので試してみた。
https://ichigojam.github.io/RPi/ からラズパイ用のファイルをダウンロードして、
解凍したファイルをFAT32でフォーマットした SDcard にコピーする。
その SDcard をラズパイにセットしてラズパイの電源をOnすると、
すぐに IchigoJam の画面が出た。
そのまま簡単なプログラムを書いて RUN すると、プログラムが動いた。
(写真はなぜかさかさま)
昔の電源ONでBASICインタプリタが立ち上がるMSXを思い出して、とても楽しい。
よく、雑誌に載ってたプログラムを入力して、改造して遊んでたころを思い出す。
この IchigoJam はネットには繋がらないけどラズパイのI/Oピンにもアクセスできるらしいし、
このままでプログラムを5つは保存しておける。
BASICの入門として子供に使わせるのも楽しいだろうか?
(IchigoJam はこちら)
Raspberry Pi 上で IchigoJam が動くというのを聞いたので試してみた。
https://ichigojam.github.io/RPi/ からラズパイ用のファイルをダウンロードして、
解凍したファイルをFAT32でフォーマットした SDcard にコピーする。
その SDcard をラズパイにセットしてラズパイの電源をOnすると、
すぐに IchigoJam の画面が出た。
そのまま簡単なプログラムを書いて RUN すると、プログラムが動いた。
(写真はなぜかさかさま)
昔の電源ONでBASICインタプリタが立ち上がるMSXを思い出して、とても楽しい。
よく、雑誌に載ってたプログラムを入力して、改造して遊んでたころを思い出す。
この IchigoJam はネットには繋がらないけどラズパイのI/Oピンにもアクセスできるらしいし、
このままでプログラムを5つは保存しておける。
BASICの入門として子供に使わせるのも楽しいだろうか?
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サーバー) など、アクセスできることを確認したところ、
問題なく動いていることが分かった。
アップデートしてみた。
アップデートには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 の環境が出来た。
インストールする環境は下記の予定
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で再生してみると、全部のファイルが問題なく再生出来ることを確認した。
再生するソフトの問題なのかな?
を試してみました。
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