Category Archives: Uncategorized

Win: face_recognition

次のビデオを見ながら、数ヶ月の悩むのタネ、顔認識の課題は一気に吹き飛ばすの気がする。
https://www.youtube.com/watch?v=QSTnwsZj2yc
参考サイト:

しかし

环境配置

  • Python 3.3+ or Python 2.7
  • macOS or Linux
  • Windows并不是我们官方支持的,但也许也能用

在Windows上安装

虽然本项目官方并不支持Windows,但一些大神们摸索出了在Windows上运行本项目的方法:

使用Ubuntu虚拟机镜像文件安装配置虚拟机,本项目已经包含在这个镜像中

 

入館時に体温を自動チェックシステム

新型肺炎対策・AIによる顔認識および非接触型温度計を利用して体温を自動測定するシステムを開発中です。

DonkeyCarのフレーム上、カメラとサーモセンサー(amg8833)を装備し、この装置の前に立つと自動的に顔認識による個人特定と体温測定を行うもの。大学のキャンパス、教室の出入り口での体温検知による入館チェックなどを想定したシステムです。

 

Pixel入門とVSCode利用

古いMacまたはWindowsマシンを持って、最新版OSに対応してない、重くで使い物にならない、または最新版のgcc, VS Codeなどのツールが動作しない場合、Linuxをインストールして、多くのタスクが軽快に実行できるようになるだろう。

特にRaspberry Pi Desktop X86は、学習用Raspberry Piと同じUIを持つ、C言語、Python言語の勉強のみならず、便利な生産性アプリやプログラミング・ツールがバンドルされている。すべてDebianのビルドなので、大量の無料ソフトウェアが利用可能だ。
必要材料:
  1. MacまたはWindowsマシン(古いでもx86 CPUと512MB以上のRAMならOK)。
  2. 容量16G 以上のUSBメモリ(USB 3.0対応が望ましい)一個。
    (PCのSDカードスロットがあり、16G 以上のSD Cardでも可)
(小さいのUSBメモリは付けたままでも邪魔にならない)

メディア作成

公式サイトからISOイメージをダウンロードして、Win32DiskImagerなどを使って、USBやSDにイメージを書き込みます。
ダウンロード先は、こちらからも確認できます。
メディアから起動して、そのまま利用しても良い。起動時の立ち上げは時間がかかるが、利用時特に遅いと感じがない。
ハードディスクにインストールして利用すると、起動時の立ち上げは早くなるが、既存システムを誤って消去する恐れがあるので、十分検討してから行いましょう。

Win32DiskImagerの使い方

Win32DiskImagerを起動します。

フォルダマークのボタンを押して読み込むimgファイルを選択し、その右側のインストール先のドライブを書き込むドライブ(マイクロSDカード等)に変更します。imgファイルと書き込み先ドライブに間違いが無ければWriteをクリックします。

ブート

イメージを書き込んだUSBをPCに差し込んで、電源を投入します。持ちのPCに依りますが、BIOS設定画面を表示するために、[F2]または[ESC]キーを押します。

ラズパイのマークが表示されてブートがはじまります。しばらくすると、見慣れた Raspbian のデスクトップが表示されました。

コンパイラをインストール

Raspberry Pi Desktop X86には、コンパイラ(gcc)すでに含まれているので、特にインストールする必要がない。

VSCodeをインストール

ターミナルから、下記のコマンドでインストールする。
$ sudo su
# . <( wget -O - https://code.headmelted.com/installers/apt.sh )
# exit

これて導入完了。

導入後はメニューから code-oss を選択して起動する。

ソースコードコンパイル

C言語プログラムのファイル名を「hello.c」というファイルを作成します。ファイルの中身は「Hello, World!」という文字列を出力するプログラムです。

hello.cをコンパイルします。

$ gcc hello.c 

エラーが表示されなければ、OKです。

プログラムの実行

実行します。

$ ./a.out 
Hello, World

無事に実行できましたね。

画面コピーをとる

ターミナルから、下記のコマンドで画面コピーを取れる。
$ scort -sb

マウスでクリックした窓が、画面コピーを取れて、ホームに保存される。

ESP32-CAMをテスト

Aliexpressで昨年8月購入した5ドル+送料の激安 ESP32-CAMは放置したまま、冬休み期間テストしてみることに。

配線

ESP32-CAM自体シリアルーUSB通信機能がないので、プログラムを書き込んだりするためにはUSB/TTLシリアルコンバーターが必要になる。300円でAmazonから購入した、Raspberry Pi ラズベリーパイ用の USB-TTLシリアルコンソールのUSB変換COMケーブルモジュールのケーブル を使用した。黒い台はDonkeyCar 車台の不良品を利用。黄色テープも地面にDonkeyCarのトラックを作る際用意したもの。

IMG_3272

配線部分を拡大した写真です。青い線は、書き込み時には、ESP32-CAMのIO0とGNDをショートして行う。

USB-TTL ESP32-CAM
TXD ( 緑 ) UOR
RXD ( 白 ) UOT
( IO0 – GND )
5V 5V
GND GND

 

IMG_3266

プログラム

ボードマネージャーを使用してESP32ボードを追加する必要があります。

これを完了すると、Arduino IDEボードマネージャーにESP32ボードのリストが表示されます。このリストからA-Thinker ESP32-CAMボードを選択します。

使用するサンプルスケッチは、CameraWebServerスケッチです。次のようにロードできます。

  • Arduino IDEを開きます
  • トップメニューバーの[ファイル ]メニュー項目をクリックします。
  • 下にスクロールして、[  ]をクリックします。サブメニューが開きます。
  • サブメニューを下にスクロールして、Example for A-Thinker ESP32-CAMを探します。
  • この下には、ESP32のエントリが表示されます。それをクリックすると、別のサブメニューが開きます。
  • このサブメニューからカメラを選択します。
  • CameraWebServerを選択します

このスケッチはESPO32-CAMをフル機能のオンラインカメラに変え、顔検出機能と豊富なコントロールを完備しています。これは、ESP32-CAM機能の非常に印象的なデモです。

スケッチを使用する前に、ネットワークに合わせてスケッチを修正し、正しいESP32モジュールを選択する必要があります。

  • 「カメラモデルの選択」という行の下で、ボードの正しいエントリを選択する必要があります。私が使用したもの(そして最も人気のあるもの)はCAMERA_MODEL_AI_THINKERです
  • その下に、SSIDの行が表示されます。ここにネットワークのSSIDを入力します。
  • SSIDの下の行にネットワークアクセスパスワードを入力します。

ESP32-CAMは2.4 GHz WiFiネットワークでのみ機能することに注意してください。

スケッチのコンパイルには時間がかかる場合がありますが、これは正常です。完了したら、USBケーブルを取り外し、ジャンパー線を取り外してから、USBケーブルを再接続して、ボードの電源を再びオンにします。

シリアルモニターを開き、ボーレートが115,200 bpsに設定されていることを確認します。次に、ESP32-CAMモジュールのリセットスイッチを押します。

初期化情報に続いて、ボードがネットワークに接続し、IPアドレスを取得したことを示すメッセージが表示されます。IPアドレスは、http://192.168.0.180などのURLの形式になります。

このアドレスをコピーして、Webブラウザーのアドレスバーに貼り付けます。Webブラウザーは、ESP32-CAMが接続されているのと同じネットワーク上にある必要があります。

操作

ブラウザで、いろいろ操作できそう。

これで、カメラのWebページが表示され、いくつかのコントロールが表示されます。 

[ストリームの開始]ボタンをクリックして、ビデオをストリーミングします。画面上部のドロップダウンを使用して、ビデオのサイズとフレームレートを変更できます。

一応、顔の登録と認識までできたが、後日また補足する。

電源

ESP32は非常に低いスタンバイ電流で動作できますが、無線の動作時に大量の電流を消費するため、WiFiとBluetoothの両方のパフォーマンスに影響を与える可能性があります。

電源の問題があるかどうかを判断する1つの方法は、ESP32-CAMの起動時にシリアルモニターを観察することです。「ブラウンアウト状態」が検出されたというメッセージが表示された場合は、ESP32-CAMが供給できる電流よりも多くの電流を引き込もうとしている可能性があります。

参考

ESP32-CAM Video Streaming and Face Recognition with Arduino IDE

Python for Ubuntu

pyenvの環境構築

pyenvは、複数のPythonのバージョンを管理できるコマンドラインツール、特定バージョンしか正しく動かないて、環境構築に苦労することは、コレて解決!

まず必要なパッケージをインストールする必要。

$ sudo apt-get update
$ sudo apt-get install -y git build-essential libssl-dev language-pack-id

pyenvのレポジトリから、ホームディレクトリ下の.pyenvディレクトリにクローン。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

こうすることで、$HOME/.pyenvにレポジトリがクローンされる。

では、次にpyenvに必要な環境変数を設定していきましょう。今後もシェルの起動時に環境変数が設定されるように~/.bash_profile~/.bashrc * などのシェルの設定ファイルに以下のコマンドで変数定義のコードを追加。

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

* シェルの環境がbashではなく、zshであれば~/.zshrcなど環境に合わせて設定ファイルが違うので注意しましょう。

設定ファイルを再読込するためにも、シェルを再起動。

$ exec $SHELL

関連記事

  • http://ups.edu2web.com/2018/10/18/caffe1-install/
  • http://ups.edu2web.com/2018/10/20/tensorflow1-install/

Caffe(1) install

画像認識に定評のあるライブラリ・Caffeを使ってみたくなり、caffeを導入してみる。

Caffeとは

CAFFE(Convolutional Architecture for Fast Feature Embedding)は、カリフォルニア大学バークレー校で開発されたディープラーニングのフレームワークである。オープンソースのソフトウェアであり、BSDライセンスの元に公開されている[4]。ソースコードはC++で書かれており、Pythonインターフェイスが存在する[5]。

2017年4月、FacebookはCaffe2を発表した[11]。Caffe2には回帰型ニューラルネットワークなどの新機能が含まれている。2018年3月、Caffe2はPyTorchにマージされた[12]。

(wikipedia)

Caffe導入

Macでのcaffe導入は難しく挫折したので、UbuntuでCaffeを導入。Ubuntuの最新版18.04実機でも挫折した。チュートリアルによくある16.04を探しで導入してみることになる。

クラウドサーバなら、気軽にいろいろバージョンのOSを試せるので、この機にAlibaba Cloudを試す。

Caffeのインストールその1

まず「参考1」を見ながら、インストール

$ sudo apt-get install libatlas-base-dev libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler git

gitからCaffeのソースをダウンロードします。

$ git clone https://github.com/BVLC/caffe.git

いきなりmake

root@jupiter:~# cd caffe/
root@jupiter:~/caffe# make
Makefile:6: *** Makefile.config not found. See Makefile.config.example..  Stop.
root@jupiter:~/caffe# cp Makefile.config.example Makefile.config
設定ファイルがないね。作る。
root@jupiter:~/caffe# make
PROTOC src/caffe/proto/caffe.proto
CXX .build_release/src/caffe/proto/caffe.pb.cc
CXX src/caffe/common.cpp
In file included from ./include/caffe/common.hpp:19:0,
                 from src/caffe/common.cpp:7:
./include/caffe/util/device_alternate.hpp:34:23: fatal error: cublas_v2.h: No such file or directory
compilation terminated.
Makefile:591: recipe for target ‘.build_release/src/caffe/common.o’ failed
make: *** [.build_release/src/caffe/common.o] Error 1
root@jupiter:~/caffe#
撃沈!

Caffeのインストールその2

「参考2」を見ながら、再度インストール。

こちらはたくさんのパッケージの追加:
apt update && apt upgrade
apt install -y python python-pip python3-pip python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose python-tk python-yaml
apt install -y build-essential cmake git pkg-config libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev libhdf5-dev wget emacs vim gedit sudo
apt install -y –no-install-recommends libboost-all-dev
ここまで順調でしたが、
pip install —-upgrade pip
ここでエラーはたくさんでった!
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main
調べたら、「参考3」から、次の文を予め実行。
(予め alias pip=’python -m pip’)
これて続行できた。
pip install opencv-python scikit-image protobuf easydict cython
途中またエラーで進まない
    —————————————-
Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-install-xUyVVw/ipython/
You are using pip version 18.0, however version 18.1 is available.
You should consider upgrading via the ‘pip install –upgrade pip’ command.
エラーの理由がわからないが、言われた通り再度、
$ pip install –upgrade pip
Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/
Requirement already up-to-date: pip in /usr/local/lib/python2.7/dist-packages (18.0)
You are using pip version 18.0, however version 18.1 is available.
You should consider upgrading via the ‘pip install –upgrade pip’ command.
すでにup-to-date、またconsider upgradingしろうと!何これ?わからん。

Caffeのインストールその3

2回目のインストールエラーを無視して、
Makefile.configを見直し、
「CPU_ONLY := 1」のように#を外してCPUを指定して。
再度makeする。
root@jupiter:~/caffe# vi Makefile.config
root@jupiter:~/caffe# make
CXX src/caffe/common.cpp
CXX src/caffe/net.cpp
src/caffe/net.cpp:9:18: fatal error: hdf5.h: No such file or directory
compilation terminated.
Makefile:591: recipe for target ‘.build_release/src/caffe/net.o’ failed
make: *** [.build_release/src/caffe/net.o] Error 1
root@jupiter:~/caffe#
こちらのエラーは、「参考1」に対策があるので、
——————————–
“can’t find hdf5.h”などと言われた場合は、
まずlibhdf5-devをapt-getしたか確認しましょう。
インストールされているのにエラーを吐く場合は、
Makefile.configのINCLUDE_DIRSを修正します。
caffe/Makefile.config
#INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
——————————–
apt install libhdf5-dev
これて再度makeする
/usr/bin/ld: cannot find -lhdf5_hl
/usr/bin/ld: cannot find -lhdf5
collect2: error: ld returned 1 exit status
Makefile:582: recipe for target ‘.build_release/lib/libcaffe.so.1.0.0’ failed
make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1
root@jupiter:~/caffe#
またエラーが出る
こちらのエラーは、同じ「参考1」に対策があるので、
“/usr/bin/ld: -hdf5_hl が見つかりません”と言われたときは、
/usr/lib/x86_64-linux-gnuの中にシンボリックリンクを貼ります。
/usr/lib/x86_64-linux-gnu
$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
$ sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
その通りして、ついにコンパイルがエラーなく終了。

RunTest

# make runtest
[———-] 1 test from SolverTest/0, where TypeParam = caffe::CPUDevice<float>
[ RUN      ] SolverTest/0.TestInitTrainTestNets
[       OK ] SolverTest/0.TestInitTrainTestNets (1 ms)
[———-] 1 test from SolverTest/0 (1 ms total)
[———-] Global test environment tear-down
[==========] 1162 tests from 152 test cases ran. (59829 ms total)
[  PASSED  ] 1162 tests.
root@jupiter:~/caffe#
ついに成功

参考

  1. https://qiita.com/toujika/items/1787a4b83826261c88ec — Caffeをインストールしてサンプルを動かすまで
  2. https://qiita.com/yoyoyo_/items/ed723a6e81c1f4046241 — Caffeをインストールしたった
  3. http://icchy.hatenablog.jp/entry/2018/04/17/064443 — pip install –upgrade pip (10.0.0) 後の奇妙な挙動について