Kinaconの技術ブログ

Ubuntuはじめました。

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しましょう。

以上。

Ubuntu18.04のhome内のディレクトリ名を英語表記にする。

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

端末でディレクトリを入力するときに
日本語表記だと変換しなければならず
かなり面倒・・・


作業環境

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


作業内容

コマンド

GUIが表示される。

env LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update


コマンド実行後GUIで「Don't ask me this again」 にチェックし、
「UpdateNames」をクリック。

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



確認

「ls」でhomeディレクトリを確認する。
f:id:m-oota-711:20181015110937p:plain




ピクチャにはデータが入っていたので残してくれていた。
データを移して削除しました。


以上。

Ubuntu18.04でNvidia GPU(GT 730M)を認識させる

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

GPU搭載のノートPCにUbuntu18.04を導入した。
早速、GPUを認識させたいと思います。



作業環境

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


作業内容

搭載GPUの確認

lspci | grep -i nvidia

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


ただし、グラフィックでは「Intel Haswell Mobile」となっている。
f:id:m-oota-711:20181015100946p:plain



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

前回はUbuntu16.04で実行している。

kinacon.hatenablog.com
kinacon.hatenablog.com



Ubuntu18.04で同様に作業して行きます。

・画面左上のアクティビティで「soft」と入力して「ソフトウェアとアップデート」を開く。
f:id:m-oota-711:20181015102748p:plain



・タブの「追加のドライバー」を選択する。
f:id:m-oota-711:20181015102858p:plain



・「Nvidia driver metapackeageをnvidia-driver-390から使用します(プロプライエタリ、検証済み)」を選択し、「変更の適用」をクリック。
f:id:m-oota-711:20181015103807p:plain



・インストールが完了したら、再起動する。
f:id:m-oota-711:20181015104237p:plain


GPUドライバーの確認

nvidia-smi

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



「設定」→ 「詳細」も確認
f:id:m-oota-711:20181015105236p:plain


大丈夫そうだ。

以上。

【解決】マイクラサーバー(TwilightForest)が落ちる・・・

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

Pine64A(2GB)をMinecraftのサーバーとして運用している。
しかし、ゲームを進めて、いよいよ黄昏の森ディメンションに行ったところでサーバーが落ちる・・・

今回はこれを解決しました。

kinacon.hatenablog.com



実行環境

シングルボードコンピュータ PineA64
メモリ 2GB
microSD 64GB
マイクラサーバー forge-1.12.2-14.23.4.2705
導入済MOD OptiFine_1.12.2_HD_U_E2
twilightforest-1.12.2-3.8.689-universal

作業内容

サーバーへのmodの追加

クラッシュレポートを見てもわからなかったので、起動させてログを見ていたらmodが足りないと言われていた。

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






ただログにあるmodだけではダメで。起動すると、また別のmodを要求されるのですべてここに記載します。
※どれか忘れてしまったが最新verだとエラーになるため、一つ前のverを使用したものがあります。


追加mod Version リンク
Baubles Baubles-1.12-1.5.2 Overview - Baubles - Mods - Projects - Minecraft CurseForge
Chisel Chisel-MC1.12.2-0.2.1.35 Overview - Chisel - Mods - Projects - Minecraft CurseForge
Immersive Engineering ImmersiveEngineering-0.12-85 Overview - Immersive Engineering - Mods - Projects - Minecraft CurseForge
Just Enough Items jei_1.12.2-4.12.1.217 Overview - Just Enough Items (JEI) - Mods - Projects - Minecraft CurseForge
Tinkers' Construct TConstruct-1.12.2-2.10.1.87 Overview - Tinkers Construct - Mods - Projects - Minecraft CurseForge
Thaumcraft Thaumcraft-1.12.2-6.1.BETA25 Overview - Thaumcraft - Mods - Projects - Minecraft CurseForge
Mantle Mantle-1.12-1.3.2.24 Files - Mantle - Mods - Projects - Minecraft CurseForge
BloodMagic BloodMagic-1.12.2-2.3.3-101 https://minecraft.curseforge.com/projects/blood-magic
Guide-API Guide-API-1.12-2.1.6-61 Overview - Guide-API - Mods - Projects - Minecraft CurseForge

クライアントへのmod追加

クライアントにはサーバーのmodに加え、以下のmodを追加する必要があった。

追加mod Version リンク
CTM-MC1.12.2 CTM-MC1.12.2-0.3.2.18 Overview - ConnectedTexturesMod - Mods - Projects - Minecraft CurseForge

以上。

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

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

DockerのコンテナでOpenCV(C++)を実行する
dockerのコマンドに新コマンド体系ができたそうだ。

新コマンド体系は動作の内容がわかりやすいが、入力が面倒。
今回は新コマンドになれるために新コマンドで作業を行った。

参考:docker container / image コマンド新旧比較 - Qiita


Dockerの導入

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


sudoの省略

cat /etc/group #グループ一覧
sudo groupadd docker #dockerグループ一覧を追加
sudo gpasswd -a $USER docker #dockerグループにuserを追加
sudo service docker restart #dockerデーモンを再起動
exit #再ログイン

WARNINGが出る場合

WARNING: Error loading config file: /home/user/.docker/config.json: stat /home/user/.docker/config.json: permission denied

既にsudoで実行していると所有者rootで.dockerが作られているので所有者をuserに変更する。

sudo chown -R user ~/.docker

docker.sockのエラー

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/json: dial unix /var/run/docker.sock: connect: permission denied


以下のコマンドとPCの再起動で治った。(多分、再起動だけでいいかも)

sudo chgrp docker /var/run/docker.sock

Dockerのversion確認

docker version

コンテナ作成

ベースイメージをpullする

ベースイメージは16.04にしました。

docker image pull ubuntu:16.04

イメージの確認

docker image ls

コンテナ起動

docker container run -it ubuntu:16.04


コンテナ起動後(OSの確認)

cat /etc/os-release

C++開発環境を構築

GUIが使用できないためエディタはnanoを利用。

apt update
apt install build-essential cmake nano

※今回のaptのインストールパッケージは「インストールまとめ」にまとめてあります。

OpenCV導入(ソースからライブラリのビルド)

今回はソースからビルドします。



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

ソース取得、展開用 ca-certificates unzip wget
ビルド用 pkg-config
GUI用 libgtk2.0-dev
画像の読み書き用 apt install libjpeg-dev libpng-dev
動画の読み書き用 ffmpeg libavcodec-dev libavformat-dev libavresample-dev libswscale-dev
Usbカメラ取り込み用 libv4l-dev
TBBによる並列化を有効化用 libtbb-dev


OpenCVのインストール

OpenCVのバージョンは3.4.3です。

以下リリースバージョン
Releases - OpenCV library

ビルド時のログをteeで保存しています。
※OPENCV_VERSIONを変更してバージョン変更できます。

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


OpenCVのバージョン確認

pkg-config --modversion opencv


ソースファイルを削除(コンテナを軽くする)

cd && rm -rf /tmp/opencv



コンテナを一旦exit(STOP)

exit



コンテナIDを確認してコンテナをcommit(イメージとして保存)

docker container ls -a 
docker container commit [コンテナID] [イメージ名](:[タグ])

チュートリアル実行

事前にチュートリアルはホスト環境で実行確認した。
kinacon.hatenablog.com



コンテナ(環境整備済み)から画像を表示できるようにGUIの設定する。
また、動作確認用プログラム(ソースとcmakelists)をコンテナ内のディレクトリにコピーする


コンテナ(環境整備済み)を起動

docker container run -it --rm \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
[イメージ名](:[タグ])


一旦抜けて(ctl+p、ctl+q)コンテナのIDを確認

docker container ls -a



コンテナからXサーバへの通信を許可

xhost +local:`docker inspect --format='{{ .Config.Hostname }}' [コンテナID]`


コンテナにソースファイルとcmakeファイルをコピー

cd c++/cv_tutorial/
docker container cp CMakelists.txt [コンテナID]:/tmp/
docker container cp DisplayImage.cpp [コンテナID]:/tmp/


コンテナに入る

docker attach [コンテナID]


ビルドして実行

cd /tmp/
mkdir build
cd build
cmake ..
make
./Display ****.png


画像が表示できればOK。




インストールまとめ

※apt 使用時にコンテナ容量を減らす
--no-install-recommendsをつけてインストールする(必須パッケージのみインストール)
最後にapt clean でキャシュを削除

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

proxy環境の場合

aptの設定

編集ファイル /etc/apt/apt.conf
追記内容
Acquire::http::proxy "http://id:pass@proxy_address:port/";
Acquire::https::proxy "https://id:pass@proxy_address:port/";
cat <<EOF >> /etc/apt/apt.conf
Acquire::http::proxy "http://id:pass@proxy_address:port/";
Acquire::https::proxy "https://id:pass@proxy_address:port/";
EOF

wgetの設定

編集ファイル /etc/wgetrc
追記内容
https_proxy = http://id:pass@proxy_address:port/
http_proxy = http://id:pass@proxy_address:port/
ftp_proxy = http://id:pass@proxy_address:port/
cat <<EOF >> /etc/wgetrc
https_proxy = http://id:pass@proxy_address:port/
http_proxy = http://id:pass@proxy_address:port/
ftp_proxy = http://id:pass@proxy_address:port/
EOF

DockerでGUIアプリケーションを実行するための設定

参考:Dockerコンテナの中でGUIアプリケーションを起動させる | Unskilled?

ドメインソケットの共有

-v /tmp/.X11-unix/:/tmp/.X11-unix

DISPLAY変数をコンテナのDISPLAY変数に入れる

-e DISPLAY=$DISPLAY

XサーバーにおけるXクライアントの許可

すべてのクライアントからの通信を許可

xhost + 


ローカルからの通信を許可

xhost local:


特定のコンテナ(コンテナのホスト名)だけ許可

xhost +local:`docker container inspect --format='{{ .Config.Hostname }}' [コンテナID]`

dockerコマンド

コンテナの一覧表示(稼働中のみ、停止中を含める場合は-aをつける)
docker container ls
ホストからコンテナにファイルをコピーする
docker container cp ソース [コンテナID]:格納先ディレクトリ
コンテナ実行にコンテナから抜ける(STATUS:UP)
ctl+p ctl+q
コンテナ実行にコンテナから抜ける(STATUS:Exited)
exit
実行中のコンテナ(STATUS:UP)に入る
docker container attach [コンテナID]
停止中のコンテナを起動する(STATUS:Exited → UP)
docker container start [コンテナID]
実行中のコンテナをストップする(STATUS:UP → Exited)
docker container stop [コンテナID]
停止中のコンテナを削除する
docker container rm [コンテナID]
停止中のすべてのコンテナを削除する
docker container prune
コンテナをイメージに保存する
docker container commit [コンテナID]
イメージの一覧表示
docker image ls
イメージの削除
docker image rm
使用していないイメージを一括削除
docker image prune

docker container run のオプション

イメージから新規コンテナを起動
docker container run [イメージ名](:[タグ])
オプション
-i ホストの入力をコンテナの標準入出力につなげる
-t tty(標準入出力となっている端末デバイス)を使う
-e 環境変数を渡す
--rm コンテナ終了時に自動で削除する
-v /ホストディレクトリ:/コンテナのディレクトリ ホストのディレクトリをコンテナのディレクトリにマウントする(共有する)

以上。

ThinkPad L530のCPU換装しました。

f:id:m-oota-711:20180925084429p:plain
ThinkPad L530を購入しました。
CPUが脆弱で、Wifiなしなので安く入手できた。
ただ、Windows10のPCが欲しかったので満足。



交換用CPUはチップセット(マーザーボード)の仕様を確認して決めた。
ark.intel.com

「対応する製品」をクリックで確認できる。




仕様

CPU インテル® Celeron® プロセッサー 1000M
チップセット インテル® HM76 Express チップセット
HDD 320GB
メモリ 2GB×2
OS Windows10


準備品

PC ¥7000 ThinkPad L530
CPU Corei7 ¥9999 Core i7 3610QM
SSD 240GB ¥4899 7mm 3DNAND SATA3 6Gbps 3年保証
メモリ 16GB(8GBx2) ¥10000 PC3−10600(DDR3−1333)
SSDケース ¥753 データ移行に使用する
CPUグリース ¥1080 MX-4
分解用ヘラ ¥980 iSesamo 分解工房ロゴあり

iSesamo【iPhone/iPod/iPad対応修理工具】分解工房オリジナルロゴ版

iSesamo【iPhone/iPod/iPad対応修理工具】分解工房オリジナルロゴ版



作業内容

WindowsUpdateを実行

こちらのサイトを参考に実行
Windows Update の利用手順 - Windows 10 の場合


1時間半もかかった・・・
あと、Window10って余計なソフト(ゲームかな・・・)がいっぱいあるんだね。
今度、処理しよう。



Biosをアップデート

こちらから取得
BIOS アップデートユーティリティ ver 2.72
https://support.lenovo.com/jp/ja/downloads/ds029124?caps=true



SSDへシステム移行

こちらを参考にした。
ただし、クローンではなくシステムクローンを実行。
クローンだとエラーになった。


kinacon.hatenablog.com



ThinkPad L530を分解


このサイトを参考に分解した。
とくにつまずくところもなくできた。
Wifiのモジュールはなかったが、オークションで購入すれば復活できそうだった。

ThinkPad L530 の分解作業

CPUを外したら、購入したCPUにグリースを塗って、
CPUファンの汚れを落として、装着した。

組み立てるときにメモリとSSDを装着した。



性能

換装前
f:id:m-oota-711:20181007103737p:plain


換装後
f:id:m-oota-711:20181007103749p:plain


Windows エクスペリエンス インデックス スコア

高くなった思うが、換装前にやらなかったので比較できなかった。

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



とりあえず、かなり快適なPCになりました。


以上

UbuntuでOpenCV(C++)

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

前回、C++の開発環境を構築したので
今回はOpenCVを使ってみたいと思います。

kinacon.hatenablog.com


実行環境

OS Ubuntu 16.04.5 LTS
cmake 3.5.1
g++ 5.4.0
OpenCV 3.3.1-dev


作業内容

OpenCVのインストール

aptでインストール(ppa追加で違うバージョンも利用可能)

ubuntu16.04では2.4.9.1のようだ。

sudo apt update
sudo apt search python-opencv

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



インストールは以下の記事を参照
kinacon.hatenablog.com


以下の方法でもインストールできる。

・ソースからビルド
・ROSをインストールすると一緒に入る

Ubuntu18.04でのROSインストール方法は以下
https://kinacon.hatenablog.com/entry/2018/08/03/225920kinacon.hatenablog.com

Ubuntu16.04でのROSインストール方法は以下
kinacon.hatenablog.com





本環境はROS(kinetic)が入っているため
OpenCVのバージョンは3.3.1

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

チュートリアルを実行

以下のチュートリアルを実行した。
Using OpenCV with gcc and CMake — OpenCV 2.4.13.7 documentation


ソースの作成

cd c++
mkdir cv_tutorial
cd cv_tutorial
gedit DisplayImage.cpp


チュートリアルをそのままコピペして保存

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }

    Mat image;
    image = imread( argv[1], 1 );

    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);

    waitKey(0);

    return 0;
}

CMakeLists.txtの作成

gedit CMakeLists.txt


これもそのままコピペする

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
cmake_minimum_required CMakeの最小要求バージョンの設定
project プロジェクトの名前を設定
find_package パッケージを設定 cmakeがパッケージを探してくれる
add_executable プロジェクトファイルの名前と含まれるソースコードのパスを設定
target_link_libraries プロジェクトの依存ファイルを設定

実行ファイルの作成

mkdir build
cd build
cmake ..
make

実行

./DisplayImage ****.jpg


※****.jpgは実行ファイルと同じフォルダに画像ファイルを置いてもいいし、パス指定でも良い。




以上。