Ubuntu13.10インストールの雑記 (betaからリリース版まで)

気が早いですが、Ubuntu13.10のベータ版を実機にインストールしてみました。

お約束の2点を。
・この時点でのUbuntu13.10は評価用のベータ版です。バグが残っている可能性があるため、あくまでリリースを待ち、導入する場合は自己責任で行いましょう。
・ここに書いた不具合はベータ版のものです。リリース版では解決している場合があります。


また、本記事は Ubuntu13.10 リリースまで、気づいた点などを更新する予定です。

それでは始めます。
なお、作業手順自体はUbuntu 13.04再インストール時の雑記に書いたままのものは省略しています。




インストール時の Ubuntu One設定を回避する

emailなどの設定項目に何も入力せず進めば、何も問題なくインストールを進めることができます。


デュアルディスプレイ起動時のノイズが出なくなった

Ubuntu13.04ではデュアルディスプレイ環境で出ていた起動時の画面ノイズが出なくなりました。今のところ不具合などもありません。
デュアルディスプレイ・デュアルペンタブレット共に、13.04の頃と同じように設定でき、動作も安定しています。

GitやHgをNautilusでチェックできる

RabbitVCS (Git)や TortoiseHg (Mercurial) が通常のリポジトリからインストールできます。
以前はPPAリポジトリを追加する必要がありました。
Gitリポジトリの状態をNautilus上で確認できる


システムテスト

大したことではありませんが、少しでも開発に貢献できればと思い、システムテストを実行しました。
システムテスト中に不具合が発生したものの、テスト自体は問題なく最後まで進み、システムのレポートをUbuntu開発サーバに提出することができました。

システムテスト実行中

Skype通話でサウンドの不調

10/01の状態:Skype Test Callはできるようです。
ただ、しばらくするとSkypeがノイズを鳴らしはじめます。

ccsmによるALTキーの無効が効くようになった

Ubutu13.10はデフォルトでは、Altキーをタスクバーの表示に使えません(Unityデスクトップのコマンド入力バーのショートカットになっている) 。
ccsmにてAltキーの拡張を無効にすることで、タスクバー表示などができるようになります。
Ubuntu13.04では、この設定をしても上手く動かない部分がありましたが、今回はAltキーを使えるようになりました。
Alt+PrintScreenによる単一ウィンドウのスクリーンショットも撮れるようになります。

ccsmにてALTキーの拡張を無効化



ワークスペースの切り替え

(注:2013/10/16にチェックしたら直っていました。)
横には行けますが、下に行けません。
ワークスペース自体は使えますし、キーボードショートカットも設定されているのですが、なぜか下に移動することができません。
とりあえず横移動はできるので、私の用途には支障ありませんでした。

Ctrl+Shift+Alt+rightで移動すると、ごちゃごちゃした作業スペースから最前面のウィンドウだけが隣のワークスペースに移動するので、スクリーンショットを撮るのに便利です。


「ウィンドウを隠す」ショートカットの設定  (Windows+D )




Rhythmbox

不具合などはありませんでした。
最初に少しつまづいた箇所がひとつ。ラジオで音がでることを確かめてから、いつもの監視ディレクトリ設定をしようとしたら、タスクバーに設定メニューが出ませんでした。
どうやら、ラジオを選択した状態ではタスクバーに出るメニューが通常時と異なるようです。

「ミュージック」の下にいつものメニューがあるので、以前のUbuntuと同じように使うことができます。



mozcを使う

リリースノートおよび、あわしろいくや様のブログにて、セットアップヘルパが紹介されています(わたしがUbuntu13.10をインストール した翌日に公開されて、個人的に大変助かりました)。


スクリプトを実行してmozcを導入。足りないパッケージはウィンドウで通知されるので、適宜導入しましょう。

mozcアイコン

beta環境では mozc-setup-helper の方を使用していたのですが、IME切り替えが少し上手くいかなかったのですが、Ubuntu13.10正式リリース後に、リポジトリ追加にあるパッケージを試してみたところ、解決していて、問題なさそうです。

リポジトリは
sudo add-apt-repository ppa:japaneseteam/ppa
を使ったほうが良いようです。
tester向けのリポジトリを使ったところ、一部の入力によってGeditが落ちる不具合が発生したためです。

(正式版で直っていることを確認しました)インストーラがSSDのパーティション初期化に失敗

正式リリース後に、修正されていることを確認しました。

インストール時にパーティション削除に失敗。
インストールの種類は、以前の教訓にしたがいクリーンインストールでした。
Ubuntuをライブ起動してパーティションテーブルを初期化しました(タイプはGPT)。
インストールの再試行は、(USBブートの)CDライブデスクトップではUbuntuのインストーラが起動しなかったため、installモードでのインストールを実行。
無事にUbuntuが起動。インストールに成功した模様です。
(インストール後のパーティションテーブルはmsdosになっていました。)
正式リリース時には直っていると思います。
(※正式リリース後に、修正されていることを確認しました。)

その他雑記


VirtualBox 4.2.18をExtensionPackと共に導入。問題なし。


一部のUSBサウンドデバイスが使えない問題が、13.10正式リリース版では解決した模様です。(参考URL1, 2)
・Sound Blaster Play! SB-PLAY(MODEL NO SB1140)
・プラネックス社製 PL-US35AP


100均の液晶保護フィルムを13インチのノートPCに貼ってみました

ノートPCの液晶保護フィルムが100円で買えるなんて、良い時代になりました。

ダイソーに行ったら、ノートPCで使えそうな液晶保護フィルムがあったため、衝動的に購入。



A4サイズと書いてあります。私が使っている13インチワイドのノートPCで使えるかどうかわからなかったのですが、家に帰ってサイズを測ってみると、どうやら使えるようです。
(A4サイズ: 210mm x 297mm 。枠まで覆うサイズ(13インチワイド MacBookPro用など)はありませんが、液晶画面だけなら、たぶんMacBookAir13インチなどでも使えると思います。)

もちろん、ノートPCに合わせてカットする必要はあります。
今回はノートPCから見て縦のサイズをカットして調整する必要がありました (横サイズも調整したのですが、正直必要なかったような気がしています)。




フィルム自体のレビュー。
製品には書いてありませんが、フィルタの種類は光沢のあるグレアです。
電源を切ると顔が映る。使っていても、顔の輪郭が映り込みます。
このあたりは、グレアフィルムとしては当然かと思います。
フィルムの透過率も表記されていませんが、貼ってみて、透明度が低いとは感じません。
ノートPCを使っている間、フィルムを意識することはありませんでした。
材質が良いのかどうかはわかりません。フィルムの薄さが透明度の高い理由なのかもしれません。

前のフィルムが長期使用で汚れてしまっていたこともあり、今回の100円均一フィルムへの交換は満足できるものでした。
とはいえ、作業ミスでホコリが入ってしまったので次はもっと上手に貼ろうと思います(使っているときは見えないので問題ありませんが)。


ノートPC用に激安の液晶保護フィルムが欲しい方はぜひ試すべきだと思います。
なにしろ100円なので、失敗も交換も気軽です。


今回は安価なフィルムによる改修でしたが、ノートPCのさらなる拡張を目指すならば、DVDドライブをHDDに換装してSSD搭載+容量増は検討する価値があると思います。

石粉粘土とクロッキー帳を購入 (多摩地区)

実際に住みはじめる前、東京にはなんでもあるのだろうなと思っていたのですが(そして実際、東京という括りであれば大抵のものは存在するのですが)、探していたものがフィギュア制作素材としてのファンド(石粉粘土)であったこともあり、ちょっと探すのに手間取りました。

ファンドとクロッキー帳(ファンドは400gと200g)

現在住んでいる多摩地区から、石粉粘土を買うためだけに秋葉原に行くのもなぁ、と思います。

インターネット通販ではAmazon経由で扱っている会社があるのですが、

石粉粘土500円+送料500円になってしまいます。
わざわざ買い物に行く手間を考えたら送料を払ってもよかったのですが、何かのついでに買ってこれる範囲で売っているなら、そちらで済ませようと考え、別の入手ルートを探した次第です。

直接「ファンド」で検索しても出てこないのは当然としても、キーワードは「画材」だったようです。ようするに「画材屋」を探せば良い。

立川にある世界堂というお店で発見。


そこでハーフサイズのファンドを見つけて、このサイズが売られているのを初めて知りました。
価格的にも、400g:500円で、200g:260円なので、使い始めてから水分が抜けないように保存する面倒を考えると、このサイズを買うのもありかなと考えています。

クロッキー帳を一緒に並べた状態

三菱ハイユニは立川駅の駅ビルで見つけて、あらかじめ確保していたものです。今回はサイズ比較用に置きました。

翌日、ファンドを保存するために食品用の密封袋を購入。
材料は確保できたので、まったりと作業開始です。

gstreamer-sdkの導入および、SSHによる音声の転送

もうそろそろ、自作アプリで音を出す方法を確保しようと考えました。
そこで、マルチプラットフォームで使えるライブラリとして、GStreamerを試しました。
環境はUbuntu 13.04 amd64です。

GStreamerチュートリアル・サンプルプログラムの実行の様子

マルチプラットフォームなサウンドライブラリの選択肢としては、他にlibaoやOpenAL Softなどがあるようです。

SDKの導入とサンプルソースを実行するまで

まずはGstreamerの公式ページから、DownloadSDK->Linuxと移動し、ドキュメントまで飛びます。


ドキュメントに書いてある方法で、SDKを導入します。
リンク先から gstreamer-sdk.list を入手したら、コマンド操作でSDKをリポジトリに追加します。
(FireFoxで試しましたが、右クリックで「リンク先をダウンロード」しなければいけませんでした)。

sudo cp gstreamer-sdk.list /etc/apt/sources.list.d/

wget -q -O - http://www.freedesktop.org/software/gstreamer-sdk/sdk.gpg | sudo apt-key add -
sudo apt-get update


sudo apt-get install gstreamer-sdk-dev


インストール後に、 /opt/gstreamer-sdk/bin/gst-sdk-shell  を実行するように書いてあります。これはどうやらパスなどをターミナルに設定するシェルスクリプトのようです。

設定したら、シェル上でpkg-configの出力を確認しました。
pkg-config --cflags --libs gstreamer-0.10
実行結果 (私の環境の場合)
-pthread -I/opt/gstreamer-sdk/include/gstreamer-0.10 -I/opt/gstreamer-sdk/include/glib-2.0 -I/opt/gstreamer-sdk/lib/glib-2.0/include -I/opt/gstreamer-sdk/include/libxml2  -pthread -L/opt/gstreamer-sdk/lib -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lxml2 -lglib-2.0 

Gitにてチュートリアルをダウンロードします。
git clone git://anongit.freedesktop.org/gstreamer-sdk/gst-sdk-tutorials

チュートリアルのソースが入っているディレクトリまで移動します。
cd gst-sdk-tutorials/gst-sdk/tutorials/

ベーシックチュートリアル1のコンパイル
gcc basic-tutorial-1.c -o basic-tutorial-1 `pkg-config --cflags --libs gstreamer-0.10`

チュートリアルを実行します。
./basic-tutorial-1

実行に成功すると、SINTELのプロモーションが再生されます。


あとは付属するツールのソースを見るか、GStreamer アプリケーション開発マニュアル 日本語訳などで使い方を学んでいこうかと思います。

aptで入手した場合、ファイルの配置場所は /opt/gstreamer-sdk/bin/
の下です。
これらについては、さらにGStreamerのソースをGitリポジトリから入手してソースを読みます。
 ソースはGStreamerリポジトリの、
 gstreamer/tools/
の下に存在します。
(GStreamerのソースをライブラリやプラグインを含む状態で、まとめてダウンロードできるリポジトリが見つけられませんでした。目的のプログラムソースは本体に含まれていたのでまあ良いのですが。)



GStreamerライブラリのビルド方法

ビルドに足りないアプリケーションを導入します。
(足りないパッケージは次のautogen.shが警告してくれます。)
sudo apt-get install libbison-dev flex -y

makeの前準備を行います。
このスクリプトが、Gitリポジトリから自動でgstreamer/commonのソースを取得します。
(今回はインストール先に、ソースディレクトリの一つ上のディレクトリを指定しています。)
./autogen.sh --prefix=$(basename $(pwd))

ビルドを実行します。
make
make install

以上で、GStreamer本体のビルドは終了です。
本体の標準機能は少ないようで、使用可能なエレメントがほとんどありません。
autoaudiosrcすら見つかりません。
特に理由がない限り、公式が配布しているバイナリを使ったほうが良さそうです。


ネットワーク越しのサウンド転送方法

マイクの使い方を gst-inspectを使った音声入力の取得 から、
音声の転送を動画の転送gst-launchを使ったネットワーク転送 から、それぞれ参考にさせていただきました。


事前にツールの配置されたディレクトリへ移動(cd /opt/gstreamer-sdk/bin)しておきます。

まずマイク入力で音声が取れることを確認します。
入力エレメントの存在を確認。
./gst-inspect-0.10 | grep audiosrc
autodetect:  autoaudiosrc: Auto audio source

マイク音声をそのまま出力します。
 ./gst-launch-0.10 autoaudiosrc ! autoaudiosink

送信・受信でシェルを2つ立てる必要があります。

受信側に受信サーバを立てます。
./gst-launch-0.10 tcpserversrc host=localhost port=53000 ! gdpdepay ! autoaudiosink

送信側で送信クライアントを実行します。
./gst-launch-0.10 autoaudiosrc ! gdppay ! tcpclientsink host=localhost port=53000


サーバ・クライアントは入れ替えることもできます。
(先にサーバを立ててからクライアントを実行しないと、クライアントは「〜への接続が拒否されました」として失敗終了します。)


sshポートフォワーディングを通したサウンド転送

sshポートフォワーディングを経由したサウンド再生をテストしようと思います。
メインで使っているユーザに一時的でもログイン可能にするのは怖いので、SSHのログイン方向は、main側からsshuser側、とします。
なお、SSHユーザの設定は、SSHライブラリをビルドしてみた記事の環境を、ほぼそのまま使用しています。


sshクライアント側で扱いやすいよう、今回は、音声ソースにマイクではなくOggの音楽ファイルを使用します。

Oggファイルの再生

前準備として、Oggファイルが再生できることを確認します。
./gst-launch-0.10 filesrc location="/home/sshuser/07 - Automatic analyzer.ogg" ! oggdemux ! vorbisdec ! autoaudiosink


ネットワーク経由のサウンド再生

ネットワークを経由でファイルが再生できることも確認しておきます。
sshでログインされる側のユーザ(以下sshuser)は音声出力できません。
sshuser側から、現在のユーザ(以下main側)へサウンドを送出することにします。

受信側(main側)で受信サーバを立てます。
./gst-launch-0.10 tcpserversrc host=localhost port=53000 ! gdpdepay ! autoaudiosink

送信側(sshuser側)で送信クライアントを実行します
./gst-launch-0.10 filesrc location="/home/sshuser/07 - Automatic analyzer.ogg" ! oggdemux ! vorbisdec ! gdppay ! tcpclientsink host=localhost port=53000

SSHトンネルの作成とサウンド転送

SSHトンネルを作ります。
前述の通り、SSHのログイン方向は、main側からsshuser側、とします。

sshuserに仕込んだ鍵のid_rsa.pubを取得して、main側からログインできることを確認します。
ssh sshuser@localhost


ログインが確認できたらログアウトして、あらためてSSHトンネルを作成します。
ssh -L  54000:localhost:54001 sshuser@localhost

受信側(mainユーザ)で受信サーバを実行します。
./gst-launch-0.10 tcpserversrc host=localhost port=54001 ! gdpdepay ! autoaudiosink

送信側(sshtestユーザ)のシェルで送信クライアントを実行します。
./gst-launch-0.10 filesrc location="/home/sshuser/07 - Automatic analyzer.ogg" ! oggdemux ! vorbisdec ! gdppay ! tcpclientsink host=localhost port=54000



以上の手順が上手く行っていれば、再生したOgg音楽ファイルが聴けるはずです。

libssh2をコンパイルしてみた


暗号化通信に興味が出たので、libssh2の使い方を調べてみることにしました。

libssh2のリポジトリと、付属のサンプル

libssh2が使えるようになれば、自作アプリケーションにssh2による暗号化通信を組み込めるかもしれないと考えています。
sshポートフォワーディングのような使われ方もしていますので、バイナリ送受信はできるわけですし。

実行環境はUbuntu 13.04 amd64です。

libssh2の入手とコンパイル


公式サイトからリポジトリの情報ページまで行ってGitリポジトリのURLを見つけました。
作業ディレクトリを作成し、その中でリポジトリを取得します。
 git clone git://git.libssh2.org/libssh2.git

取得したlibssh2の中にcdでディレクトリ移動して入ります。
最初にconfigureを作成。
./buildconf

configureを実行。
インストール先を指定したかったので、今回は--prefixオプションを付与しています。
(ソースのひとつ上のディレクトリをインストール先に指定。)
./configure --prefix=$(dirname $(pwd))

実行の際、ライブラリが無いことを怒られるので、
sudo apt-get install libssl-dev libxcrypt-dev -y

として、SSLなどのライブラリを導入します。
Makefileができているはずなので、コンパイルします。
make
make install


エラーがでなければ成功です。
ls ..
すれば、make install前には無かった include lib share のディレクトリが出来ていることが確認できるはずです。



サンプルの実行テスト

ソースのディレクトリの中にexampleディレクトリがあります。
その中には、大量のサンプルソースとMakefileが入っているはずです。
サンプルはmakeするまでもなく、ソースと共にビルドされています。

サンプルの実行テストを行うには、SSHで接続可能なユーザが必要となります。
つまり.sshの下にid_rsaid_rsa.pubが配置されたテスト用ユーザを作る必要があります。
(テストなので、自分で自分にSSH接続します。)

#sshサーバのインストール
sudo apt-get install openssh-server -y

#ユーザを作成
sudo useradd -m sshtest
sudo passwd sshtest
#ユーザにSSHキー(publicと秘密鍵) を生成して配置。実験用なのでパスフレーズはなし。
#(ssh-keygenで入力せずエンター。)
su sshtest
cd
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
#(ソースのexampleまでcd)
#実行
./ssh2


実行すると、以下のような結果が表示されます。
(XXは実際のフィンガープリントになります)
Fingerprint:  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
Authentication methods: publickey,password
    Authentication by password failed!
all done!

とりあえず、ユーザ名&パスワードが正しくないというエラーまで。


引数にユーザ名とパスワードを与えます。


./ssh2 127.0.0.1 sshuser-username sshuser-password
以下のような結果が表示されます。
Fingerprint:  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
Authentication methods: publickey,password
    Authentication by password succeeded.
all done!

成功したようです。自分で自分に繋げているだけですが。

サンプルのうち、ssh2.cはログインテストでした。
ssh2_exec.cはssh経由のコマンド実行ができるようです。
その他のサンプルは、必要になったらソースを読みつつ試してみようと思います。

SSHを組み込んだプログラムのコンパイルへ

コンパイルオプションにsshライブラリを指定するために、pkg-configを設定します。
そのためには、PKG_CONFIG_PATHに、sshライブラリのpkg-config設定ファイルを格納したディレクトリへのパスを指定する必要があります。
libsshの設定ファイルであるlibssh.pcは、コンパイルして生成したlibディレクトリの下、lib/pigconfig/libssh.pcに存在します。
export PKG_CONFIG_PATH=
"$(dirname $(pwd))/lib/pkgconfig/:${PKG_CONFIG_PATH}"
(実際は1行のコマンドです。
このあたりで複雑なパス指定にしてしまったことを若干後悔しはじめる。)
下記のコマンドを打って、絶対パスが入っていることを確かめます。
env | grep -i pkg

さらにpkg-configを打ってみて、includeとlibのパスが出力されることを確かめます。
pkg-config --cflags --libs libssh2


出力されるpkg-configのオプションを、ビルド時にgccへ与えれば、libsshを組み込んだプログラムをコンパイルすることができます。

GIMP2.9をコンパイルするスクリプト (Ubuntu13.04)

Ubuntu 13.04環境で、最新のGIMPをGitリポジトリから取得してコンパイルするスクリプトを公開します。
(2013/10/30 Ubuntu13.10で使用可能です)。

ダウンロードはgithubからどうぞ。

コンパイルに成功したGIMP(2013/09/14時点)


使い方は、ダウンロードしたスクリプトを2回、実行するだけです。
sudo ./gimp_make.sh --apt
./gimp_make.sh

詳細なオプションなどは、別途READMEおよびスクリプトそのものをご参照ください。

1回目の --apt オプションで、パッケージマネージャから導入可能なライブラリやアプリケーションを導入しています(要管理者権限)。
 2回目のオプション無し実行でGIMPのコンパイルを行います。また、GIMPのコンパイルに必要で、Gitリポジトリから入手する必要のあるライブラリの導入も、すべて自動で行います。


Ubuntu 13.04 環境で動作を確認していますが、無改造か少し変更すれば、12.04でも動作すると思います。


雑記

基本的にGIMPは、最新に近いバージョンのGEGLとBABLを要求します。
そのため、この2つはGitリポジトリから取得してコンパイルする必要があります。
また、その際にglibの最新版を要求されることがあり、glibも最新版をコンパイルして使用するようになっています。

これらの情報は、コンパイル時にチェック機能が働くのでその時にわかります。
「〜が不足しています」「〜のバージョンが古過ぎます。バージョンx.x以上が必要です」という表示が英語で出るようになっています。
とはいえ、ソースを落としてきて、一つずつ足りないライブラリを入手していく作業は面倒なので、スクリプトにまとめることにしたわけです。



GIMP2.6の時代、イラストに適したG-Penという機能が追加された、しげっち氏などによるgimp-painterというパッチがありました。(2.8版も開発中のようです。)
これを利用するには、Linux環境ではGIMPのソースを入手して、ユーザがコンパイルをする必要がありました。
このスクリプトはその時代に原型を作ったものです。

将来的には、GIMPのソースを把握して、何か貢献できれば良いなと思っているのですが、このスクリプトによって、GIMP開発の敷居を少しでも下げられれば良いなと思います。

phpによるシンプルな画像アップローダと、サンプルのソースコード

ファイルアップローダ検索して見つかるのが、古いPerlのコードだったりするのが不満で、仕方なしに書いたPHPによる画像アップローダプログラムです。
サンプルのソースコードでは、JavaScriptによりアップロード前の画像をプレビュー表示する機能もおまけに付けてあります。

ユーザ名・パスワードの入力欄も今回は必要ないので、
本当はさらにシンプル


特徴は、アップロード画像の取得処理の呼び出しが、関数で一行にまとまっていることです。
また、サンプルプログラムとして扱いやすいよう、アップロードフォームとアップロード後のページを同じページにしています。
phpファイルを配置して、アップロード画像の格納ディレクトリを作るだけで動作確認ができます。

アップロード後に別ページへ遷移したい場合は、form要素を書き換えて、遷移先ページにアップロード画像の取得関数を配置してください。



ページソースはgithubに置いておきました (ライセンスは修正BSDです)。

いちおう、以下にサーバ構築の手順も書いておきますが、参考程度に。

apacheとphpモジュールをインストール

Ubuntu Linuxならば、apt-getする。
 (sudo apt-get install libapache2-mod-php5)
Windowsならば、XAMPPをインストール。

ブラウザでhttp://localhostにアクセスしてページが表示されることを確認。
(phpの動作確認はphpinfoを使う手順などで行なってください。)

phpページソースを配置

今回はサブディレクトリを作って、その下に画像アップローダを作ることにします。

Webページのルートディレクトリは、
Ubuntu Linux ならば、 /var/www
WindowsのXAMPPならば、  c:¥xampp¥htdocs (¥は半角)

この下に upimg という名前でサブディレクトリを作ります。
(ディレクトリ名は任意)
この中に、upper_min.phpという名前でテキストファイルを作成して配置します。
githubから直接ファイルをダウンロードしても良いですし、テキストのコピーペーストでも構いません。

ブラウザで、Webページが見られることを確認します。
(URLは多分、http://localhost/upimg/upper_min.php です。)
このままでは画像アップロードができません。
画像の保存先ディレクトリを作り、パーミッション(権限)の設定をします。

アップロード画像を格納するディレクトリを用意

作成して、パーミッションを設定する必要があります。
ディレクトリのパーミッションを設定します。
シェルを開いて、phpファイルを展開しているディレクトリに移動します。
mkdir imgs/
chmod a+rwx imgs/
以上です。
phpファイルと同じディレクトリ内に、imgsディレクトリができていることを確認してください。
なお、Windows環境ではパーミッション設定は不要です。

本当はパーミッションの設定やアップロード画像の保存パスはもっと安全を工夫すべきなのですが、今回は一番簡単な方法をとりました。


アップローダ配置の手順は以上です。


XAMPP環境で日本語の画像ファイル名のアップロードに対応したい場合、別記事でPHPのアップローダがWindowsフォルダの文字コードに対応する方法を紹介していますので参考にどうぞ。
そのうち、これを含む機能拡張版を公開する予定です。


phpページソース(ミニマム版)

(繰り返しになりますが)ページソースはgithubに置いてあります。

ミニマム版と言いつつ、いくらか冗長な部分もあります。
拡張性を担保しているということで、ひとつご勘弁を。

phpページソース(拡張版)

(2014/01追記) 追加してgithubにアップしました。
・アップロード前の画像をプレビュー表示する( JavaScriptによる)
・同名ファイルがアップされても、前のファイルを上書きしない
・ファイルサイズが大きすぎた場合、エラーに文章として表示
 (PHPでアップロード可能なファイルサイズの上限値を取得する)
・WindowsのXAMPP環境で、日本語ファイル名が文字化けする問題に対処済み
 (XAMPP環境における日本語ファイル名の文字化け解決法)

などの機能が追加されています。

USBメモリで持ち運べるOpenCV開発環境

OpenCV2.4およびOpenCV2.2の開発環境を、USBで持ち運べるように構築しました。

github上でのこちら2.2版および、2.4.6版で公開しています。
ダウンロードして使ってください。

以下、解説は2.4.6版に準拠していますので、2.2版を使う場合は、適宜読み替えてください。

注意:
2013/11現在、2.4.6版は、最新のMinGW環境でコンパイルしたプログラムの実行に失敗します。
2.2版を使用してください。
また、2.4.6版を使用したい方は、古いMinGWを使用してください。
(2012/05付近のMinGWによるコンパイル成功を確認しています。)
また、ユーザ環境でコンパイルしたOpenCVライブラリならば上手く行くかもしれません。(参考URL)



カメラ映像の表示プログラムをコンパイルして実行した様子


通常の(VisualStudioを使った)OpenCV開発環境に対して、以下の特徴を持ちます。
・すでにOpenCVを導入しているPCでも、導入済みのOpenCVとお互いに影響がありません。
当然、古いバージョンでOpenCVが導入済みであっても、最新のOpenCV2.4が利用できます。
・USBメモリに入れて、開発環境ごと動作環境を簡単にコピーおよび持ち運びすることができます。
・Linux環境でもそのまま動きます。



イントロダクション

当時、所属していた大学の研究室でOpenCVを取り扱っていたので触ってみたことがあります。
その過程で、Webに多くの情報があるにも関わらず、どの方法に従っても上手く行かず、驚いた経験があります。
(このあたり、ARToolKitもそうでした。)
仕方がないので、Webの情報を参考にして繋ぎあわせ、独自に開発環境構築の手順を確立しました。

また、他にもこれを作った理由として、
・初心者がやりがちな「Webで調べて見つかるいくつもの方法で、いろいろなバージョンのOpenCVを導入しまくった結果、混在して環境が把握できない」というエセDLL HELL状態に巻き込まれるのを避けたい。
・OpenCV自体はマルチプラットフォームでLinux対応しているので、WindowsおよびLinux環境で、共通のソースとコンパイル手順が使えるようにしておきたい。
・ソース中のロードライブラリィ・マクロが汚いから嫌い(しかもこういったソースに限ってパス指定がフルパスで移植性が低い)。
などがあります。


OpenCV環境構築がむずかしい主な理由は、
・OpenCVのバージョンごとに使い方が大きく違う
    (バージョン 2.2, 2.3, 2.4 それそれディレクトリ構造が異なるなど)
・Visual Studioのバージョンごとに微妙に設定方法が違う
・作業者が「ライブラリ」に対する基礎的な知識を持っていない
あたりが大きいと思います。
単にライブラリの知識がないことだけが問題かもしれません。
こういったあたり、Visual Studioは初心者向けですが初心者の危険な泥沼でもある気がします。


今回はWindowsでの開発環境構築を紹介していますが、OpenCVを簡単に使いたいならばLinuxを導入することをオススメします。
環境構築がコマンド一発で済むからです。



「ライブラリ」「パス」「環境変数」について簡単に理解しておくとミスが減ると思います。

なお、本記事は以前に書いた記事Windows版Gtk+による、ウィンドウアプリケーション開発環境の作り方 の姉妹編です。
コピペして書き換えれば良いから楽に書けるなと考えていたら、OpenCV特有の問題を解決するために手順があちこち変わり、結局あまり楽ができませんでした。



プロジェクトディレクトリの使い方

githubからダウンロードしたプロジェクトディレクトリの使い方です。
プロジェクトディレクトリ本体の他に、OpenCV2.4のライブラリと、MinGW(Windows版gcc)コンパイラを入手して、プロジェクトディレクトリの中に配置する必要があります。

プロジェクトディレクトリは、右下にある
「Download ZIP」からダウンロードできる




 まずはプロジェクトディレクトリをダウンロードして解凍します。


OpenCV2.4ライブラリの導入

まずOpenCV2.4ライブラリから。
日本語Wiki2013年08月時点で、なぜかバージョン2.2のままです。本家ではすでにバージョン2.4を配布しているのですが。というか、2.2表記で配布しているのも2.2ですが、SourceForgeページ上部に最新版として2.4のリンクが表示されます。


.zipと.exeがありますが、とりあえず、OpenCV-2.4.6.0.exeをダウンロードします。


今回は他のOpenCV環境に影響を与えない目的があるため、以下の手順にします。(VisualStudioおよびその他の環境に影響を与えない)
インストール先フォルダも確認しておきましょう。インストール先に別のOpenCVが置いてあると、泥沼化の原因になります。


OpenCVライブラリを解凍する

前段階でダウンロードしたexeファイルから、opencvというディレクトリが作成されていると思うので、これをプロジェクトディレクトリの中へ、切り取り→貼り付けして、放り込みます。
これだけでOpenCVライブラリの配置は終了です。



MinGWコンパイラの導入

今回はコンパイラにMinGW(gcc)を使用します。MinGWは、コマンドプロンプトから使うコンパイラです。
公式ページで「Download」という単語をたどっていけば、そのうちSourceforgeのダウンロードページへ出ます。ページの上のほうあたりに、最新版インストーラへのリンクがあります。
ちなみにこの記事を書いた時の最新版は「 Looking for the latest version? Download mingw-get-inst-20120426.exe (662.7 kB)」でした。
インストーラを起動すれば、あとのインストールは簡単です。ただし、インストール中はインターネットに接続している必要があります。


普通のMinGWセットアップ手順では、このあとMinGWをシステムの環境変数に設定するのですが、今回は「開発環境を持ち運ぶ」というコンセプトに従って、後の!cons.batファイルで対応する手順を行います。

デフォルトでは、Cドライブの直下(C:¥MinGW)にMinGWがインストールされます。
このMinGWフォルダを中身ごとすべて、プロジェクトフォルダへコピーペーストして配置します。


この時点で、プロジェクトディレクトリのディレクトリ階層が
 OpenCV2.4-Standalone-Dev-Env-master
                opencv
                MinGW
                !cons.bat
                その他...
 となっているはずです。

コンパイルの実行

!cons.batをダブルクリックすると、コマンドプロンプトが立ち上がります。
このコマンドプロンプト上で、
make run
と入力してエンターすれば、付属しているhellocv.cコンパイルされ、実行されます。

PCに接続されたカメラを認識して、ウィンドウにカメラ画像が映れば成功です。
(ESCキー押下で終了)
カメラを検出できなかった警告が出たり、カメラ選択画面が出ても、コンパイルには成功しています。適当なUSBカメラを繋げば映るようになります。



このあとは?

OpenCVで作りたいものを作れば良いと思います。
サンプルのソースファイルhellocv.cの内容を書き換えて再コンパイル(make run)するだけです。

OpenCVの基本的なライブラリの使い方はOpenCV.jpのサンプルページが参考になります。

ソースコードの記述にメモ帳を使うのは大変つらいので、何か良いテキストエディタをプロジェクトディレクトリに入れて、一緒に持ち運ぶと良いです。
持ち運び用のテキストエディタとして、個人的にはTeraPadをオススメします。もちろん常用可能で、わたしはいつもTeraPadを使っています。
もちろん、開発PCにVisualStudioが入っているなら、テキストエディタとして利用する手もありです。

バージョン管理にはGitを使用しています。このあたり好みでhg(Mercurial)でも良いです。

Linux環境で動かしてみたい場合、本記事の最後あたりに手順を書いておきました。






備考:プロジェクトディレクトリを一から組み立てる


後から導入するOpenCVライブラリとMinGWコンパイラを除けば、基本的にすべてテキストファイルです。
何ら特別なファイルはないので、すべて自前で準備することができます。
詳しい仕組みを知っておきたい場合や、問題発生時にスムーズに対処したい場合には、この手順を知っておべきですし、自分でやってみることをおすすめします。



プロジェクトディレクトリの作成

空のディレクトリを作成して、ファイルを配置するだけです。

まず、空のディレクトリですが、C:ドライブの直下に作るのがオススメです。とはいえ、ホームディレクトリやデスクトップに作っても基本的には問題ありません。(というかそうなるように設定していきます。)
ディレクトリの名前も適当に付けます。hellocvなどでいいです。

コンパイルテスト用に、OpenCVアプリケーションのソースファイル「hellocv.c」
開発用コマンドプロンプトを呼び出すためのバッチファイル「!cons.bat」
コンパイル時のライブラリ指定などをあらかじめ記述しておくための「makefile」
を作成して配置します。


OpenCVのサンプルアプリケーション「hellocv.c」を用意する


コンパイルをテストするためのコードを用意します。
基本的には、OpenCV.jpのサンプルページが良いです。
コピーアンドペーストして、hellocv.cファイルを作成してください。

標準的なOpenCVプログラムの書き方を守っているコードを使いましょう。
個人ブログなどに記載されているコードは、保守されていなかったり、環境依存(汚いライブラリマクロなど!)であったりするため、避けたほうが無難です。
その他の選択基準としては、
#include <cv.h>
#include <highgui.h>

が入っているC言語のソースプログラムで、別途画像ファイルを必要としないこと、カメラのテストを兼ねてカメラ画像を使用すること、があります。

.txtの拡張子が変更できない問題を回避して、ファイル名をhellocv.cに変えてください。
ファイルのリネーム方法は、以下で説明する !cons.bat の手順をどうぞ。


開発環境バッチファイル「!cons.bat」

コンパイルはコマンドプロンプトで行います。
また、OpenCVアプリケーションをコンパイルするためには、環境変数を設定する必要があります。
MinGWのときのように、環境編集Pathを設定する方法もあるのですが、「他のOpenCV環境に干渉しない」目的のため別の方法をとります。
その方法とは、バッチファイルを作成し、環境変数を設定済みのコマンドプロンプトを呼び出すこととです。

コマンドプロンプトを呼び出すバッチファイルを書く

メモ帳を開いて、以下の一行を記入します。
cmd.exe
以上です。 !cons.txtという名前で保存しておいてください。
(なお、この名前に理由はありません。何でもいいです。)

テキストファイルをバッチファイルに変える

といっても、ファイルの拡張子を変えるだけの簡単なお仕事なのですが。
ですが、実はここが一番の難所です。
というのも、Windows環境は、デフォルトで拡張子を変えられないからです。

というわけで、Windowsの設定を変えます。
適当なフォルダを開いて、Altキーを押すと、タスクバーが出ますので、その中の「ツール(T)」 から「フォルダーオプション(O)」を呼び出します。
「表示」タブの詳細設定から、「登録されている拡張子は表示しない」のチェックボックスを外して無効にします。
 上の「フォルダーに適用(L)」ボタンを押して、全フォルダに適応します。

この状態で、先ほど作った !cons.txt ファイルを見ると、たぶん、「!cons.txt」か 「!cons.txt.txt」あたりのファイル名になっており、拡張子.txtがしっかり表示されているはずです。

ファイルを右クリックして出てくる「名前の変更(M)」から拡張子を変更します。
バッチファイルにするには、ファイル名の末尾が".bat"になっている必要があります。
ファイル名を、
!cons.bat
に変えてください。

では !cons.bat ファイルをダブルクリックして実行してください。
コマンドプロンプトが立ち上がれば、ここまでは上手く行っています。


OpenCVアプリをコンパイルできる環境変数を設定する

PATHを指定する必要があります。
SETコマンドを使えば、システムの環境変数を上書きする形で、そのコマンドプロンプトだけで有効な環境変数を設定することができます。
例:
set PATH=opencv\bin;%PATH%

コマンドライン上でそのまま入力して使えます。つまり、バッチファイルに書いて使えるということです。
なお、バッチファイルを編集するには、右クリックから「編集」を選択します。


!cons.bat


:: GCCがヘッダファイルを探索するための環境変数設定
:: &ヘッダファイルのインクルードパス
set C_INCLUDE_PATH=opencv\build\include\opencv;%C_INCLUDE_PATH%
:: opencv2へのパス追加
set C_INCLUDE_PATH=opencv\build\include;%C_INCLUDE_PATH%
:: C++対応(未確認)
set CPULS_INCLUDE_PATH=%C_INCLUDE_PATH%;%CPULS_INCLUDE_PATH%
::GCCが静的ライブラリを探索するための環境変数&パス指定
set LIBRARY_PATH=opencv\build\x86\mingw\lib;%LIBRARY_PATH%
::GCCが動的ライブラリを探索するための環境変数&パス指定
set PATH=opencv\build\x86\mingw\bin;%PATH%
:: "エイリアスの追加(make runできるようになる。)"
doskey make = mingw32-make $*
doskey rm = del $*
cmd.exe


なぜエイリアスの追加をするかというと、MinGWに付属しているmakeは、ファイル名がmingw32-make.exeであり、そのままではmakeと打って使うことができないからです。
doskeyコマンドはコマンドプロンプト上で打った内容を実行前に置き換えてくれるので、makeと打てばmingw32-make.exeが起動するようになります。
(これで、WindowsとLinuxの環境の違いを吸収しています。)

今はまだコンパイル作業ができないので、make(mingw32-make)が無事に呼び出せることだけ確認しておきましょう。
コマンドプロンプト上で、
make
と打って実行し、makeによる英語のエラーが出れば、makeの呼び出し成功です。
「操作可能なプログラムまたはバッチ ファイルとして認識されていません。」などと表示される場合、パスの指定かエイリアスの設定に失敗しています。



「makefile」の記述と使用

gtkと違って、OpenCVはコマンド手打ちによるコンパイルが現実的ではありません。
ライブラリに、pkg-configが 添付されていないからです。
そこで、makefileを作ってコマンド入力の負担を軽減します。
また、いずれにせよ、本格的な開発でソースの規模が大きくなればmakeを使うことになるかと思います。

makefileにはコマンド置換機能があるので、オプション指定などもコマンドラインより簡単に書けます。

makefileのファイル名は makefile であり、必ず拡張子が付いていないことを確認してください。
また、今回は利便性のため、同じ役割をもつmakefile.txtを作成します (といっても、今回の場合makefile.txtの方が本体ですが)。


makefileおよびmakefile.txtの内容は、下記の通りです。
ただし、makefileは行頭のタブが意味を持つ構文です。行の先頭の空文字はタブでなければならないので注意してください。

makefile
#makefileは、makefile.txtの内容を読み込むだけ
include makefile.txt

makefile.txt

#ソースファイル名
MAIN =hellocv.c
#実行ファイル名
prj =cv
#OpenCVライブラリオプション
ifeq ($(OS),Windows_NT)
# Windows 上で実行された
#バージョン2.4決め打ち
VER=240
#windows環境にpkg-configは標準で存在しないので、リンク指定を決め打ちする
CV_ARGS = -lopencv_core$(VER) -lopencv_imgproc$(VER) -lopencv_highgui$(VER) \
-lopencv_ml$(VER) -lopencv_video$(VER) -lopencv_features2d$(VER) \
-lopencv_calib3d$(VER) -lopencv_objdetect$(VER) -lopencv_contrib$(VER) \
-lopencv_legacy$(VER) -lopencv_flann$(VER)
CONS_BAT=!cons.bat
else
#Linux環境向け自動設定(下のwindows版設定をコメントアウトすると有効化)
#なお、pkg-configを使うと、OpenCVのバージョンは自動設定されるので、制限されない。
CV_ARGS =$(shell pkg-config --cflags --libs opencv)
endif
$(prj).exe: makefile makefile.txt $(MAIN) $(CONS_BAT)
gcc $(MAIN) -o $(prj).exe $(CV_ARGS)
run: $(prj).exe
./$(prj).exe
clean:
rm $(prj).exe


 

makefileの記述は以上です。



OpenCVライブラリとMinGWコンパイラの導入

ここまでの手順で、配布している環境と同じものができています。
よって、OpenCVライブラリとMinGWコンパイラの導入手順は、この記事の上の方で「ダウンロードしたプロジェクトディレクトリの使い方」とまったく同じです。

コンパイルの実行


コンパイルと実行は、以下の一行を打つだけで終わります。
make run
これまでの手順に問題がなければ、opencvアプリケーションが起動します。



その他雑記

!cons.batの記述は、OpenCVのバージョンによって変える必要があります。
主に、ディレクトリ構成が違うことと、コンパイルオプションの指定にバージョン番号が含まれていることが理由です。

OpenCV2.2のインストーラを実行すると、ディレクトリ階層は、
OpenCV2.2
       bin           (dllが入っている)
       include   (ヘッダファイルが入っている)
       lib            (libが入っている)
      ...(その他)
という構成になっています。

OpenCV2.4のexeを実行すると、ディレクトリ階層は、
opencv
        ...
        build
                ...

                x64
                x86
                         vc9
                         vc10
                         mingw  (MinGW用バイナリ)
                             bin    (.lib ファイル)
                             lib      (.dll.a ファイル)
という構成になっています。

また、OpenCV2.4では、コンパイラごとにバイナリが用意されています。


opencv2.2はpkg-configに対応しています(.pcファイルを持っている)。
今回作成した、makefileに記述されているライブラリ指定オプションは、gtkライブラリに付属していたpkg-configで引数を出力させて、それを(多少汎用的に)整形したものです。




opencv開発環境としてLinuxをオススメする理由。

開発環境の構築が、コマンド一発で済むからです。
sudo apt-get install libopencv-dev
また、Linuxではpkg-configなどでコンパイルオプションが自動設定されるため、OpenCVのバージョンの違いを気にしなくて済みます。

OpenCVが今後活躍する領域として、Linuxサーバ上のWebアプリケーションのマスは大きいと思います。


本記事のプロジェクトディレクトリをLinux環境で使う方法

Linux環境でプロジェクトディレクトリを使う場合、
・適当なターミナルを起動
・プロジェクトディレクトリへcdで移動した
・Windowsと同じコマンドの make run を実行します。
という手順で、コンパイルおよび実行することができます。
(!cons.batで行った環境設定は、Linuxではパッケージ導入時に自動で行われます。
そもそも!cons.batはLinuxでは起動しません。)


なお、本記事のmakefileは、Windowsとその他の環境を検出してオプションを変えることで、WindowsとLinuxの両方で使えるように工夫してあります。
(詳細はmakefileのコメント行に記載。)

Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換する

 Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換することができるが、上手く変換されない場合がある。   以前作った魔法陣イラスト素材をイラスト素材ストックサイトへ登録しようと思い立ち、改めて素材用にラスタライズ変換をかけようとした。   ラスタライズ変換...