Smile Engineering blog ( スマイルエンジニアリング・ブログ )

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

第3回 OpenFaceを動かすまで

2017-03-29 10:00:00 | 最新技術動向展開
前回はOpenFaceという顔認識に特化したディープラーニングライブラリを紹介させていただきました。
今回は実際にOpenFaceをインストールして、リアルタイムな顔認識デモを動かすまでの流れを解説したいと思います。ある程度Linuxの知識がある人を対象に書いています。
※試す際には、WebカメラとPCをご用意ください。

下記の流れで解説します。
1. Ubuntu仮想マシンの作成
2. OpenFaceおよび必要なソフトウェアのインストール
3. 動かしてみよう
※手順1と2はDockerを使うことでスキップできるようです。詳しくはこちら
 Dockerだと中身に触りづらいため、今回は自力でセットアップします。


具体的な解説に入る前に・・・今回使用したPCはこんな構成です。
・OS … Windows 7 Professional 64bit
・CPU … Core i5 3230M (2コア4スレッド)
・メインメモリ … 12GB
・ストレージ … SSD
※2013年代に発売したノートPCです。


--------

1. Ubuntu仮想マシンの作成
まずは動作環境を構築します。今回はVMWare Workstation Playerの仮想マシンにUbuntuをインストールして使用します。(VMWare Workstation Playerは個人利用の場合のみ無料で使える仮想マシン環境です。この記事ではすでにインストールされているものとします。)
ここから「Ubuntu 16.04 LTS 64bit版」のOSイメージファイルを取得してください。(2017年3月現在では「ubuntu-ja-16.04-desktop-amd64.iso」というファイルがダウンロードできました。)

ダウンロードしたら、そのOSイメージファイルを使ってVMWare Workstation Playerで新規VMをセットアップしてください。パワーオン後、自動的にOSがインストールされます。
セットアップ時のハードウェア構成では下図のようにハードディスク容量を40GB以上に設定してください。(初期容量でも足りますが、念のためです。)





ユーザ名やパスワード等を設定しつつOSのインストールが完了すると、自動的に再起動してログイン画面が表示されます。そのままログインして、ソフトウェアアップデートをしましょう。弊社ではアップデート完了まで20~30分ほど時間がかかりました。







アップデートが終わったら、再起動してください。


2. OpenFaceおよび必要なソフトウェアのインストール
次に、OpenFace本体とOpenFaceの動作に必要なソフトウェアをインストールします。端末アプリを起動してください。





端末アプリが起動したら、下記のコマンドを順に実行してください。長いですが、すべて必要なソフトウェアです。こちらも時間がかかります。弊社では全て実行し終わるまで1時間30分ほどかかりました。
※入力が必要なコマンドが混ざっていますので、一括実行は避けてください。

---- ここから ----
# aptパッケージの更新
sudo apt update
sudo apt upgrade

# 必要な apt パッケージのインストール
sudo apt install python-setuptools python-pip liblapack-dev libatlas-base-dev gfortran g++ build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev unzip cmake git python-dev python-numpy libboost-dev libboost-python-dev libboost-system-dev

# 必要な pip パッケージのインストール
sudo pip install numpy scipy matplotlib cython scikit-image dlib pandas txaio

# OpenCVのインストール
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/3.0.0/opencv-3.0.0.zip
unzip opencv-3.0.0.zip
cd opencv-3.0.0
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON .
make -j`nproc`
sudo make install
sudo cp ~/opencv-3.0.0/lib/cv2.so /usr/local/lib/python2.7/site-packages/
sudo ln /dev/null /dev/raw1394

# Torchのインストール
git clone https://github.com/torch/distro.git ~/torch --recursive
cd ~/torch
sudo dpkg --configure -a
bash install-deps
./install.sh # 最後にTorchをパスに追加するかどうか聞かれるので、yes
source ~/.bashrc
which th
# which th でpathが出力されない場合は下記を実行
# export PATH=~/torch/bin:$PATH;
# export LD_LIBRARY_PATH=~/torch/lib:$LD_LIBRARY_PATH;

# Torch用のLUAパッケージをインストール
for NAME in dpnn nn optim optnet csvigo cutorch cunn fblualib torchx tds image nngraph; do luarocks install $NAME; done

# OpenFaceのインストール
git clone https://github.com/cmusatyalab/openface ~/openface --recursive
cd ~/openface
sudo python setup.py install

# 追加で必要なものをインストール
cd ~/openface
./models/get-models.sh
./demos/web/install-deps.sh
sudo pip install -r demos/web/requirements.txt
---- ここまで ----


3. 動かしてみよう
手順2までで仮想マシンのセットアップ、必要なソフトウェアのインストールが完了しました。もうサンプルアプリが動く状態になっているはずです。

サンプルアプリを動かすには、ホストPCのブラウザから仮想マシンへアクセスする必要があります。そのために、仮想マシンのIPアドレスを調べましょう。端末アプリで「ifconfig」コマンドを実行してください。





IPアドレスを調べたら、「~/openface/demos/web/start-servers.sh」を実行しましょう。リアルタイムな顔学習・認識のデモプログラムが起動し、ブラウザからアクセスできるようになります。
下図のように「Starting factory ~~」というログが表示されたら正常に動作しています。





デモプログラムが起動したら、ホストOSのブラウザから先ほどのIPアドレスを使って下記URLへアクセスしてみてください。

http://<IPアドレス>:8000

どうでしょう?下図のような画面が見えましたか?この画面が見えていれば、しっかりと動いています! (※)
アクセスできると、Webカメラへの接続要求がポップアップで表示されます。許可してあげると、顔認識を開始しますので、お試しあれ。
※Webカメラの接続要求を許可するまでは、下図のようなカメラ映像は表示されません。







さて、ここまで読んでいただきありがとうございます。
一応、コマンド等は動くことを確認してこちらに記載していますが、環境によっては動かないかもしれませんので、あしからず。

今回はリアルタイムな顔認識のデモプログラムを実行しましたが、他にも顔がどのくらい似ているかの比較や、顔画像の人物分類のデモプログラムもあります。ご興味がありましたら、ぜひ触ってみてください。具体的な使い方は公式HPに記載されています。


今年度はこれで最後の投稿となります。
読んでいただいた皆様、どうもありがとうございました!


参考リンク

・OpenFace公式HP
https://cmusatyalab.github.io/openface/

・GitHub
https://github.com/cmusatyalab/openface

・OpenCVとdlibとOpenFaceでの顔検出と知見まとめ
http://vaaaaaanquish.hatenablog.com/entry/2016/06/28/004811


--------------

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

第2回 OpenFaceのご紹介

2017-03-06 09:30:00 | 最新技術動向展開
前回は「AIの歴史」を前後編でお送りしました。
今回はディープラーニングを使った手書き文字の認識にトライする予定でしたが、予定を変更しまして別テーマにてお送りします。


--------


皆さんは『ディープラーニング』と聞いた時、どんなイメージをお持ちでしょうか。私は一応IT業界の人間ですので、「とても高性能なPCが使われているのだろうな」とか、「たとえグラフィックボードを積んだPCでも学習にはとても長い時間がかかるのだろうな」とか、そんなイメージを持っていました。

ところが、そんなイメージに当てはまらないディープラーニングがある!ということを知りまして、記事にさせていただきました。


というわけで、今回はディープラーニングライブラリ『OpenFace』をご紹介します。

『OpenFace』は顔認識に特化したディープラーニングライブラリです。米カーネギーメロン大学(Carnegie Mellon University:CMU)にて開発されました。CMUはマサチューセッツ工科大学やカリフォルニア工科大学に並ぶ名門大学の1つだそうです。

そんな名門校で生まれたOpenFaceですが、いくつかデモプログラムが入っているため、インストールするだけですぐにディープラーニングを試すことができます。
ものは試し、と、「リアルタイムな顔の学習・認識」ができるデモを実際に動かしてみました。



てっきり重過ぎてまともに動かないと思っていたのですが、まさかまさかの、ノートPCでも動きました!ごくごく一般的なノートPCです。グラフィックボードなんて積んでいませんよ。すごいですね!
Webカメラから640x480ピクセル(30万画素)の写真を撮影して、だいたい1秒に1枚くらいのペースで学習・認識しているようです。
冒頭にも書きましたが、ディープラーニングは処理にとても時間のかかるものだと思っていたので、何だか時代に置いていかれた気分です。IT業界の人間なのに大丈夫か自分・・・?

太っ腹なことに、ソースコードはApache2.0というライセンスの元に公開されています。どうやって認識しているのか詳しくはわかりませんが、OpenFaceの公式HPの解説によるとこんな流れで処理しているようです。

  1. dlibまたはOpenCVで顔を検出する。

  2. dlibとOpenCVを使って顔部分だけを切り抜き、目と下唇が画像の同じ位置になるよう歪める。

  3. ディープニューラルネットワークを使用して顔を128次元の超球面上に配置する。
    この時に近くに配置されると同じ人の顔、遠くだと違う人の顔、となる。

うーん、1と2はまあ、雰囲気でわかる?として、3はもう何を言っているのだかさっぱりですね。超球面って何ですか?128次元ってどんなですか?

そんな謎だらけなOpenFaceですが、次回はOpenFaceのインストールと、リアルタイムに学習・認識するデモを動かすまでの流れを解説したいと思います。
きっとすぐに記事を書きます。きっとね・・・。


OpenFace公式HP
https://cmusatyalab.github.io/openface/

GitHub
https://github.com/cmusatyalab/openface


--------


monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

第1回 AIの歴史 後編

2016-12-12 09:30:00 | 最新技術動向展開
前編に続き、ディープラーニングに至るまでのAIの歴史について説明していきます。
前編では人工知能を作るための3つのアプローチについて、第1次AIブーム(パーセプトロン、ルールベースAI)について説明しました。
後編は第2次AIブーム、第3次AIブームについて説明していきます。

■1980年代~ 第2次AIブーム

・エキスパートシステム
ルールベースのアプローチとして、専門家の知識やノウハウを人間がルールとして記述し、そのルールに従ってコンピュータに処理させるエキスパートシステムは1970年代に開発され、1980年代には商用利用され始めました。

特定の領域に限れば、エキスパートシステムは実用で成果を上げられる初のAI技術でした。
例えばスタンフォード大学で開発された細菌感染症診断を行うエキスパートシステムのMycinは、細菌感染の専門医による診断結果の正しさ(80%)には劣るものの、専門ではない医師よりは良い診断結果(65%)を出しています。

エキスパートシステムは固定の推論エンジンと可変の知識ベースからなっており、推論エンジンが知識ベースを使用して推論を行います。
推論システムの高性能化を目指し、日本では1982年に通商産業省(今の経済産業省)による「第5世代コンピュータプロジェクト」が開始され、述語論理による推論を高速実行する並列推論マシンとそのオペレーティングシステムの開発が多くの日本企業により行われました。

知識ベースには専門家の知識やノウハウが「もし○○ならば△△である」という規則で記述されていますが、エキスパートシステムの最大の問題はこの知識を集める方法です。
専門家が普段無意識に行っている判断を記述することの難しさがあり、専門家が想定できなかったケースを記述することが出来ず、記述されなかったケースには対応できないという欠点がありました。

人間の専門家のように、経験知ではなく常識に基づいて新たな問題を解決することが出来ないという点で、どうしても人間の専門家には及ばないとわかってきたことで、AI技術としてのエキスパートシステムのブームは終わりを告げます。
しかしこの考え方は後に業務システムとして応用され、今も活躍しているBRMS(Business Rule Management System)へと発展していきます。

・ベイジアンネットワーク
ベイズ理論をベースにしたベイジアンネットワークは、1980年頃に研究が始められました。
これは統計・確率論的なアプローチによるAI技術です。

ベイズ理論とは、観測を繰り返すごとに確率を修正して正解に近づけるという考え方であり、それをもとにしたベイジアンネットワークは因果関係を確率で表現するグラフィカルモデルです。

ある事象に対する原因の確率と結果の確率をノードとし、それらをエッジで繋いだ形で表現されます。
観測によって得た新たな情報をベイジアンネットワークに投入するとそれぞれの確率が変化し、その確率に基づいて推論を行います。ベイジアンネットワークには原因から結果を推論することも、結果から原因を推論することも可能であるという特徴があります。

ベイジアンネットワークはネットショップでのお勧め商品紹介、健康診断結果からの疑わしい病気の推定、スパムフィルタ、ウェブ侵入検知など、様々な分野での実用例があります。
そして現在でも、ビッグデータ活用の手法の一つとして利用されています。

統計・確率論的なAIに対しては、「統計と確率が基本にあるため、それは知性や知能ではない」という批判があります。
膨大なデータの解析結果から単語の辞書的な意味を確率的に知ることはできるが、その単語の本当の意味を理解することはできません。
人間の知能そのものを作るということを目的とした場合、統計・確率論的なAIはいつか限界に達すると予想されます。

・ニューラルネットワークの進化
また、その一方でニューラルネットワークの概念・手法も進化していました。
単純パーセプトロンの持つXOR問題は入力層と出力層の間に隠れ層を入れることで解決できることが判明しています。隠れ層を入れたものを多層パーセプトロンと呼びます。



1979年に福島邦彦がディープラーニングの一種である、畳み込みニューラルネットワークの原型となるネオコグニトロンを発表しました。ただし、当時はコンピュータの演算性能の限界により、文字認識へ応用されるにとどまりました。

1986年に心理学者のデビッド・ラメルハートらにより、隠れ層を持つニューラルネットを高速に学習する訓練方法「誤差逆転伝播法」が発見されると、2度目のニューラルネットブームが巻き起こります。
ですが、この頃のニューラルネットワークは満足な精度を得られず、2度目のブームも収束しました。

そして80年代後半から90年代初めにかけては、資金難によるAIの冬第二期となりました。
ただしコンピュータが知識獲得を行うための機械学習技術については、AIブームとは別に90年代に成長期を迎えています。

■2000年代~ 第3次AIブーム

2000年代には、コンピュータの性能向上と低価格化、インターネットの普及によって、大量のデータを活用することが出来るようになり機械学習技術が発展します。

そして、2006年にジェフリー・ヒントンによってニューラルネットワークを多層化しても精度を損なわない手法が提唱されました。
これがディープラーニングの誕生です。

2012年、物体の認識率を競うILSVRCにおいて、ジェフリー・ヒントンが率いるトロント大学のチームはディープラーニングによって、エラー率が26%だった従来の手法に対して、エラー率17%という劇的な進歩を見せつけて注目を集めました。
その後もILSVRCではディープラーニングを使用したチームが毎年上位を占めるようになり、2015年にはエラー率が5%以下となっています。
ちなみに人間のエラー率は5%程度とのことで、静止画に限って言えば、人間の認識力を既に凌駕していると言えます。

ディープラーニングによる物体認識がそれまでの物体認識技術と違うのは、学習データから特徴を抽出する作業を人工知能が自ら行うという点です。
コンピュータが画像データから人や物などの物体を認識するためには、まず画像データから物体の輪郭や色の成分など、何らかの特徴を抽出する必要があります。抽出されるデータを特徴量と呼びますが、それまでの物体認識技術ではどのような特徴量を抽出するかは、専門家が細かく設計する必要がありました。

それに対してディープラーニングでは、大量の画像データをコンピュータに読み込ませて学習させるうちに、最適な特徴量を自ら導き出すことが出来るのです。

そして現在、ディープラーニングはAppleの音声認識システム「Siri」、Google等の画像検索エンジンなど、広く使用されています。


長くなりましたが、パーセプトロンに始まり現在のディープラーニングに続くAIの歴史を説明させていただきました。
次回は実際にディープラーニングを用いて手書き文字の認識にチャレンジしてみたいと思います。翌年1月の公開を予定しておりますので、お楽しみに!

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

第1回 AIの歴史 前編

2016-12-05 09:30:00 | 最新技術動向展開
今年度の最新技術動向展開プロジェクトはディープラーニングについてです。

つい最近では、グーグルが開発した人工知能「AlphaGo」が世界最強棋士に勝利するという快挙を上げたディープラーニング。
第1回は、そのディープラーニングに至るまでのAIの歴史について前後編に分けて説明していきます。

人間の知的活動を行う機械についてはコンピュータ誕生以前より、哲学・数学・論理学・心理学などの分野で論じられていました。
そして、1940年代に最初のコンピュータENIACが誕生した後、実現化に向けた試みが開始されました。

人工知能の概念は1947年にアラン・チューリングによって提唱されました。
そして、AI(Artificial Intelligence、人工知能)という言葉は、1956年の「人工知能に関するダートマスの夏期研究会(ダートマス会議)」にて初めて使用されました。

人工知能の研究は、人間の知能そのものを作ろうとする立場と、人間が知能を使ってすることを機械に行わせようとする立場の二つのアプローチが続けられてきています。
また、現在生き残り、成果を上げている人工知能へのアプローチは以下の3つに分類されます。

・脳科学的アプローチ
人間の脳の神経回路をモデル化することにより、コンピュータに学習能力を持たせるアプローチ。ニューラルネットワーク。
脳の中にあるニューロン(神経細胞)が、多数の他のニューロンから信号を受け取り、多数の他のニューロンへ信号を受け渡す動きをモデル化したもの。

・ルールベース・アプローチ
人間がルールを記述し、そのルールに従ってコンピュータに処理させるアプローチ。

・統計・確率論的アプローチ
データに内在する因果関係を統計的手法で分析し、その因果関係を確率として表現するアプローチ。

AI研究はこれまでに3度のブームを経験しています。
それでは、3回目である今回のブームまでの歴史を追っていきましょう。

■1950年代~ 第1次AIブーム
・パーセプトロン
コンピュータを用いた人工知能への最初のアプローチは、人間の脳の神経活動をコンピュータによって再現するという発想でした。

パーセプトロンは第1次AIブームの中心となった初歩的なニューラルネットワークです。
心理学者・計算機科学者のフランク・ローゼンブラットが1957年に考案し、1958年に論文を発表しました。
これは1943年に神経生理学者・外科医であるウォーレン・マカロックと論理学者・数学者であるウォルター・ピッツによって発表された形式ニューロンに基づいたものです。

ローゼンブラットが考案したのは2層の単純パーセプトロンでした。
入力層と出力層のみのシンプルな設計ですが、学習や予測ができることから注目を集めました。



しかし、1969年に認知科学者マービン・ミンスキーと数学者、計算機科学者、発達心理学者であるシーモア・パパートによって、単純パーセプトロンの重大な欠点が指摘されます。
それは単純パーセプトロンでは線形分離可能な問題しか解けないということでした。

線形分離可能な問題とは、グラフにプロットしたデータを直線で区切ることで真と偽に分類できる問題です。
具体的な例としては、単純パーセプトロンでは排他的論理和(XOR)を解くことが出来ません。
そして線形分離不可能な問題の方が多いということもあり、残念ながらニューラルネットワークによるアプローチは下火となってしまいました。



・ルールベースAI
また、人間の脳の模倣ではなく知的活動の再現という立場からのアプローチでは、ルールベースで記号処理を行う研究が行われていました。
ここで言う記号とは、数式やプログラミング言語、自然言語などで出てくる言葉を厳密に定義したものであり、この記号を色々な観点で処理するのが記号処理です。
応用分野としては、方程式を置換や因数分解などの数式変形を行うことで解く数式処理、定理を自動的に証明する自動推論、ソースコードを機械語に変換するコンパイラ、自然言語を別の言語に翻訳する機械翻訳などがあります。
(コンパイラなどは人工知能とは呼びませんが)

残念ながら、模倣や学習という概念がない記号処理による人工知能には「常識による推論が出来ない」という欠点があります。
記号処理では処理の対象を全て厳密に定義する必要があるのですが、ある問題を解決するためにはどこまでを処理対象(フレーム)とするべきなのかを、判断させるのが困難であるという「フレーム問題」が付きまといます。

また、この時代はコンピュータのスペックが低かったという問題もあり、現代では簡単な処理でも当時は多大な時間をかける必要がありました。
こうして、AIへの失望感が広がり、1970年代はAIの冬の時代となります。

後編へ続く。

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

ドキュメント指向型のNoSQL データベース MongoDB

2016-03-31 19:32:30 | 最新技術動向展開
今回はドキュメント指向データベースである MongoDB についてです。

※いまごろ 何故、NoSQLなの? という疑問もありますが、
 著者が触れたくなったのです。

MongoDB はC++言語で開発されたオープンソースのドキュメント指向データベースです。
ドキュメント指向データベースは、NoSQLに分類されるデータベースです。
NoSQLと言いますと、RDB(MS)ではないデータベースで、大きく分けて下記の分類のものがあります。

・キー・バリュー型(Key-Value Store型:KVS型)
・テーブル指向型
・ドキュメント指向型

※テーブル指向型は広義でKVS型の一種とされることもあります。

上記のうち、ドキュメント指向型に属す NoSQL データベースが MongoDB です。

RDBでは、レコードをテーブルで管理する構造となっていますが、
ドキュメント指向型ではドキュメントをコレクションで管理する構造となっています。

<RDBのレコード>
 ドキュメント

<RDBのテーブル>
 コレクション

<RDBのデータベース>
 データベース

MongoDB は、JSONのような形式のドキュメントを管理します。

例えばこんなドキュメントです。
-----
{
  username: "bob",
  address: {
    street: "123 Main Street",
    sity: "Springfield"
    state: "NY"
  }
}
-----

このようなドキュメントを管理、操作できるデータベースが MongoDB です。

MongoDB もそうですが、ドキュメント指向型データベースでは、スキーマ定義が不要です。
MongoDB の場合は、上記のようなJSONライクな構造を決める事がスキーマ定義と同等の役割となります。
同等な役割にはなりますが、RDBのスキーマ定義の概念とは大きく異なる点があります。
テーブルのスキーマにあったレコードしか格納できないのがRDBでの当たり前ですが、ドキュメント指向型データベースの場合は、コレクション(RDBでいうテーブル)にスキーマの異なるドキュメントが格納可能です。

先のドキュメントを users というコレクションに格納したとします。
先に格納してあるドキュメントと構造を合わせなければと思いますが、MongoDB の場合は、次のように例えば「age」という先のドキュメントに存在しなかった要素を保持したドキュメントを格納することが可能です。

-----
{
  username: "tom",
  address: {
    street: "123 Main Street",
    sity: "Springfield"
    state: "NY"
  },
  age: 18
}
-----

イメージはできましたね。

上記のドキュメントを、MongoDB のツール(CUI)を使って登録してみたいと思います。
MongoDB のインストールや、操作の詳細は割愛させて頂き、
CUI実行時のスクリーンショットを貼っておきます。



このような感じです。何となく先の説明と上記CUIのイメージがつながってきましたかね。

users というコレクションを作成。このコレクションにドキュメントを追加(insert)しています。
追加後に、users コレクションに対して検索(find)をかけています。
NoSQL データベース なので、SQL実行ではないですね。



SQLのWHERE句のように条件をつける場合は、どうするのでしょうか。
こちらも、CUI実行時のスクリーンショットを貼っておきます。



findの引数がありますね。findの引数が「{"address.state" : "NY"}」になっています。
ドキュメントの階層構造を意識した条件になっていますね。
「address配下のstateが"NY"のもの」という直感的な条件式ですね。


今回は、ドキュメント指向型のNoSQL データベース MongoDB を触ってみました。


monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、農業も手がけるIT企業