Building a Real-Time Object Recognition App with Tensorflow and OpenCV の方の github に上がってるソースを動かしてみたメモです。
この方の環境と僕の環境が違ったので。
- Anaconda / Python 3.5
- TensorFlow 1.2
- OpenCV 3.0
以下の Dockerfile を作って。
FROM ubuntu:16.04
RUN apt-get update --fix-missing \
&& apt-get upgrade -y \
&& apt-get install -y \
build-essential \
cmake \
git \
wget \
bzip2 \
sudo \
wget \
bzip2 \
ca-certificates \
curl \
unzip \
libgtk2.0-0 \
&& rm -rf /var/lib/apt/lists/*
# Anaconda3-4.2.0 install
RUN wget https://repo.continuum.io/archive/Anaconda3-4.2.0-Linux-x86_64.sh && \
bash Anaconda3-4.2.0-Linux-x86_64.sh -b && \
rm -f Anaconda3-4.2.0-Linux-x86_64.sh
ENV PATH $PATH:/root/anaconda3/bin
# OpenCV install
RUN conda install -c https://conda.anaconda.org/menpo opencv3
こんな shell script 作って。(run.sh とする。)
IMAGE=kidapu/tf-realtime
CONTAINER=tf-realtime
build ()
{
nvidia-docker build -t $IMAGE .
}
run ()
{
# xhost +local:root
nvidia-docker run --privileged -it \
--name ${CONTAINER} \
--env DISPLAY=$DISPLAY \
--env="QT_X11_NO_MITSHM=1" \
-v /dev/video0:/dev/video0 \
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
-v /home/kida/docker/08-tf-realtime/share:/tmp/share:rw \
${IMAGE} bash
# xhost -local:root
}
# main
case $1 in
"build") build ;;
"run") run ;;
*) echo "引数を指定して下さい";;
esac
以下のコマンド実行しました。
# docker の中から window を使うため
$ +xhost
# shell script の実行
$ sh run.sh build
$ sh run.sh run
で、docker コンテナの中に入って、いろんなものの環境を確認するとこんな感じで。(作者の方と違いましたが、、
# python --version
Python 3.5.2 :: Anaconda 4.2.0 (64-bit)
# python -c "import cv2; print(cv2.__version__)"
3.2.0
# conda --version
conda 4.3.22
とりあえず、ソースおとしたり、関連モジュール落としてきて。
$ git clone https://github.com/datitran/Object-Detector-App.git
$ conda env create -f environment.yml
てやると、なんか envirotment.yml の menpo::tbb=4.3_20141023=0 のところで、「そんなのないよ」的なエラーがでてたので、よくわからないながら、以下のように変えてしまって。
menpo::tbb=4.3_20141023=0
↓
menpo::tbb
以下のように実行すると、ウェブカムの映像をリアルタイムに物体認識するアプリケーションが動きました。(ウェブカム必須)
python object_detection_app.py
僕の所感だと、 yolov2 と比べると、デフォルトのモデルは精度低いし、FPSも低いなって印象でした。
ただ、yolov2 より SSD のほうが精度いいってどこかの記事で見た気がするので、もうちょいモデルとか学習データとか調整して、もう1回試してみたい。