とある科学の備忘録

とある科学の備忘録

CやPythonのプログラミング、Arduino等を使った電子工作をメインに書いています。また、木製CNCやドローンの自作製作記も更新中です。たまに機械学習とかもやってます。

【Linux】Ubuntuの不要ファイルを徹底的に削除する

Ubuntuで色々やっていると、だんだんSSDの容量を圧迫してきました。
512GBしかないSSDWindows用とよく使う動画データ用とUbuntu用で3つにパーティション分割している上に、WindowsパーティションSolidworksやらFusionやらInventerやらUnityやら重たいソフトばっかり入っているので、どーしてもUbuntuに割くことのできる容量が少なくなってしまい、すぐ容量いっぱいになってしまうんです。


ちなみにですが、使用しているUbuntuはこちら:
f:id:pythonjacascript:20210409235433p:plain

では本題。

まずは使用容量と空き容量の確認

$ sudo du / -h -s  # 現在使用している容量を取得
75G

$ df / -h 
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda5      ext4   82G   75G    7G  95% /

パーティションサイズが82GBでそのうち75GBも使ってました。ひえー


不要なアプリケーションを削除

これは簡単。以下のコマンドを実行するだけ

$ sudo apt autoremove # 更新に伴い必要なくなったパッケージを削除
$ sudo apt clean    # キャッシュされている全てのdebファイルを削除



ndcuで巨大ファイルを削除

sudo apt-get install ncdu -y 

でインストールします。

cd /; ncdu

を実行すると、以下のように表示されます。

f:id:pythonjacascript:20210409235725p:plain

`du`コマンドなどと違って、ファイルの大きさがグラフで表示されており、しかもサイズが大きい順にソートされているのでわかりやすいです。

  • 上下矢印:フォルダ or ファイル選択
  • 左矢印:上の階層に移動
  • Enter:選択中のフォルダに入る
  • d : フォルダ or ファイルの削除
  • q : ncduを終了

のようなコマンドを駆使して、大容量の不要ファイルを見つけて削除していきます。
?を入力するとヘルプ画面が表示されます

不要なDockerイメージを削除

`dockrer ps -a` とか `docker images`とかを打ちながら、もう使っていないDockerコンテナ/イメージを削除します。

$ docker ps -a  #コンテナ一覧
$ docker images # イメージ一覧

$ docker rm [container] # コンテナ削除(その前にdocker stop [container]でコンテナ停止が必要)
$ docker rmi [image] # イメージ削除

上記のようなコマンドを一括で行うには

$ docker system prune -a

を実行します。これを実行すると以下の内容が削除されます:

  • all stopped containers
  • all networks not used by at least one container
  • all images without at least one container associated to them
  • all build cache

Android emulatorのDocker Imageが11GBくらいあったので、思い切って削除しました。

MySQLのデータベース削除

$ mysql --version
mysql  Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))


$ sudo mysql -u root -p;

mysql> show databases;
mysql> drop database [hoge];
......
mysql> quit

みたいな感じでMySQLの不要なテーブルやデータベースを削除していきます。

最終的に残ったデータベースはこれだけになりました。↓(おそらくデフォルト?)

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

各種ログ削除

ここから、各アプリケーションのログを削除していきます。
`/var/cache/ `とかに入っている場合が多いのかなぁ...

Slack

どこにあったかはメモしていなかったためわかりませんでしたが、どこかにSlackフォルダがあってそこにlogがあったので全部消しました。
//TODO:どこだっけ?

MySQL

MySQLのログは/var/lib/mysqlにバイナリーログとしてあるようです。Linuxのrmコマンドを使ってもいいのかもしれませんが、怖いのでこうしました:

mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000186 |  85478899 | No        |
(略 100ファイルくらいあった)
| binlog.000321 |      1531 | No        |
| binlog.000322 |       574 | No        |
+---------------+-----------+-----------+
137 rows in set (0.07 sec)

mysql> PURGE BINARY LOGS TO 'binlog.000322';
Query OK, 0 rows affected (0.07 sec)


mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000322 |       574 | No        |
+---------------+-----------+-----------+
1 row in set (0.00 sec)

2つ目のコマンド、「PURGE BINARY LOGS TO 'binlog.000322';」で「binlog.000322よりも古いログを消す」という操作を実行しています
いい感じです。

参考:https://www.casesup.com/category/knowledgebase/howtos/how-to-remove-and-purge-old-mysql-binary-log-files



snap関連を削除

これはしないほうが良いかも?

$ sudo apt purge snapd
sudo rm -rf /var/cache/snapd/

結果

再度dfコマンドを実行した結果:

$ df / -h
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda5      ext4   82G   25G   53G  33% /

おお〜〜!!!
個人的には、MySQLのログとDockerの不要コンテナ削除が大きかった気がします。

YouTubeに有料の素材を使った動画をアップする(Envato Market / audiojungle)

先日、サークルの新歓PVで↓の様な動画を作りました。

www.youtube.com


この動画にはBGMにaudiojungleの有料素材を使っているのですが、その場合はYouTubeに「正規のサイトから購入したから著作権問題は大丈夫だよ!」という事を伝える必要があります。この記事はその方法の記録です。

YouTube Content IDシステム( YouTube著作権管理()

YouTubeに動画をアップすると、その時に事前に登録されている著作権コンテンツ一覧から類似するものが無いかを確かめます。それがContent IDというシステムです。一致するコンテンツが検知された場合、以下の様な対処がなされる場合があります。

  • 動画の公開範囲の制限(限定公開など)
  • 動画の収益化
  • 統計情報の追跡

これに対して、正当なライセンスを持っていることを伝える「異議申し立て」を行い、上記の対処を取り消すように申告することができます。

蛇足ですが、著作権コンテンツの一致検査は、動画がアップロードされた時だけではなく定期的に実行されているそうです


ライセンス確認

私が使用した曲の場合、以下の様なライセンスでした(画面右側のLicense detailsをクリック→view full licenseするとみることができます)。

You are licensed to use the Item in one of the following ways (Allowed Use), in a single application (a single product or project):
(a) synchronisation with an audio-visual or audio-only work, to create one End Product that incorporates the Item as well as other things, so that it is larger in scope and different in nature than the Item;
(b) specific direct playback uses, which are background music for one event, venue or location, one company’s private on-hold music system, or one personal mobile ring-tone.

Music Standard License | AudioJungle より引用)

ほかにも色々禁止事項などが書かれていますが要約すると、

  • YouTubeなどの動画サービスで使うのはOK (宣伝でも可)
  • 10000回まで使用可
  • TV放送で使用不可
  • 劇場版の映画で使用不可

という感じでした。


YouTubeに公開する

ここでは特別な作業は必要ありません。通常の動画と同じようにYouTube Studioからアップロードします

異議申し立てを行う

動画をアップロードして少し経つと、おそらく「YouTube Studio」の「動画の詳細(下写真)」の「制限」の欄に著作権コンテンツが使用されていることが表示されると思います。
(下の画像は異議申し立てが受理された後のスクショなので制限なしになっていますが)
f:id:pythonjacascript:20210328073705j:plain


それをクリックすると、↓の様な画像が表示されます
f:id:pythonjacascript:20210328074011j:plain
動画が限定公開になって、著作権者によって収益化されていますね。
画面右側の「操作を選択」から「異議申し立て...」を選択します。



f:id:pythonjacascript:20210328073928j:plain
きちんと正規のサイトからライセンスを購入しているので「ライセンス」を選択



f:id:pythonjacascript:20210328073944j:plain
チェックして次へ



f:id:pythonjacascript:20210328074002j:plain
「ライセンス情報」の欄には、audiojungleのライセンス証明書を記載します。
参考:Where Is My Purchase Code? – Envato Market Help Center

ライセンス証明書を取得するため、まず、Envato Marketにログインします。
audiojungle.net

ログイン後、右上のユーザーメニューから「Downloads」を選択
f:id:pythonjacascript:20210328074802j:plain


「License certificate & purchase code(text)」を選択して、ライセンス証明書をダウンロードします。
f:id:pythonjacascript:20210328074923j:plain


で、これをYouTubeの異議申し立て欄の「ライセンス情報」欄に記載します。こんな感じ:

A license to use this music "Powerful Inspiring Positive Cinematic Orchestra (long version)" by "WavebeatsMusic" was purchased from audiojungle.net
LICENSE CERTIFICATE : Envato Market Item
==============================================
This document certifies the purchase of:
ONE MUSIC STANDARD LICENSE
as defined in the standard terms and conditions on Envato Market.
Licensor's Author Username: WavebeatsMusic
Licensee:hoge hoge
Item Title:Inspiring & Uplifting Cinematic
Item URL:https://audiojungle.net/item/powerful-inspiring-positive-cinematic-orchestra/21564893
Item ID:20210307
Item Purchase Code : 114514-810-1234-5678-31415926535
Purchase Date:2020-09-11 12:07:53 UTC
For any queries related to this document or license please contact Help Team via https://help.market.envato.com
Envato Pty. Ltd. (ABN 12 138 211 777) PO Box 16122, Collins Street West, VIC 8007, Australia
==== THIS IS NOT A TAX RECEIPT OR INVOICE ====

で、下の3つにチェックをつけて送信します。


異議申し立て受理

異議申し立てから数時間後、YouTubeアカウントのメールアドレスに返信がきました。
f:id:pythonjacascript:20210328075616j:plain
異議申し立てが通って、ライセンス認証がされました!やったね(*^^*)

動画の公開範囲が「制限なし」になってる:
f:id:pythonjacascript:20210328073705j:plain

これで、無事に動画を公開することができましたとさ、めでたしめでたし



【C++】MinGW (g++)とCMakeでOpenCVとopencv-contributeをビルドする(Windows)

  

バージョン

$ cmake --version
cmake version 3.17.2

$ make -v
GNU Make 3.81

$ mingw32-make -v
GNU Make 4.2.1

$ g++ -v 
gcc version 8.1.0 

はじめに

タイトルの通りです。開発環境がVisual Studioを使っているならば、ココの「Windows」ボタンからビルド済みのものをインストールできますが、g++, gccでビルドされたものは見つかりませんでした。
[追記]...と思っていたら、ありました!!
https://github.com/huihut/OpenCV-MinGW-Build
まぁでも最新バージョンではないっぽいし、自分でビルドすることにしました。


ということで、OpenCVの適当なバージョンをダウンロードして、cmakeで普通にやろうとしたのですが、

$ cmake [directry]

ってしても、抑もConfigureが通りません。そして、そのままmakeをしても、

gcc: error: long: No such file or directory
C:\PROGRA~1\MINGW-~1\X86_64~1.0-P\mingw64\bin\windres.exe: preprocessing failed.
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] エラー 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] エラー 2
make: *** [all] エラー 2

 
もちろんですがエラーが出てしまいました。

ということで、CMakeのGUIを使って設定する必要があります。


ビルド方法

1. opencv-3.4 とcontributeをダウンロードする
ここ↓から、最新バージョンのOpenCVをgit cloneしてきます。
github.com
そして、ここ↓から最新バージョンのOpencv-contributeをgit cloneしてきます。
github.com

Contributeとは:OpenCvの追加物みたいなもので、顔認識やセグメンテーションのような機能を追加できます(機能一覧についてはここを見てください)。十分にテストされていないAPIなので、OpenCV本体と一緒にするべきではない、という考えのようです。

 

2. opencv-3.4の中にbuildフォルダを作る(名前は何でもOK)

opencv-3.4
↳build_mingw (←作成)
opencv_contrib-3.4

みたいな感じです。


3. Cmake GUIを開く
CMakeGUIを開いて、一番上にある「Where is the source code」と「Where to build the binaries」を設定します。
ソースコードの位置は hoge/opencv-3.4、ビルド先にはhoge/opencv-3.4/build_mingw みたいな感じで先ほど作ったフォルダを指定します。
そして、Configureボタンを押します。

4. コンパイラMinGWに指定する
Configureボタンを押すと、以下の様なコンパイラーを選択する画面が表示されます。
f:id:pythonjacascript:20201113010159j:plain
この写真のように設定してFinishを押します  

7. 以下の様な設定にします。
Configureが終わると、未解決の項目が赤くなって大量に表示されているはずです。ここからビルド設定を行います。ここは個人の環境によって変わるかもしれませんが、僕の環境では以下の設定でビルドが通りました。

  • BUILD_JAVAのチェックを外す
  • BUIKD_PYTHONのチェックを外す
  • BUILD_OPENEXRのチェックを外す
  • WITH_IPPのチェックを外す
  • ENABLE_PRECOMPILED_HEADERS のチェックを外す
  • WITH_OPENGL のチェックを付ける
  • OPENCV_ENABLE_NONFREEのチェックを付ける
  • OPENCV_EXTRA_MODULES_PATH のパスを「hoge/opencv_contrib-3.4/modules」に設定する
  • BUILD_opencv_worldのチェックを付ける(これをチェックすると、libファイルやdllファイルが「opencv_world_[version].dll」の様な名前で一つにまとめてくれる)


7. DOPENCV_ALLOCATOR_STATS_COUNTER_TYPEを追加
CMake GUIの右上に「Add Entry」というボタンがあるので、そこを押します。
そして、
f:id:pythonjacascript:20201113010950j:plain

  • Name = DOPENCV_ALLOCATOR_STATS_COUNTER_TYPE
  • Type = STRING
  • Value = int64_t(上写真ではDescriptionの所に書き込んでいますがミスですm(__)m。Valueが正解)

となるように設定します。

f:id:pythonjacascript:20201113011135j:plain
このように表示されればOKです。


10. 「Configure」→「Generate」
これで、一通りの設定が終わったので、もう一度Configure をしてみましょう!
エラーが出ずに最後までConfigureできたら成功です。Generateもします。


11. コマンドプロンプトで「make」!
ここまで順調に来ていれば、mingw_buildフォルダ(2.で作成したフォルダ)にMakeFileがあるはずなので、

$ cd mingw_make  #(2.で作成したフォルダ)
$ make

でmakeします。

上手くいけば、以下のファイルが生成されているはずです

  • mingw_make/bin/libopencv_world3412.dll
  • mingw_make/lib/libopencv_world3412.dll.a

上の二つがあればビルドはできています!!(*'ω'*)


HelloWorld

適当にプログラムを作ります。HelloWorldという文字を出力するプログラムです。

//main.cpp
#include <opencv2/opencv.hpp>
int main() {
  cv::Mat image(200, 800, CV_8UC3);
  
  cv::String text = "Hello, world";
  cv::putText(image, text, cv::Point(100,100), cv::FONT_HERSHEY_SIMPLEX, 3, cv::Scalar(255,255,0), 5, cv::LINE_AA);// テキストを描画

  // 画像を表示
  cv::imshow("hello_world", image);
  cv::waitKey(0);
  return 0;
}



CmakeListsは以下のようになります。

# CmakeLists.txt
cmake_minimum_required(VERSION 2.8)

set(PROJECT_NAME Test)
project(${PROJECT_NAME} CXX)

set(OpenCV_DIR "hogw/mingw_build") #2.で作成したフォルダ
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
    include_directories(${OpenCV_INCLUDE_DIRS})
    link_libraries(${OpenCV_LIBS})
endif()

add_executable(${PROJECT_NAME} main.cpp main.hpp)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})


コマンドプロンプトで、

$ cd (上で書いた.cppとCMakeFilesがあるディレクトリ)
$ mkdir build 
$ cmake .. -G"MinGW Makefiles"  # コンパイラをMinGWに指定する
$ make

これでTest.exeが生成されればOKです!!

動的ライブラリファイル「(2.で作ったフォルダ)/bin/libopencv_world3412.dll」をTest.extと同じ階層にコピーしてきます。
これで、OpenCVのプログラムを実行できるはずです、、、!

HelloWorld実行

実行できたぁ~~
f:id:pythonjacascript:20201113012407j:plain