Dec 13, 2018

Raspberry Pi 2にscikit-learn 0.20をインストール

aptでpython-sklearnをインストールして、pythonで

from sklearn.neural_network import MLPClassifier

すると、見つからないというエラーになった。
Raspbian 8.0 (jessie)の現在最新のaptのpython-sklearnのバージョンは0.14.1-3だが、sklearn.neural_network.MLPClassifierはscikit-learn 0.18以降にしか無いようだ。

そこで、pipで新しいバージョンのscikit-learnをインストールしようとして、

sudo pip install --upgrade pip

するとpip3が壊れたりしたので、
sudo pip uninstall pip
sudo apt install --reinstall python-pip python3-pip

として修復し、virtualenvを使うことにした。

aptでpython-virtualenvをインストールして、

virtualenv (workdir)
cd (workdir)
. bin/activate
pip install --upgrade pip
pip install scikit-learn

とすると、scipyのmake中にblasやlapackが無いというエラーになった。
https://scikit-learn.org/stable/developers/advanced_installation.html
によると、scikit-learnのインストールにはlibatlas-devとlibatlas3-baseが必要とのことだが、scipyのmakeには他に、liblapack-devか、もしくはatlasに合わせるならlibatlas-base-devが必要のようだ(どちらでも成功した)。

aptでlibatlas-dev, libatlas3-base, libatlas-base-devをインストールして、改めて

pip install scikit-learn

すると、数十分後にRaspberry Pi 2からの応答が無くなった。scipyのmake中にメモリのスワップ領域が枯渇するようだった。

スワップ領域を1GB追加しても不足したので、2GB追加した。

su -
dd if=/dev/zero of=/swapfile bs=1024 count=2097152
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile

これによって、数時間かかるが、scikit-learnのインストールができるようだ。

ただ、時間がかかるし、makeが失敗して時間を取られるリスクがあるので、やっぱりaptでインストールできるものはaptでインストールすることにした。MLPClassifierと合わせてmatplotlibを使いたいが、もはやpipでmatplotlibをインストールする気にはならない。
現時点で手っ取り早くscikit-learn 0.20.xをインストールするには、以下のようにすれば良いと思う。

sudo apt install python-numpy python-scipy python-virtualenv libatlas-dev libatlas3-base libatlas-base-dev
virtualenv --system-site-packages (dir)
cd (dir)
. bin/activate
pip install --upgrade pip
pip install scikit-learn

※(dir)は任意のディレクトリ名

See more ...

Posted at 23:29 in PC一般 | WriteBacks (0)
WriteBacks

Dec 10, 2018

Raspberry Pi 2にUSBカメラを接続

昨年辺りから、Raspberry Piにカメラを付けて、Deep Learningさせたニューラルネットワークを使って物体認識させるのが流行ってるというか、今年の夏にTensorFlowが公式にRaspberry Piをサポートしたことで、定番から基本になりつつあるようだ。
近い内にAIを勉強しようと思っており(思い始めてからだいぶ経つが)、かつ、Raspberry Piを所有している身としては、一度やっておかないといけないと思っていた。

しかし、Raspberry Piのカメラモジュールは4,000円くらいするので、二の足を踏んでいた。筆者は貧乏性で、確実に元が取れると思えない限りはお金を使わない、よくそれで損をするタイプなのである。
そんな折、昔Skype英会話用に買ったUSBカメラが10回くらい使っただけで眠っているのを思い出した。2010年に買った、Logicool HD Webcam C270というやつである。思い出してからも、どうせ消費電力的に無理だろうと思っていたが、先月ふと思い立って繋いだら動いて、今の所特に電源異常は起こっていない。少し調べた限りでは、このカメラの消費電力が1.0WくらいでRaspberry Pi 2の消費電力が最大4.5W、使用しているACアダプターの出力が9.0Wなので、大丈夫のようだ。

PythonとCでOpenCVを使って動かしたが、安定的に動かすまでには結構試行錯誤したので、それなりに動くようになったコードを貼っておく。

●Pythonのサンプルコード

#!/usr/bin/python
import cv2

WINNAME = "Capture"
FRAME_INTERVAL = 30 # msec

CAPTURE_WIDTH = 1280
CAPTURE_HEIGHT = 720

ret = False
while ret == False:
	cap = cv2.VideoCapture(0)
	cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, CAPTURE_WIDTH)
	cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, CAPTURE_HEIGHT)
	ret, img = cap.read()

key = 0
while key != ord('q'):
	ret, img = cap.read()
	cv2.imshow(WINNAME, img)
	cv2.moveWindow(WINNAME, 0, 0)
	key = cv2.waitKey(FRAME_INTERVAL)
	if key == ord('s'):
		cv2.imwrite('capture.jpg', img)

cap.release()
cv2.destroyAllWindows()

実行する前に、

sudo apt install python-opencv
などとしてaptでpython-opencvをインストールしておく。

なお、Python3でも動かそうと思ったが、aptにpython3-opencvが無く、代わりにaptでpython3-pipをインストールして

sudo pip3 install opencv-python
とすれば良いと思うのだが、下のようなエラーになったので、今回は諦めた。
(pip3 install --upgrade pipとしてpip3を最新にしても同じ結果だった)
Could not find any downloads that satisfy the requirement opencv-python
Cleaning up...
No distributions at all found for opencv-python

●Cのサンプルコード

#include <cv.h>
#include <highgui.h>

#define WINNAME "Capture"
#define FRAME_INTERVAL 30 /* msec. */

#define CAPTURE_WIDTH 1280
#define CAPTURE_HEIGHT 720

int main(int argc, char *argv[])
{
	CvCapture *capture = NULL;
	IplImage *frame = NULL;
	int key;

	while (!capture)
	    capture = cvCreateCameraCapture(0);

	cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, CAPTURE_WIDTH);
	cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, CAPTURE_HEIGHT);

	cvNamedWindow(WINNAME, CV_WINDOW_AUTOSIZE);
	cvMoveWindow(WINNAME, 0, 0);

	do {
		frame = cvQueryFrame(capture);
		cvShowImage(WINNAME, frame);
		key = cvWaitKey(FRAME_INTERVAL);
		if (key == 's')
			cvSaveImage("capture.jpg", frame, NULL);
	} while (key != 'q');

	cvDestroyWindow (WINNAME);
	cvReleaseCapture(&capture);
	return 0;
}

コンパイルする前に、

sudo apt install libopencv-dev
などとしてaptでlibopencv-devをインストールしておく。

コンパイルは、次のコマンドで行った。

gcc camera_test.c `pkg-config --cflags --libs opencv` -lm -o camera_test

いずれも、sを押すとカメラ画像がcapture.jpgに保存され、qを押すと終了する。

See more ...

Posted at 17:36 in PC一般 | WriteBacks (0)
WriteBacks