Kinaconの技術ブログ

Ubuntuはじめました。

Nvidiaドライバの更新(RUNファイルを使用)

f:id:m-oota-711:20180824075049j:plain

OpenCVでCUDAを使用しようと思い
CUDAを調べたら、現在 CUDA toolkit ver 10.0が最新であった。
せっかくなので10.0をインストールすることとした。




まず、Nvidiaドライバのバージョンを上げる必要があったので行った。
結構大変だったため、記録しておく。



以下、CUDAのバージョンごとの対応ドライバ
https://github.com/NVIDIA/nvidia-docker/wiki/CUDA#requirements




作業環境
f:id:m-oota-711:20181030081427p:plain



作業内容

ドライバの入手

使用しているGPUの情報から検索して入手できる。
私は(GTX1080では)410.66だったが現在410.73(18/10/25に更新)になっていた・・・!?

https://www.nvidia.co.jp/Download/index.aspx?lang=jp

入手:NVIDIA-Linux-x86_64-410.66.run



ドライバのアップデート

参考:https://www.kunihikokaneko.com/free/linuxtoolchain/nvidia_ubuntu.html




Xサーバの停止

Xサーバ関係のdevパッケージのインストール

sudo apt install xserver-xorg-dev




nouveauの無効化(grubの設定を変更)

/etc/default/grubを編集する

sudo gedit /etc/default/grub
編集前 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
編集後 GRUB_CMDLINE_LINUX_DEFAULT="splash nouveau.modeset=0"





grub-mkconfigで設定を出力

sudo grub-mkconfig -o /boot/grub/grub.cfg





Xサーバを停止

sudo /etc/init.d/lightdm stop

nvidia関連パッケージの削除

「Ctl」+「Alt」+「F1」で仮想コンソール(CUI)を起動


nvidiaパッケージの確認

dpkg -l | grep nvidia


nvidiaパッケージと「xserver-xorg-video-nouveau」の削除
nvidiaパッケージは一つ一つ確認しながら消したほうがよいかも。
私は面倒くさかったので一気に削除しました。

sudo apt remove --purge xserver-xorg-video-nouveau
sudo apt remove --purge nvidia-*


再起動

sudo reboot

Nvidiaドライバのインストール

再度、Xサーバを停止

sudo /etc/init.d/lightdm stop

「Ctl」+「Alt」+「F1」で仮想コンソール(CUI)を起動

cd Download
sudo sh NVIDIA-Linux-x86_64-410.66.run


インストールが開始される。
ライセンスの同意や32bit互換ライブラリのインストールなどが聞かれる。


確認

インストールが終わったら、
再起動してインストールされているか確認

nvidia-smi

f:id:m-oota-711:20181030081338p:plain

以上。

fzfでDockerを快適にする。

f:id:m-oota-711:20180824075049j:plain

fzfというツールは
標準入力から受け取ったリストから対話的に選択してその結果を標準出力に出力することができます。

これをdockerと組み合わせるとコンテナやイメージをコマンドラインで選択してrunやattachなどができます。



f:id:m-oota-711:20190215180404g:plain

・インストールは以下を参考にしました。
第504回 インタラクティブフィルター「fzf」の活用:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

・docker用シェル関数は以下を参考にしました。
dockerコンテナの起動・停止をちょっと楽にするシェル関数 - Qiita




作業環境

・Ubuntu18.04.1
f:id:m-oota-711:20181015133547p:plain

・Docker-ce 18.06.1
f:id:m-oota-711:20181015133732p:plain





作業内容

fzfのインストール

インストーラをダウンロード

git clone https://github.com/junegunn/fzf.git ~/.fzf


f:id:m-oota-711:20181024212359p:plain


インストール。すべてyesにしました。

cd .fzf
./install

f:id:m-oota-711:20181024212501p:plain



.bashrcを読み込めば起動できます。

source ~/.bashrc

docker用シェル関数

シェルスクリプトを作って、sourceすれば以下のコマンドでdockerを起動できる

source docker_fzf.sh
docker-run イメージを選択して起動できる
docker-run-x11 イメージを選択して起動できる。ホストのGUIを利用できる
docker-commit [image_name] 引数にイメージの名前を設定して起動中のコンテナをcommitできる
docker-copy [file_name] 起動中のコンテナを選択して、引数に指定したファイルをコピーできる
docker-attach 起動しているコンテナを選択してにattachできる

docker_fzf.sh

#!/bin/bash

docker-run() {
  local container
  container="$(docker image ls | sed -e '1d' | fzf --height 40% --reverse | awk -v 'OFS=:' '{print $1,$2}')" 
  if [ -n "${container}" ]; then
    echo "runing container from ${container} ..."
    docker container run -it --rm ${container}
  fi
}

docker-run-x11() {
  local container
  container="$(docker image ls | sed -e '1d' | fzf --height 40% --reverse | awk -v 'OFS=:' '{print $1,$2}')" 
  if [ -n "${container}" ]; then
    echo "runing container from ${container} ..."
    xhost +
    docker container run -it --rm \
        -e DISPLAY=$DISPLAY \
        -v /tmp/.X11-unix:/tmp/.X11-unix \
        ${container}
  fi
}

docker-commit() {
  if [ $# -ne 1 ]; then
        echo "指定された引数は$#個です。" 1>&2
        echo "実行するには引数に「イメージ名」が必要です。" 1>&2
        exit 0
    fi

  local container
  container="$(docker container ls -a -f status=running | sed -e '1d' | fzf --height 40% --reverse | awk '{print $1}')" 
  if [ -n "${container}" ]; then
    echo "committing container to $1 ..."
    docker container commit ${container} $1
  fi
}

docker-copy(){
    if [ $# -ne 1 ]; then
        echo "指定された引数は$#個です。" 1>&2
        echo "実行するには引数に「コピーするソースのパス」が必要です。" 1>&2
        exit 0
    fi

    local container
    container="$(docker container ls -a -f status=running | sed -e '1d' | fzf --height 40% --reverse | awk '{print $1}')"
    if [ -n "${container}" ]; then
    echo "moving $1 to container ..."
    docker container cp $1 ${container}:/tmp/
  fi
}

docker-attach() {
  local container
  container="$(docker container ls -a -f status=running | sed -e '1d' | fzf --height 40% --reverse | awk '{print $1}')" 
  if [ -n "${container}" ]; then
    echo "attaching container ..."
    docker container attach ${container}
  fi
}

dockerfileでpython/opencv環境を構築する。opencv_contribも入れました。

f:id:m-oota-711:20180824075049j:plain

前回、dockerで構築したOpenCV3.4.3にopencv_contribも追加しました。



kinacon.hatenablog.com


作業環境

・Ubuntu18.04.1
f:id:m-oota-711:20181015133547p:plain

・Docker-ce 18.06.1
f:id:m-oota-711:20181015133732p:plain





作業内容

dockerfile

opencv contribには一部商用利用できないアルゴリズムが含まれる
xfeatures2dというモジュールでSURFやSIFTが含まれるようです。

これらを使用する場合には
CMAKEのオプションに-D OPENCV_ENABLE_NONFREE=ONを追加する必要がある。

FROM ubuntu:16.04

MAINTAINER kina <kina@kinacon.com>

ARG PYTHON_VERSION=3.7.0
ARG OPENCV_VERSION=3.4.3

# プロキシ設定
ENV USER=xxxx \
         PASS=xxxx \
         PROXY=xxxx.xxxx.xxxx.co.jp:8080

# プロキシ設定(pip)
ENV HTTP_PROXY=http://$USER:$PASS@$PROXY/ \
        HTTPS_PROXY=http://$USER:$PASS@$PROXY/

# プロキシ設定(apt)
RUN echo 'Acquire::http::proxy ''"'"http://${ID}:${PASS}@${PROXY}/"'";' \
    > /etc/apt/apt.conf

RUN apt update && \
         apt install -y --no-install-recommends \
               make \
               cmake \
               gcc \
               g++ \
               unzip \
               wget \
               build-essential \
               nano \
               zlib1g-dev \
               libffi-dev \
               libssl-dev && \
       apt clean && \
       rm -rf /var/lib/apt/lists/*


# プロキシ設定(wget)
RUN ( \
            echo "https_proxy=http://${USER}:${PASS}@${PROXY}"; \
            echo "use_proxy=on"; \
) | tee /etc/wgetrc

# python3 インストール
WORKDIR /tmp/python3
RUN wget --no-check-certificate https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz && \
         tar zxf Python-${PYTHON_VERSION}.tgz && \
         rm Python-${PYTHON_VERSION}.tgz

WORKDIR /tmp/python3/Python-${PYTHON_VERSION}
RUN ./configure && make altinstall && make clean

WORKDIR /usr/local/bin/
RUN touch python3 && \
        ln -sf $(find -name python3.[0-9]) python3 && \
        touch pip3 && \
        ln -sf $(find -name pip3.[0-9]) pip3
RUN pip3 install --upgrade pip \
         numpy

# OpenCV3 インストール
RUN apt update && \
         apt install -y --no-install-recommends \
               ca-certificates \
               pkg-config \
               libgtk2.0-dev \
               libjpeg-dev libpng-dev \
               ffmpeg \
               libavcodec-dev \
               libavformat-dev \
               libavresample-dev \
               libswscale-dev \
               libv4l-dev \
               libtbb2 \
               libtbb-dev && \
    apt clean && \
    rm -rf /var/lib/apt/lists/*

RUN mkdir -p /tmp/opencv
WORKDIR /tmp/opencv
RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
        unzip ${OPENCV_VERSION}.zip -d . && \
        mkdir /tmp/opencv/opencv-${OPENCV_VERSION}/build && \
        rm ${OPENCV_VERSION}.zip

RUN wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
	unzip opencv_contrib.zip && \
        rm opencv_contrib.zip

WORKDIR /tmp/opencv/opencv-${OPENCV_VERSION}/build/
RUN cmake -D CMAKE_BUILD_TYPE=RELEASE \
                    -D OPENCV_EXTRA_MODULES_PATH=/tmp/opencv/opencv_contrib-${OPENCV_VERSION}/modules/ \
                    -D BUILD_TESTS=OFF \
                    -D CMAKE_BUILD_TYPE=RELEASE \
                    -D BUILD_PERF_TESTS=OFF \
                    -D WITH_FFMPEG=ON \
                    -D WITH_TBB=ON .. && \
       make -j "$(nproc)" && \
       make install && \
       make clean

WORKDIR /tmp


以上。

ffmpegで音声データと映像データを分離。動画の音量を調整する。

f:id:m-oota-711:20180824075049j:plain

録音した動画の音声が小さいので
音声を抜き出して音を大きくして、再度映像と合成することにしました。
動画から映像と音声の抽出をffmpegを使って実行しました。

と思ったらgain調整が普通にできた!!ffmpegすごい。


ffmpegのインストール方法はこちらに記載してます。
kinacon.hatenablog.com


こちらの記事を参考にしました。
ffmpegで動画と音声を結合する方法 - 何気に大変
ffmpeg で音のボリュームを調整する。gain 調整 - それマグで!



実行環境
f:id:m-oota-711:20181023202429p:plain





作業内容

映像を抽出する

ffmpeg -i 元ファイル -an -vcodec copy 映像ファイル

音声を抽出する

ffmpeg -i 元ファイル -vn -acodec copy 音声ファイル

合成する

ffmpeg -i 映像ファイル -vcodec copy \
     -i 音声ファイル -acodec copy 結合ファイル

Gain調整する(動画)

音を大きくする
小さくする場合は-10dBとかにする。

ffmpeg -i 元ファイル -vcodec copy -af volume=10dB 出力ファイル


以上。

dockerfileでpython/opencv環境を構築する。

f:id:m-oota-711:20180824075049j:plain

dockerにpython3.7とOpenCV3.4.3の環境を構築しました。
この環境をdockerfileで構築してみました。

kinacon.hatenablog.com




作業環境

・Ubuntu18.04.1
f:id:m-oota-711:20181015133547p:plain

・Docker-ce 18.06.1
f:id:m-oota-711:20181015133732p:plain





作業内容

dockerfile

プロキシ設定が必要ない場合は設定部分を消してください。

FROM ubuntu:16.04

MAINTAINER kina <kina@kinacon.com>

ARG PYTHON_VERSION=3.7.0
ARG OPENCV_VERSION=3.4.3

# プロキシ設定
ENV USER=xxxx \
         PASS=xxxx \
         PROXY=xxxx.xxxx.xxxx.co.jp:8080

# プロキシ設定(pip)
ENV HTTP_PROXY=http://$USER:$PASS@$PROXY/ \
        HTTPS_PROXY=http://$USER:$PASS@$PROXY/

# プロキシ設定(apt)
RUN echo "Acquire::http::proxy ${USER}:${PASS}@${PROXY}/;" \
         >> /etc/apt/apt.conf

RUN apt update && \
         apt install -y --no-install-recommends \
               make \
               cmake \
               gcc \
               g++ \
               unzip \
               wget \
               build-essential \
               zlib1g-dev \
               libffi-dev \
               libssl-dev && \
       apt clean && \
       rm -rf /var/lib/apt/lists/*


# プロキシ設定(wget)
RUN ( \
            echo "https_proxy=http://${USER}:${PASS}@${PROXY}"; \
            echo "use_proxy=on"; \
) | tee /etc/wgetrc

# python3 インストール
WORKDIR /tmp/python3
RUN wget --no-check-certificate https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz && \
        tar zxf Python-${PYTHON_VERSION}.tgz && \
        rm Python-${PYTHON_VERSION}.tgz

WORKDIR /tmp/python3/Python-${PYTHON_VERSION}
RUN ./configure && make altinstall && make clean

WORKDIR /usr/local/bin/
RUN ln -s /usr/local/bin/$(find -name python3.[0-9]) /bin/python3
RUN ln -s /usr/local/bin/$(find -name pip3.[0-9]) /bin/pip3

RUN pip3 install --upgrade pip \
         numpy

# OpenCV3 インストール
RUN apt update && \
         apt install -y --no-install-recommends \
               ca-certificates \
               pkg-config \
               libgtk2.0-dev \
               libjpeg-dev libpng-dev \
               ffmpeg \
               libavcodec-dev \
               libavformat-dev \
               libavresample-dev \
               libswscale-dev \
               libv4l-dev \
               libtbb-dev && \
    apt clean && \
    rm -rf /var/lib/apt/lists/*

RUN mkdir -p /tmp/opencv

WORKDIR /tmp/opencv
RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
        unzip ${OPENCV_VERSION}.zip -d . && \
        mkdir /tmp/opencv/opencv-${OPENCV_VERSION}/build && \
        rm ${OPENCV_VERSION}.zip

WORKDIR /tmp/opencv/opencv-${OPENCV_VERSION}/build/
RUN cmake -D CMAKE_BUILD_TYPE=RELEASE \
                    -D BUILD_TESTS=OFF \
                    -D CMAKE_BUILD_TYPE=RELEASE \
                    -D BUILD_PERF_TESTS=OFF \
                    -D WITH_FFMPEG=ON \
                    -D WITH_TBB=ON .. && \
       make -j "$(nproc)" && \
       make install && \
       make clean

WORKDIR /tmp

dockerfile のビルド

dockerfileが置いてあるディレクトリで実行
イメージの名前は「py3/cv3」

docker build -t py3/cv3 . 

pythonとOpenCVのバージョンは引数で指定できるようにしました。

・pythonのソースはここで確認。
https://www.python.org/ftp/python/

・OpenCVのソースはここで確認。
Releases - OpenCV library



例えば、python3.6.0 OpenCV3.2.0の場合は--build-argで引数を記載する

docker build  --build-arg PYTHON_VERSION=3.6.0 --build-arg OPENCV_VERSION=3.2.0 -t py36/cv32 .


以上。

Ubuntu18.04でShotcutをインストールする

f:id:m-oota-711:20180824075049j:plain

フリーの動画編集はopenshotを使用していたが、
Ubuntu18.04のPCのスペックが上がったので動画編集できるだろう。
ということで、簡単に導入できたShotcutを使用することにした。


作業環境

PC Thinkpad T440s
CPU Core i7 4600U
メモリ 12GB
ドライブ SSD 225GB
GPU GeForce GT 730M
OS Ubuntu18.04


作業内容

libsdl2-devをインストール

sudo apt install libsdl2-dev

snapでShotcutをインストール

sudo snap install shotcut --classic

めちゃ簡単。
実は、libsdl2-libをいれていなくてインストールできたけど
動かない・・・ってずっと諦めていたが

このサイトで解決できました。
www.admintome.com


以上。

DockerのコンテナでOpenCV(python)開発環境を構築する

f:id:m-oota-711:20180824075049j:plain

前回、DockerのコンテナでOpenCV(C++)を実行できるようにしました。
今回はそのpython版です。


作業環境

・Ubuntu18.04.1
f:id:m-oota-711:20181015133547p:plain

・Docker-ce 18.06.1
f:id:m-oota-711:20181015133732p:plain





作業内容

Dockerの導入

導入方法は以下。
kinacon.hatenablog.com

sudoの省略やdockerコマンドの使い方は以下。
kinacon.hatenablog.com

OpenCVビルド用パッケージのインストール

docker container run -it --rm ubuntu:16.04
apt update
apt install -y  --no-install-recommends make cmake gcc g++ unzip wget build-essential zlib1g-dev libffi-dev libssl-dev
apt clean

python3のインストール

ここにpythonのソースが置かれている。
現在の最新の安定版は「3.7.0」。「3.7.1」はまだRC版のようだ。

PYTHON_VERSION="3.7.0"
wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
tar zxf Python-${PYTHON_VERSION}.tgz
cd Python-${PYTHON_VERSION}
./configure
make altinstall

リンクを作成

python3.7.0は/usr/local/binにある。
f:id:m-oota-711:20181015153115p:plain


ln -s /usr/local/bin/python3.7 /bin/python3
ln -s /usr/local/bin/pip3.7 /bin/pip3

python3 を起動してみる。

python3

f:id:m-oota-711:20181015145449p:plain




numpy, pillow(PIL)のインストール

インストールされているか確認

pip3 install --upgrade pip
pip3 list


インストール

pip3 install numpy pillow


*******************************************************************
python3の環境ができたので、一旦イメージにcommitしておく。

・ctl+p、ctl+qでコンテナを起動させたまま抜ける
・docker container ls でコンテナのIDを確認
・docker container commit [コンテナID] [作成するイメージ名]
・docker image ls でイメージできたか確認

f:id:m-oota-711:20181015160101p:plain


コンテナにはdocker container attach [コンテナID]で入ることができる。

********************************************************************



OpenCVのインストール

関連パッケージのインストール

apt update
apt install --no-install-recommends -y build-essential cmake nano \
ca-certificates unzip wget \
pkg-config \
libgtk2.0-dev \
libjpeg-dev libpng-dev \
ffmpeg libavcodec-dev libavformat-dev libavresample-dev libswscale-dev \
libv4l-dev \
libtbb-dev
apt clean

OpenCVのインストール

OPENCV_VERSION="3.4.3"
mkdir -p /tmp/opencv && cd /tmp/opencv
wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip
unzip ${OPENCV_VERSION}.zip -d .
mkdir /tmp/opencv/opencv-${OPENCV_VERSION}/build && cd /tmp/opencv/opencv-${OPENCV_VERSION}/build/
cmake -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D WITH_FFMPEG=ON -D WITH_TBB=ON  .. | tee /tmp/opencv_cmake.log
make -j "$(nproc)" | tee /tmp/opencv_build.log
make install | tee /tmp/opencv_install.log

pythonでOpenCVのバージョン確認

python3 #python起動

import cv2
cv2.__version__

f:id:m-oota-711:20181015163424p:plain




無事に環境構築ができたようです。
コンテナは消す前にcommitしましょう。

以上。