OpenCV4 のC++開発環境を整備する(自分用メモ)

■前提:
・対象:Linux または WSL(Windows Subsystem for Linux).
・言語:C++でOpenCVを使う.(Python からは anaconda 経由で使うなどを想定)

■今回のファイル:
まとめてhttps://github.com/dif-engine/memo/tree/master/opencvに置いてあります.

■OpenCV4のビルドとインストール
注意:以下のスクリプトを実行すると~/opencv がいじられます.適宜修正して使ってください.

cd;
sudo apt update
sudo apt-get install cmake libeigen3-dev libgtk-3-dev qt5-default freeglut3-dev libvtk6-qt-dev libtbb-dev ffmpeg libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng++-dev libtiff5-dev libopenexr-dev libwebp-dev libhdf5-dev libopenblas-dev liblapacke-dev
mkdir -p opencv && cd opencv
wget https://github.com/opencv/opencv/archive/4.2.0.zip
unzip 4.2.0.zip
mkdir opencv-4.2.0/build && cd opencv-4.2.0/build
cmake -G "Unix Makefiles" --build . -D BUILD_CUDA_STUBS=OFF -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_JASPER=OFF -D BUILD_JPEG=OFF -D BUILD_OPENEXR=OFF -D BUILD_PACKAGE=ON -D BUILD_PERF_TESTS=OFF -D BUILD_PNG=OFF -D BUILD_SHARED_LIBS=ON -D BUILD_TBB=OFF -D BUILD_TESTS=OFF -D BUILD_TIFF=OFF -D BUILD_WITH_DEBUG_INFO=ON -D BUILD_ZLIB=OFF -D BUILD_WEBP=OFF -D BUILD_opencv_apps=ON -D BUILD_opencv_calib3d=ON -D BUILD_opencv_core=ON -D BUILD_opencv_cudaarithm=OFF -D BUILD_opencv_cudabgsegm=OFF -D BUILD_opencv_cudacodec=OFF -D BUILD_opencv_cudafeatures2d=OFF -D BUILD_opencv_cudafilters=OFF -D BUILD_opencv_cudaimgproc=OFF -D BUILD_opencv_cudalegacy=OFF -D BUILD_opencv_cudaobjdetect=OFF -D BUILD_opencv_cudaoptflow=OFF -D BUILD_opencv_cudastereo=OFF -D BUILD_opencv_cudawarping=OFF -D BUILD_opencv_cudev=OFF -D BUILD_opencv_features2d=ON -D BUILD_opencv_flann=ON -D BUILD_opencv_highgui=ON -D BUILD_opencv_imgcodecs=ON -D BUILD_opencv_imgproc=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_ml=ON -D BUILD_opencv_objdetect=ON -D BUILD_opencv_photo=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=OFF -D BUILD_opencv_shape=ON -D BUILD_opencv_stitching=ON -D BUILD_opencv_superres=ON -D BUILD_opencv_ts=ON -D BUILD_opencv_video=ON -D BUILD_opencv_videoio=ON -D BUILD_opencv_videostab=ON -D BUILD_opencv_viz=OFF -D BUILD_opencv_world=OFF -D CMAKE_BUILD_TYPE=RELEASE -D WITH_1394=ON -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_EIGEN=ON -D WITH_FFMPEG=ON -D WITH_GDAL=OFF -D ITH_GPHOTO2=OFF -D WITH_GIGEAPI=ON -D WITH_GSTREAMER=OFF -D WITH_GTK=ON -D WITH_INTELPERC=OFF -D WITH_IPP=ON -D WITH_IPP_A=OFF -D WITH_JASPER=OFF -D WITH_JPEG=ON -D WITH_LIBV4L=ON -D WITH_OPENCL=ON -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=ON -D WITH_OPENGL=ON -D WITH_OPENMP=OFF -D WITH_OPENNI=OFF -D WITH_PNG=ON -D WITH_PTHREADS_PF=OFF -D WITH_PVAPI=OFF -D WITH_QT=OFF -D WITH_TBB=ON -D WITH_TIFF=ON -D WITH_UNICAP=OFF -D WITH_V4L=OFF -D WITH_VTK=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D WITH_XINE=OFF -D WITH_LAPACKE=OFF -D WITH_MATLAB=OFF ..
make -j8
sudo make install

■opencv のライブラリパスを通す
vim ~/.bashrc して次のような行を加える:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

:wqして保存終了したら source ~/.bashrc しておく.

■C++サンプル
以下のサンプルは以前の記事のサンプルをOpenCV4に合わせてフィックスしたものです.

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>

using namespace cv;
using namespace std;

#define image_path_string "madoka.png"
#define W 500
#define H 350

/*
CV_AA ==> LINE_AA
cvNamedWindow ==> namedWindow
cvWaitKey ==> waitKey
format ==> Formatter::format ; コードを参照
*/



#define IMAGESHOW(X) do{  \
  namedWindow(#X);      \
  imshow(#X, X);          \
  }while(0)

int main()
{
  //画像の読み込み
  Mat img1 = imread( image_path_string, IMREAD_COLOR);


  //画像をグレースケールで読み込む
  Mat img2 = imread( image_path_string, IMREAD_GRAYSCALE);


  //カラー画像の作成
  Mat img3 = Mat::zeros(Size(W, H), CV_8UC3);


  //応用:img2と同じサイズでグレー画像を作成
  Mat img4 = Mat::zeros(Size(img2.cols, img2.rows), CV_8UC1);


  //グレースケール画像をカラー画像に変換する
  Mat img2_color;
  cvtColor(img2, img2_color, COLOR_GRAY2BGR);


  //比較のために両方に「赤い対角線」を入れてみる
  const int W2 = img2.cols;
  const int H2 = img2.rows;
  line(img2, Point(0,0), Point(W2,H2)
    , Scalar(0,0,255), 3, LINE_AA);
  line(img2_color, Point(0,0), Point(W2,H2)
    , Scalar(0,0,255), 3, LINE_AA);
  //Scalar(b,g,r,alpha=0)


  //コピーコンストラクタ
  Mat img5(img2);
  //これは「浅い」コピーになる。
  //したがって、img5 に対する操作は img2 に反映される。
  line(img5, Point(0,H2/2), Point(W2,H2/2)
    , Scalar(0,255,0), 3, LINE_AA);


  Mat img6 = img2.clone();
  //これは「深い」コピーになる。
  //したがって、img6 に対する操作は img2 には全く反映されない。


  //画素に対する直接操作(グレースケール画像の場合)
  //市松模様にしてみる
  for(int y = 0; y < img6.rows; ++y)
  {
    for(int x = 0; x < img6.cols; ++x)
    {
      img6.at<unsigned char>(y,x)
        = 255 * ((x/10+y/10) % 2);
      // (y,x) という順であることに注意する。
    }
  }


  //画素に対する直接操作(カラー画像の場合)
  //一列毎に色が変わる市松模様にしてみる
  Mat img7 = img3.clone();
  for(int y = 0; y < img7.rows; ++y)
  {
    for(int x = 0; x < img7.cols; ++x)
    {
      img7.at<Vec3b>(y,x)[0] = ((y/10)%3 == 0)? 255 * ((x/10+y/10) % 2) : 0;//B
      img7.at<Vec3b>(y,x)[1] = ((y/10)%3 == 1)? 255 * ((x/10+y/10) % 2) : 0;//G
      img7.at<Vec3b>(y,x)[2] = ((y/10)%3 == 2)? 255 * ((x/10+y/10) % 2) : 0;//R
      // (y,x) という順であることに注意する。
    }
  }


  //画像の「原点」は左上である;
  //つまりx軸は左から右へ、y軸は上から下に走っている。
  circle(img6, Point(0,0), 100
    , Scalar(0,250,250), 5, LINE_AA);
  circle(img7, Point(0,0), 100
    , Scalar(0,250,250), 5, LINE_AA);


  //画像の保存:拡張子に応じた形式で保存される。
  imwrite("img7.png", img7);
  imwrite("img7.jpg", img7);
  imwrite("img7.bmp", img7);

  //文字列への書き出し
  //(検証しやすくするため小さめの画像でやる)
  Mat img8 = Mat::zeros(Size(20, 15), CV_8UC1);
  for(int y = 0; y < img8.rows; ++y)
  {
    for(int x = 0; x < img8.cols; ++x)
    {
      img8.at<unsigned char>(y,x) = 255 * ((x+y) % 2);
    }
  }

  //C言語のデータとして使える形式で書き出し
  ostringstream C_out;
  C_out << Formatter::get(Formatter::FMT_C)->format(img8);
  cout << "C:" << C_out.str() << endl;

  //CSV形式で書き出し
  ostringstream CSV_out;
  CSV_out << Formatter::get(Formatter::FMT_CSV)->format(img8);
  cout << "CSV:" << CSV_out.str() << endl;

  //Pythonのデータとして使える形式で書き出し
  ostringstream Python_out;
  Python_out << Formatter::get(Formatter::FMT_PYTHON)->format(img8);
  cout << "Python:" << Python_out.str() << endl;

  IMAGESHOW(img1);
  IMAGESHOW(img2);
  IMAGESHOW(img2_color);
  IMAGESHOW(img3);
  IMAGESHOW(img4);
  IMAGESHOW(img5);
  IMAGESHOW(img6);
  IMAGESHOW(img7);

  cout << "hit any key on some image window" << endl;
  waitKey(0);

  return 0;
}

これに対するMakefileは次の通りです:

help:
	@grep -E '^[0-9a-zA-Z_-]+[[:blank:]]*:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[1;32m%-30s\033[0m %s\n", $$1, $$2}'

.PHONY: help add


OPENCVHEADER = /usr/local/include/opencv4
 
LIB_LOADPATH = -L/usr/local/lib
 
LINK_OPENCV_LIBS = \
-lopencv_core \
-lopencv_imgcodecs \
-lopencv_highgui \
-lopencv_imgproc

 
LDFLAGS = -lm -lstdc++ $(LIB_LOADPATH) $(LINK_OPENCV_LIBS)
 

add : ## add some files
	git add Makefile basic1.cc

sample: sample.cc ## build sample.cc 
	$(CXX) $< -o $@ -I$(OPENCVHEADER) $(LIB_LOADPATH) $(LINK_OPENCV_LIBS)

make sample して ./sampleすればテストできます.
WSLでは画像が表示されないかもしれません.これはX環境の問題なのでこの記事で書いたような方法で整備をしておく必要があります.

Makefile の先頭にある help ターゲットはMakefile自己文書化の仕組みです.以前にこの記事で解説しました.

(python) PIL(Python Image Library)で画像が表示されないトラブルとその解決法

■tl;dr: sudo apt install imagemagick

■状況: PIL(Python Image Library) というモジュールを使って次のようなサンプルを書いた:

from PIL import Image

im = Image.open('lena.jpg')
im.show()

WSL(Windows Subsystem for Linux) にインストールした anaconda (python環境の一つ)で実行するとlena.jpg が表示されるはずなのに何も表示されない.

■この現象の起こる理由:
下記の「参考にしたページ」によるとPILは xv または display という画像ビューワを呼び出す.しかしUbuntuのように eog (Eye of Gnome) という画像ビューワしかデフォルトでは持たない場合画像表示が失敗する.

■(とりあえずの)解決方法: imagemagick をインストールする.すると display が提供されるようになり,PIL での画像表示がうまくいくようになる.WSLの場合X環境が必要になるのでWSLからevinceを使う方法で説明したような方法で整備をする必要がある.

■参考にしたページ:https://stackoverflow.com/questions/16279441/image-show-wont-display-the-picture

Buffaloの子機のドライバ

buffalo のサイトに行って検索しても見つからなかったのでメモ
https://www.buffalo.jp/support/download/detail/?dl_contents_id=60652

WSLにlatexを入れる(自分用メモ)

■やめといたほうがいい: sudo apt install texlive

■おすすめ:
sudo apt install wget perl-tk
mkdir tmp; cd tmp
wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar -xzf install-tl-unx.tar.gz
cd install-tl-*
sudo ./install-tl

★最後に ~/.bashrc を編集して
export PATH=/usr/local/texlive/2018/bin/x86_64-linux:$PATH
export INFOPATH=$INFOPATH:/usr/local/texlive/2018/texmf-dist/doc/info
export MANPATH=$MANPATH:/usr/local/texlive/2018/texmf-dist/doc/man

(2018 のところは年によって数字が違うが,上のインストールスクリプト完了時のメッセージを参考にして欲しい).

■ネットワークインストーラがうまく動かない場合は iso を使う.ここが参考になる. 数GBあるのでFree Download Manager などのダウンロードツールを使う.

Windows10ではisoファイルを通常のフォルダのように開けるがWSLからはそのままでは見えない.isoファイルをダブルクリックして開いたときに割り当てられているドライブレターを確認しておく.手元のノートパソコンで試したときにはDドライブになっていた.

$ sudo mkdir -p /mnt/d
$ sudo mount -t drvfs D: /mnt/d
$ sudo /mnt/d/install-tl

TeXStudio for Windows の設定(自分用メモ)

■目標:platex で作った文書を扱う.

■コマンドの編集
[オプション(O)]>[TeXStudioの設定(C)]を選んで設定パネルを表示する.
必要ならば左のカラムで「コマンド」を選び,右のカラムのコマンドを編集してゆく:
・LaTeX
(old)latex.exe -src -interaction=nonstopmode %.tex
(new)platex.exe -no-guess-input-enc -kanji=utf8 -synctex=1 -interaction=nonstopmode %.tex
・BibTeX
(old)bibtex.exe %
(new)upbibtex.exe %
・Biber
(old)biber.exe %
(new)biber.exe --bblencoding=utf8 -u -U --output_safechars%

texstudiosetting001+

■ビルドの編集
左のカラムで「ビルド」を選び,次のように編集する:
texstudioBuildSetting

参考にしたページ:
TeXstudio/設定/Windows

WSLからevinceを使う方法

Windowsでevinceを使いたい人からの検索流入があるのでこの記事を書いた.
(MSYS2ではなく)WSLから $ evince と呼んで使えるようにする方法を書いておく.

■ step1. evinceのインストール
$ sudo apt install evince

インストール後に evince を起動しようとするとこうなる:
$ Unable to init server: Could not connect: Connection refused
Cannot parse arguments: Cannot open display:

いわゆるX環境が不足しているようだ.

■ step2. Xming X Server for Windows のインストール

X Server for Windows のページに書いてあるとおりにインストールすればよい.ダウンロードページに行きXming-*-setup.exe をダウンロードし,そのままダブルクリックして「Next」をどんどん選んで行けばインストールが完了する.

■ step3. WindowsからXmingを検索し,右クリックして「タスクバーにピン留め」しておく.
■ step4. X11を使うための設定
~/.bashrc に次のような行を加える:
export DISPLAY=localhost:0.0
変更を保存したら一度 WSLを終了する.

■ step5. evinceを使う.
$ evince myPDF.pdf & したときに「Unable to init server:」と言われたらタスクバー上のXmingをクリックしてからもう一度実行すればよい.evinceが立ち上がった場合,
(evince:18): GLib-GIO-CRITICAL **: 10:56:55.137: g_dbus_proxy_new_sync: assertion ‘G_IS_DBUS_CONNECTION (connection)’ failed
という警告が出てくるが,いまのところ無視している.

参考にした記事
俺の Bash on Windows10 環境

LyXで日本語を使うようにする設定(Windows)

LyXというのは,texなど(latex, luatex, and so on)をWYSIWIGスタイルで扱うためのラッパーだと思ってください.Wordの数式エディタのような調子で編集し,しかもtexならではのシュッとしたPDFを生成できるというすぐれものです.

便利なのは良いのですが,数式の入った日本語文書を作ろうとすると,Windows版では「ただ動かす」だけでも多少の自明でない設定が必要となります.諸般の事情によりLyX環境を整備するのが二回目となるのでメモ代わりに記事とします.

前提:
1. texlive などのlatex環境がすでに整っている.
2. バイナリはここから取ってきてインストールが済んでいる.

■latexの設定
[ツール(T)] > [設定(P)…] で「出力」「LaTeX」を次のように設定する:
lyx設定出力LaTeX
設定したら[適用(A)] > [保存(S)] をクリックして設定を反映させる.

■言語の設定
日本語の文書を作成する場合は babel を off にする.
[ツール(T)] > [設定(P)…] で「言語設定」「言語」を選んで次のように設定する:
lyx設定言語設定-言語

■文書-文書クラスの設定
[文書(D)] > [設定(S)…] で「文書クラス」を選んで次のように設定する:
lyx文書の設定-文書クラス

■文書-言語の設定
[文書(D)] > [設定(S)…] で「言語」を選んで次のように設定する:
lyx文書の設定-言語New
設定したら「文書の既定値として保存」して[適用(A)]>[OK]する.

■文書-形式の設定
[文書(D)] > [設定(S)…] で「形式」を選んで次のように設定する:
lyx文書形式

設定したら「文書の既定値として保存」して[適用(A)]>[OK]する.

■変換子の設定
[ツール(T)] > [設定(P)…] で「ファイル処理」「変換子」を次のように設定する:

●LaTeX (luaTeX) -> PDF
lyx設定ファイル処理変換子LaTeX2PDF

設定したら[修正(M)]を押してから[適用(A)] > [保存(S)] をクリックして設定を反映させる.

●DVI -> PDF(dvipdfm)
lyx設定ファイル処理変換子DVI2PDF

設定したら[修正(M)]を押してから[適用(A)] > [保存(S)] をクリックして設定を反映させる.

●LaTeX(pLaTeX) -> DVI
lyx設定ファイル処理変換子Platex2DVI

設定したら[修正(M)]を押してから[適用(A)] > [保存(S)] をクリックして設定を反映させる.

■ファイル形式の設定
ここではビューワとしてtexworksを指定している.
lyx設定ファイル形式
設定したら[適用(A)] > [保存(S)] をクリックして設定を反映させる.

参考にしたサイト
TeX Wiki LyX/設定/Windows

■履歴
2018/10/24 初稿作成
2018/10/30 若干修正
2018/10/31 さらに修正
2018/11/03 さらに修正

git for Windows のhomeを好きな場所に設定する

git for Windows の home を F:\WSLHOME に設定してみよう.

1. Git for Windows のサイトに行ってインストーラをDLする.

2. (オプション)インストール時にはなるべくこのようにしたほうが良いと思う:
gitbashInst1

3. $HOME を設定する.「PC」を右クリックして「プロパティ」→ 「システムの詳細設定」で「環境変数」を選ぶ.

次にユーザー環境変数を新しく作る.「新規(N)」を押して
変数名:HOME
変数値:F:\WSLHOME
としてやる.OKしてコントロールパネルを閉じる.

参考にした記事:
Git for Windows tip: Setting $HOME and the startup directory

WSLで blas と lapack (自分用メモ)

blas とか lapack はちょっと高度な科学技術計算には必須のもので,MSYS2に入れるのが不可能である[要出典]ことが知られています[誰によって?].そこでWSLです.Ubuntuならば

$sudo apt-get update
$sudo apt install pkg-config
$sudo apt install libgsl0-dev liblapack-dev libatlas-base-dev

※事情があってこのブログからコピペできない人のために補足すると’libgsl0’の末尾二文字は「エルの小文字」「数字のゼロ」です.

多分こんな感じでいけるはず[曖昧な語尾].

(a)WSLをCドライブ以外の場所に置き,(b)homeも別の場所に置いて,(c)chmodも使えるようにする方法.(自分用メモ)

Windows 再インストールした結果としてWSL環境を作り直すことになった.せっかくなので次の(a)(b)(c)をやってみた:

(a) Cドライブ以外の場所にWSLを置き直すことにした.(Cドライブ以外の場所に置きたいのは,開発にともなってディスクの書き換えが頻繁に起こるからである).

(b) WSLのホームディレクトリをなるべく浅いところに置いた.(たとえばホームディレクトリ以下で生成したファイルなどを取り出す場合,ホームディレクトリがわかりやすい場所にあると楽だ.)

(c) chmod できるようにする.デフォルトではWSLではchmodが無視される.このことにより問題が起こる場合もあるのでこのfixは重要.

1. Fドライブ(でもなんでも)直下に WindowsSubsystemForLinux と WSLHOME というフォルダを作っておく.WindowsSubsystemForLinux にWSLが置かれる予定である.WSLHOMEが将来WSLのホームディレクトリになる.

2. WSLを入れる準備を行う.Power Shell を管理者権限で開き,次のように入力する:

PS C:\Users\Henrik> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

再起動を要求されるのでそれに従う.

3. Microsoft Storeを開き,linux で検索すると色々候補がでる.ここでは Ubuntu 18.04LTS を選んだ前提で話を進める.Ubuntu@WSL を初回起動し username/password を入れておく.以下では username = konrad とする.その後 exit して Ubuntu を終了する.

4. Power Shell を管理者として実行する.(しばらくPower Shell での作業が続く).
まずchocolatelyを入れる:

PS C:\Users\Henrik> Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

次にlxrunofflineを入れる:

PS C:\Users\Henrik> choco install lxrunoffline

質問されたら y で答えてインストールを完了し exit する.

5. 再び Power Shell を管理者権限で起動する
念のためユーザ名を確認しておく:

PS C:\Users\Henrik> whoami
desktop\henrik

すなわちWindowsのユーザ名は henrik であることが確認できた.(この「henrik」の箇所は各自読み替えてほしい).次にFドライブ直下のWindowsSubsystemForLinux フォルダに書き込み権限を与える:

PS C:\Users\Henrik> icacls F:\WindowsSubsystemForLinux /grant "henrik:(OI)(CI)(F)"
処理ファイル: F:\WindowsSubsystemForLinux
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
PS C:\Windows\system32>

次に

PS C:\Users\Henrik> lxrunoffline move -n Ubuntu-18.04 -d f:\WindowsSubsystemForLinux

する.確かに移動ができたことを確認しておく:

PS C:\Windows\system32> lxrunoffline get-dir -n Ubuntu-18.04
f:\WindowsSubsystemForLinux

以上でWSLがFドライブに置かれるようになった.

6. homeの移動.Ubuntu@WSL から

$ cd ~
$ cp -p .* /mnt/f/WSLHOME/

のようにして、「.bash_logout」、「.bashrc」、「.profile」などをなるべくそのまま(-p オプション)コピーしておく.

7. Ubuntu@WSL から
$ sudo vi /etc/passwd
して最後の方の行

konrad:x:1000:1000:"",,,:/home/konrad:/bin/bash

konrad:x:1000:1000:"",,,:/mnt/f/WSLHOME:/bin/bash

と変更し,:wqする.$ exitして一度WSLを終了する.

8. ふたたびWSLを起動して Ubuntu@WSL で

konrad@DESKTOP:~$ cd;pwd
/mnt/f/WSLHOME

となっていればよい.

9. chmod 対応.まず,/etc/wsl.conf というファイルを必要ならば作る:
$sudo touch /etc/wsl.conf
$sudo vim /etc/wsl.confのようにして編集する.
(case1)もし空ファイルだったら 

[automount]
options = "metadata"

のように書いて保存する.
(case2)もしすでに

[automount]
options = "foo"

という行があったら

[automount]
options = "metadata, foo"

のように修正し,保存する.

10. その他(git の設定)
改行コードを変更しないようにする.
$ git config --global core.autocrlf input

参考にした記事:
Can I move the linux subsystem to a different drive?
Bash on Windowsのホームディレクトリ変更
WSLからマウントしたWindowsのドライブでchmodしたい