fc2ブログ

Rのimagerパッケージで遊ぶ

 前々回のブログでimagerパッケージを用いると、Rで画像処理ができそうなことが分かりましたので、早速味見をしてみました。
 カラー画像を読み込んで、グレー画像にした後、二値化して、ラベリングする所までと、エッジフィルタや画像回転を試してみました。コードは以下の通りです。
require(imager)

# Load Image
im <- load.image(system.file("extdata/parrots.png",package = "imager"))
plot(im)

# Gray Image
im.gray <- grayscale(im, method = "Luma", drop = TRUE)
plot(im.gray)
save.image(im.gray,"gray.png")

# Threshold
# Auto
im.thr.auto <- threshold(im.gray,thr="auto",approx = TRUE, adjust = 1)
plot(im.thr.auto)
save.image(as.cimg(im.thr.auto),"thr_auto.png")

# 0% - 100%
im.thr.0percent <-threshold(im.gray,"0%")
plot(im.thr.0percent)
save.image(as.cimg(im.thr.0percent),"thr_0percent.png")

im.thr.25percent <-threshold(im.gray,"25%")
plot(im.thr.25percent)
save.image(as.cimg(im.thr.25percent),"thr_25percent.png")

im.thr.50percent <-threshold(im.gray,"50%")
plot(im.thr.50percent)
save.image(as.cimg(im.thr.50percent),"thr_50percent.png")

im.thr.75percent <-threshold(im.gray,"75%")
plot(im.thr.75percent)
save.image(as.cimg(im.thr.75percent),"thr_75percent.png")

im.thr.100percent <-threshold(im.gray,"100%")
plot(im.thr.100percent)
save.image(as.cimg(im.thr.100percent),"thr_100percent.png")

# 0 - 1
im.thr.000 <-threshold(im.gray,0)
plot(im.thr.000)
save.image(as.cimg(im.thr.000),"thr_000.png")

im.thr.025 <-threshold(im.gray,0.25)
plot(im.thr.025)
save.image(as.cimg(im.thr.025),"thr_025.png")

im.thr.050 <-threshold(im.gray,0.50)
plot(im.thr.050)
save.image(as.cimg(im.thr.050),"thr_050.png")

im.thr.075 <-threshold(im.gray,0.75)
plot(im.thr.075)
save.image(as.cimg(im.thr.075),"thr_075.png")

im.thr.100 <-threshold(im.gray,1)
plot(im.thr.100)
save.image(as.cimg(im.thr.100),"thr_100.png")

# Labeling
im.thr.090 <-threshold(im.gray,0.90)
plot(im.thr.090)
save.image(as.cimg(im.thr.090),"thr_090.png")

im.label <- label(im.thr.090)
plot(im.label)
save.image(im.label,"label.png")

# Edgefilter
im.ef <- cannyEdges(im.thr.075)
plot(im.ef)
save.image(as.cimg(im.ef),"ef.png")

# Rotation
im.rot <- imrotate(im,45,384,256,interpolation = 1,boundary = 0)
plot(im.rot)
save.image(im.rot,"rot.png")
4行目のim画像は、imagerパッケージをインストールした際に、extdataフォルダに入っているコンゴウインコです。parrots_171126.png8行目でグレー処理を行います。gray_171126.png12行目以降、二値化処理をくどくど書いていますが、いろいろパラメータを触って確認するためです。14行目は、しきい値が自動設定の例ですが、「大津の二値化」を使っています。thr_auto_171126.pngしきい値は、0~100%で与える方法と0~1で与える方法があるようですが、確認すると全く同じにならないことが分かりました。詳細は不明ですが、ロジックが異なるのでしょうか?しきい値を設定して、それ以上の輝度値を持つ画素を検出しているようですね。しきい値を範囲で与えることができるのか?マニュアルを調べてみましたが、良く分かりませんでした(できないのかも・・)。imager_threshold_171126.png また、save.imageで画像をファイル保存しているのですが、二値化した後のオブジェクトは画像型(cimg)でないのですね。classコマンドで型を確認すると、pixset型とのこと。ちょっと気持ち悪い感じがしますが、as.cimgで変換して、ファイル保存しました。
> class(im.gray)
[1] "cimg" "imager_array" "numeric"

> class(im.thr.25percent)
[1] "pixset" "imager_array" "logical"
 60行目からは二値化後のラベリングを実行しました。thr_090_171126.pnglabel_171126.pngグレー画像で分かりにくいですが、ラベリングも普通にできるようです。
 70行目はエッジフィルタ(cannyEdges)を実行しましたが、時間がかかりますね・・。待たされます。OpenCVの方が圧倒的に速い感じがします。ef_171126.png最後、75行目は画像回転です。rot_171126.png
 基本的なことはimagerパッケージでできそうな気がしました。ただし、バリバリと画像処理を組むにはOpenCVなどの専用ライブラリを使った方が良いような気がしました。imagerパッケージは、あくまでも画像情報をRで使えるように仲介してくれるようなものだなと思いました。
スポンサーサイト



magentaで遊ぶ(1)

 AIで音楽を生成するmagentaで遊んでみました。LSTM(Long Short-Term Memory)ベースのRNN(Recurrent Neural Network)を利用したものです。いつもながらの難しい理論は置いといて、何ができるのかをまず確認です。
 ネット記事を確認すると、Docker環境で実行するのが多いようですね。Docker環境は以前に構築しましたので、早速Dockerに入って実行です。

 Docker Toolboxを立ち上げ、以下のコマンドを入力し、環境構築しました。
docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta
プログラム類は/usr/local/binフォルダ、学習モデル(数種あり)は/magenta-modelsフォルダ内にあります。作成データは/magenta-dataに保存します。

 コード進行を与え、プライマーキー(60:ドの音)を与える以下のコマンドを実行しました。
improv_rnn_generate \
--config=chord_pitches_improv \
--bundle_file=/magenta-models/chord_pitches_improv.mag \
--output_dir=/magenta-data/ \
--num_outputs=10 \
--primer_melody="[60]" \
--backing_chords="C G Am F C G Am F" \
--render_chords
magenta_run_171123.png10曲のMIDIファイルが作成されました。聞いてみると、中には不思議な?、あれっ?と拍子抜けするものもありました。いくつかは比較的普通に聞けそうなものがありましたので、何曲か紹介します。メロディとコードがそれぞれのチャンネルで作成されているMIDIファイルの音色を変更し、mp3ファイルに変更しています。




 音楽の才能のない私ですが、昔、MIDIで遊んでいた時もありました。SC-55mkⅡ(Roland)もまだ現役?・・。magenta、また遊び道具が増えてしまいました・・。

RでMXNetを使う(1)

 データ解析にRを使うことがあります。最近、統計手法だけでなく、機械学習(AI)についても、どのようなことができるのか情報をかき集めています。AI関連のプログラミング言語はPythonがデファクトスタンダードになっていますが、使い慣れた言語で書けるに越したことはないですね。その中で、MXNetを見つけました。Python、C++、Rなどの言語に対応しており、好感できます。Keras、TensorFlow、Chainerもいいですが、MXNetを味見してみようと思います。

まずは、どのようなことができるか、このサイトの画像分類をそのまま試してみました。
実行する上で、mxnet、imagerのパッケージが必要になりますので、インストールします。
install.packages("mxnet")
install.packages("imager")
また、学習済みのデータをこのサイトからダウンロードし、解凍したフォルダ(Inception)を、作成するRのプログラムと同じフォルダに置きます。Inceptionフォルダ内のファイルは以下の通りです。
2015/09/27  04:14        45,284,776 Inception_BN-0039.params
2016/07/01 07:23 102,921 Inception_BN-symbol.json
2015/09/26 17:09 602,188 mean_224.nd
2015/09/27 04:21 31,675 synset.txt
imagerパッケージは詳しく見ていませんが、画像処理ライブラリのようですね。後日、遊んでみようと思います。
require(mxnet)
require(imager)

model = mx.model.load("Inception/Inception_BN", iteration = 39)
mean.img = as.array(mx.nd.load("Inception/mean_224.nd")[["mean_img"]])

im <- load.image(system.file("extdata/parrots.png",package = "imager"))
plot(im)

preproc.image <- function(im, mean.image){
# crop the image
shape <- dim(im)
short.edge <- min(shape[1:2])
xx <- floor((shape[1]-short.edge)/2)
yy <- floor((shape[2]-short.edge)/2)
cropped <- crop.borders(im, xx, yy)
# resize to 224 * 224, needed by input of the model.
resized <- resize(cropped, 224, 224)
# convert to array (x, y, channel)
arr <- as.array(resized)*255
dim(arr) <- c(224, 224, 3)
# subtract the mean
normed <- arr - mean.img
# Reshape to format needed by mxnet (width, height, channel, num)
dim(normed) <- c(224, 224, 3, 1)
return(normed)
}

normed <- preproc.image(im, mean.img)

prob <- predict(model, X=normed)
dim(prob)

max.idx <- max.col(t(prob))
max.idx

synsets <- readLines("Inception/synset.txt")
print(paste0("Predicted Top-class: ",synsets [[max.idx]]))
4行目で学習モデル、5行目で平均化画像、7行目で評価画像を読み込んでいます。
29行目で評価画像をpreproc.image関数で224×224サイズに変換・正規化し、31行目で予測をしてているようですね。流れはシンプルです。
平均化画像を調べてみると、array型データでそのまま表示すると、以下の通りです。mean_img1_171123.pngcimg関数で画像化するとこんな感じでした。(正しいのかは自信ありませんが・・)
m_img<-as.cimg(mean.img)
plot(m_img)
mean_img2_171123.png 以下、何枚か実行してみた結果です。1枚目の例題の「コンゴウインコ」は当然ですが、問題なし。ImageClassify1_171123.png2枚目の柴犬の豆助は「チャウ・チャウ」と判断。「チャウ・チャウとちやうんちゃう・・(ベタ)。」ただ、犬は認識してますね。ImageClassify2_171123.png3枚目の「アフリカゾウ」もバッチリ。ImageClassify3_171123.png4枚目の「栗毛の馬」も問題なし。色もきちんと判断しています。ImageClassify4_171123.png最後、5枚目の零戦も「戦闘機」と判断できました。ImageClassify5_171123.png 画像認識、大したものです。また、Rで画像認識ができることも新しい発見でした。気軽に遊べそうです。

Windows10 Proをインストールする(3)

 前回の続きです。インストールが始まり、よく見る画面が出てきました。Win10Pro_Install13_171105.png
 その後のインストールの流れと設定は以下の通りです。
・接続する → 「接続 ネットワーク」(ここでは有線LAN)を選択し、「次へ」。Win10Pro_Install14_171105.png・すぐに使い始めることができます →「簡単設定を使う」を選択。Win10Pro_Install15_171105.png・このPCはだれが所有していますか? → 自分が所有しています。Win10Pro_Install16_171105.png・自分用にセットアップする → Microsoftアカウントを入力し、次へ。Win10Pro_Install17_171105.png・パスワードの入力 → Microsoftアカウントのパスワードを入力し、サインイン。Win10Pro_Install18_171105.png・パスワードの代わりにWindows Helloを使用します → この手順をスキップする。Win10Pro_Install19_171105.png・どこでもファイルにアクセス → 次へ。Win10Pro_Install20_171105.png・はじめまして、Cortanaと申します。 → Cortanaを使う。Win10Pro_Install21_171105.pngWin10Pro_Install22_171105.png・お使いのPCには、適用可能な更新プログラムがあります → 「今は実行しない」を選択。Win10Pro_Install23_171105.png今回、クリーンインストールをやり直して計2回行ったのですが、1回目はここでこの更新プログラムを実行してしまいました。その時は、最終的にCreators Update(バージョン1703、ビルド15063)されて起動しましたが、その後のパッチ等のWindows Updateでエラーが続出しました。せっかくのクリーンインストールで不安定になるのも避けたかったので、結局、Creators Updateは諦めて、2度目のクリーンインストール(Anniversary Updateのまま)に踏み切りました。やれやれです・・。
更新プログラムを実行した時の画面は以下の通りでした。Win10Pro_Install24_171105.png
Win10Pro_Install25_171105.pngインストールの際にPCの再起動を要求される場合がありますが、その際はUSBインストールメディアは抜いて、BIOSもHDDブートに変更しました。USBメディアを挿したままだと、再度インストーラが起動してしまいます・・。Win10Pro_Install26_171105.png更新プログラムの構成も終わって、無事にセットアップできたようです。Win10Pro_Install27_171105.png
長い道のりでしたが、2回目のクリーンインストールで無事にセットアップ完了です。Windows10 Pro起動後すぐに、気まぐれで勝手なWindows Updateをしないように(手動設定に)したのは言うまでもありません。再度、教訓:『不用意なUpdateは行わない』。

Windows10 Proをインストールする(2)

 前回の続きで本題です。万が一(かなりの確率で?)のシステム復旧に備えての備忘録です。

 クリーンインストールする前には当然ですが、データ類のバックアップは取っておきました。私自身、基本的に外付けHDDにデータを保存しているので、追加で家族分のユーザ関連情報(マイドキュメント、ミュージック(iTunes情報)やデスクトップ上のファイル)のバックアップを取った上で、いざスタートです。以下の説明写真はiPad miniで撮影したもので、ピンボケ、台形補正等は行っておらず、見づらい所がありますが、ご了承ください。

 セットアップ用のUSBメディアをPCに挿し、電源を入れました。いつも使っている外付けHDDはインストールが終わるまで取り外しておきました。まずは、USBからブートするようにBIOS設定を変更しました。私のPCの場合、「1st Boot Device」の「Internal HDD Devices」を「USB Floppy Device」に変更し、また「Hard Disk Drives」の「1st Boot Device」を「Disable」にし、起動させました。BIOS_setting1_171105.pngBIOS_setting2_171105.pngBIOS_setting3_171105.png 起動画面は「Windows Boot Manager」で「Windows Setup (64-bit)」を選択。Win10Pro_Install1_171105.pngWindowsセットアップ画面の言語(日本語)を確認し、次へ。Win10Pro_Install2_171105.png「今すぐインストール」ボタンを押すと、ライセンス認証画面が出ますので、ここでプロダクトキーを入力し、次へ。Win10Pro_Install3_171105.pngWin10Pro_Install4_171105.pngプロダクトキーは購入パッケージ内に入っているカードに記載されていました。Windows10Pro_LisenceSheet1_171105.pngWindows10Pro_LisenceSheet2_171105.png ライセンス条項の「同意します」にチェックを入れ、次へ。Win10Pro_Install5_171105.pngインストールの種類は、アップグレードではなく、「カスタム」を選択しました。Win10Pro_Install6_171105.png
 次は、パーティションの設定ですが、今まで使用していた情報が書かれていたので、その削除から行いました。Win10Pro_Install7_171105.pngWin10Pro_Install8_171105.png既存のすべてのパーティションを削除し終え、1つのパーティションが表示されている状態で「次へ」を押すと、Win10Pro_Install9_171105.pngシステム領域を作成する旨を聞いてきますので、「OK」ボタンを押しました。Win10Pro_Install10_171105.pngWin10Pro_Install11_171105.png最終的に、システムとプライマリの2つの領域が作成されました。「次へ」ボタンを押すと、インストールが開始しました。Win10Pro_Install12_171105.png この続きは、長くなりそうなので、次回お話しします。

Windows10 Proをインストールする(1)

 10月もあっという間に過ぎて行った感があります。最近の私のブログ記事は「パソコンの環境設定ネタ」が非常に多いような気がしています。純粋な技術トピックスをアップできていませんね・・(反省・・)。
 Windows10 Homeの自動アップデートごとに問題が起きて対応したり、そのためかMacやLinux(ubuntu)に「安住の地」を求めている感もあります。

 結局、前回お話しした通り、Windowsの無差別殺人のような自動アップデートを避けるために、Windows10 Proを購入しました。マイ◯ソソフトの思う壺ですね・・。恨み節です。
 USBメディアが付属したAnniversary Update(バージョン1607、ビルド14393)をしたもので、楽天(ソフマップ)で購入しました。(Amazonより700円ほど安かった)Windows10Pro_LisenceKey1_171105.pngWindows10Pro_LisenceKey2_171105.png 今回、Windows10 ProをインストールするPCは家族共用で利用しているデスクトップPC(DELL XPS 8500、Core i7-3770)で約5年間使い込んでいるもの。Windows7 Homeを無償でアップデートし続けて使っていました。

 また、近いうちに「必ず」トラブルを起こしてくれる?と思いますので、その時に路頭に迷わないように「クリーンインストール」の手順を残しておこうと思います。・・というのも、クリーンインストール(1回目)が失敗?して、以下の不具合があり、結局もう一度やり直したからです。

 ① インストール後のWindows Updateに失敗する。(厳密に言うと、インストール(バージョン1607)の際に、誘導されてCreators Update(バージョン1703)まで同時に行ってしまい、インストール後の「1703の累積更新プログラム」のUpdateにことごとく失敗する不具合が発生。原因は不明。そもそもバージョン1703がうまくインストールされていない?)

 ② 家族の環境設定を行った際に、クリーンインストールする前の「不具合のままの環境(ブラウザEdgeが動かない)」を継承してしまった。(今から思うと、家族のユーザアカウントの設定方法がおかしかったと思われます)

 2回目のクリーンインストールは、1703に更新するのは止めて、購入パッケージの1607のままで行いました。それで、ようやく不具合なしの状態にすることができました。やれやれです。

 教訓『不用意なUpdateはしない。』

 今回も、前置きだけで終わってしまいました。本題は、次回に。毎度すみません・・。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: