CrazyEasyFluidAnalysisSystem Tools Tutorial created by cooyou.org
付属アプリケーション一式のチュートリアルです。
付属アプリケーション一式に含まれているpythonスクリプトについて説明します。
pythonスクリプト一覧
※すべてのスクリプトはDocker上のUbuntu Linuxのコマンドラインで実行できます。
※これらのスクリプトファイル自体はWindows等のホストOSの任意フォルダに配置しておくことで、Ubuntu Linuxの/home/user/wcfdで参照できます。
※docker exec -it 番号 /bin/bash で実行直後にカレントディレクトリは自動的に/home/user/wcfdに移動します。
作業フォルダとpythonスクリプトファイルの配置フォルダが異なる場合は例えば以下のように使用します。
cd /home/user/wcfd/test
python ../makegraph.py sample/resultbox.csv 5
この場合は/home/user/wcfd/testが作業フォルダで、makegraph.pyは一つ上の/home/user/wcfdに配置されてます。
../というのが一つ上のフォルダを指定する意味です。../../とすれば2つ上になります。
xmlcheck.py 本システム用のXMLのフォーマットチェック
test.xmlのフォーマットをチェックする例
python xmlcheck.py test.xml world.xsd
で任意のXMLファイルのフォーマットチェック結果を表示します。
world.xsdは付属アプリケーション一式に含まれてます。
world.xsdとは本システム用のXMLの書式が記述されたファイルです。
python xmlcheck.py --help
usage: xmlcheck.py [-h] xml xsd
XSD 1.1 対応 XML検証ツール
positional arguments:
xml 検証する XML ファイル
xsd 使用する XSD ファイル
options:
-h, --help show this help message and exit
makegraph.py 本システム出力CSVファイルのグラフ作成
BOXのグラフを画像を作成する場合の例
python makegraph.py sample/resultbox.csv 4 -n boxname
DOORのグラフ画像を作成する場合の例
python makegraph.py sample/resultdoor.csv 5 -n doorname
sampleとはケース名(プロジェクト名)です。
resultbox.csvが本システムで生成するBOXの結果のCSVファイルです。
resultdoor.csvが本システムで生成するDOORの結果のCSVファイルです。
数値はCSVファイルの列番号(0から開始)です。
-nオプションでスペース区切りで任意のBOXまたはDOORの名前を指定できます。無指定の場合はすべて
python makegraph.py --help
usage: makegraph.py [-h] [-n [NAMES ...]] [--xlim XLIM XLIM] [--ylim YLIM YLIM] filename column_index
CSVデータをプロットし、JPEG保存します。
positional arguments:
filename 読み込むCSVファイルのパス
column_index 縦軸にする列のインデックス
options:
-h, --help show this help message and exit
-n [NAMES ...], --names [NAMES ...]
表示したい名前
--xlim XLIM XLIM 横軸の範囲 (例: --xlim 0 0.3)
--ylim YLIM YLIM 縦軸の範囲 (例: --ylim -1.0 1.0)
resultbox.csvの列
| 列番号 | 列名 | 意味 |
| 0 | time | 時刻[sec] |
| 1 | type | BOX 初期値から変化なし |
| 2 | name | BOX名 初期値から変化なし |
| 3 | volume_m3 | 体積[m3] XMLでの定義値から本システムで計算。初期値から変化なし |
| 4 | p_Pa | 気圧[Pa] OpenFoamから取得 |
| 5 | T_C | 気温[度] OpenFoamから取得 |
| 6 | velocity_mps | 風速[m/sec] OpenFoamから取得 |
| 7 | humidity_Pv_Pa | 飽和水蒸気圧[Pa] 本システムで計算 |
| 8 | humidity_RH_% | 相対湿度[%] 本システムで計算。100%の制限なし |
resultdoor.csvの列
| 列番号 | 列名 | 意味 |
| 0 | time | 時刻[sec] |
| 1 | type | DOOR 初期値から変化なし |
| 2 | name | DOOR名 初期値から変化なし |
| 3 | p1_Pa | 開始面中央の気圧[Pa] OpenFoamから取得 |
| 4 | p2_Pa | 終了面中央の気圧[Pa] OpenFoamから取得 |
| 5 | dp_Pa | p1_Paとp2_Paの差圧の絶対値[Pa] 本システムで計算 |
| 6 | maxDpTime | dp_Paの最大差圧の時刻[sec] 本システムで記憶 |
| 7 | maxDp_Pa | dp_Paの最大差圧[Pa] 本システムで記憶 |
| 8 | velocity_mps | 風速[m/sec] OpenFoamから取得 |
| 9 | massFlow_kgps | 流速[kg/sec] 本システムで計算 |
| 10 | tolerance_Pa | 耐圧[Pa] XMLでの定義値 |
| 11 | area_m2 | ドア開始面の面積[m2] XMLでの定義値から本システムで計算。初期値から変化なし |
| 12 | force_N | ドアにかかる力[N] 本システムで計算 |
| 13 | broken | 差圧が耐圧を超えて破壊されたか 0:未破壊 1:破壊済。本システムで判定 |
※_Paとなっているところは設定により_psiになる場合があります。その場合の単位はpsiとなります。
makemovie.py ParaViewからエクスポートのJPEG画像連番ファイルをMP4に変換
ケース名(プロジェクト名)がsampleでParaView出力の連番JPEG画像がanimeimgsフォルダにある場合
python makemovie.py --project sample --anime animeimgs --scale 0.1
--scaleは時間スケールを指定します。1.0がリアルタイムの動画です。0.1でしたら10倍のスローモーションです。
python makemovie.py --help
usage: makemovie.py [-h] --project PROJECT --anime ANIME [--scale SCALE] [--end END]
[--offsettime OFFSETTIME]
options:
-h, --help show this help message and exit
--project PROJECT シミュレーション名フォルダを指定
--anime ANIME 連番画像フォルダを指定
--scale SCALE 時間スケールを指定
--end END 終了時刻(秒)を指定
--offsettime OFFSETTIME
マイナスするオフセット時間を指定
--offsettimeとは初めに破壊されるドアの時刻をセットするとその時刻を0とします。
XMでのドア定義のenabletimeタグと一致させると便利です。デフォルトは0
divideportrait.py 横長MP4動画を縦長動画に上下に帯をいれてMP4に変換。ファイル分割
inというフォルダを作成してそこに横長動画のsample.mp4ファイルを配置したとします。
outというからのフォルダを作成しておきます。
python divideportrait.py in out 60
これでoutにはsample.mp4を60秒ごとに分割して上下に黒帯を入れた縦長動画が複数生成されます。
分割された動画の開始と終了は自動的に数秒だけオーバーラップして分割されます。
また、入力フォルダには複数のファイルを配置できます。
--firstonlyオプションを指定した場合は初めの1つの分割ファイルのみ作成します。
python divideportrait.py --help
usage: divideportrait.py [-h] [--firstonly FIRSTONLY] [--overlapsec OVERLAPSEC] [--color COLOR]
[--outwidth OUTWIDTH] [--outheight OUTHEIGHT] [--skip SKIP]
indir outdir maxsec
positional arguments:
indir
outdir
maxsec
options:
-h, --help show this help message and exit
--firstonly FIRSTONLY, -f FIRSTONLY
--overlapsec OVERLAPSEC, -o OVERLAPSEC
--color COLOR, -c COLOR
--outwidth OUTWIDTH, -x OUTWIDTH
--outheight OUTHEIGHT, -y OUTHEIGHT
--skip SKIP, -s SKIP
denoise.py MP3,WAV音声ファイルのノイズリダクション
python denoise.py test.mp3 -p 1.0
のように実行します。クリア音声のtest_clean.mp3とノイズ音のtest_noise.mp3ができます。
1.0は除去の強さです。
入力は.wavファイルでも結構です。
-f wavと指定するとmp3ではなくwav形式の出力になります。
python denoise.py -h
usage: denoise.py [-h] [-f {mp3,wav}] [-p PROP] [-pk PEAK] input
AIノイズ除去ツール (MP3/WAV対応)
positional arguments:
input 入力ファイルのパス (mp3, wav等)
optional arguments:
-h, --help show this help message and exit
-f {mp3,wav}, --format {mp3,wav}
出力形式 (デフォルト: mp3)
-p PROP, --prop PROP 除去の強さ 0.0-1.0 (デフォルト: 0.5)
-pk PEAK, --peak PEAK
正規化ピーク値 (デフォルト: 1.5)
ontei.py MP4動画やMP3音声ファイルから声と背景音を分離。音域のヒストグラフ作成。キー変更。
任意のフォルダにMP4動画またはMP3音声ファイルを配置します。
python ontei.py sample G3:D6
のように実行します。sample内に歌のMP4動画またはMP3音声ファイルが配置されているとします。
ボーカルと楽器音に分離されてそれぞれのMP3ファイルがsample内に生成されます。
また、ここで指定しているG3:D6というのは自分の声の音域範囲の例です。
グラフ画像が2種類生成されます。originalの音源で解析したボーカルのヒストグラムがあります。
ヒストグラムの横軸にはノート番号も記載されてますので指定する音域の参考になると思います。
また、自分の声の音域にshiftした音声ファイルも生成されます。ファイル名のshiftの数値が実際にカラオケで設定するキーです。
仮に男性が女性ボーカルの音を歌う場合でも、キーをマイナスして下げるとは限りません。プラスで上げるとキーが合う場合もあります。
python ontei.py
使い方: python script.py 入力ファイルまたはフォルダ [指定音域(例:G3:D6 または 48:74)]
video2srt.py MP4動画から字幕の日本語strファイルまたはテキストファイルを作成
python video2srt.py sample.mp4
のように実行しますと、初回は辞書データをダウンロードします。
sample.srtという日本語字幕のファイルsample.srtが出来上がります。
srt形式ではなくテキストの羅列がほしい場合は、--txtオプションを使用します。
python video2srt.py --help
usage: video2srt.py [-h] [--txt] input
動画/音声から文字起こしを行い、SRTまたは純粋なテキストを生成します
positional arguments:
input 入力ファイルパス (mp4, mp3など)
options:
-h, --help show this help message and exit
--txt 時刻なしの純粋なテキスト(.txt)で出力する
srt2video.py 字幕の日本語strファイルまたはテキストファイルから字幕描画の音声合成MP4動画を作成
python srt2video.py sample.srt
のように実行しますとsrtファイルから日本語での合成音声読み上げおよび字幕を描画したMP4動画sample_srt_Nanami.mp4が作成されます。
ファイル名の末尾には使用したボイス名が記載されます。
srtファイルではなくテキストの羅列のテキストファイルを指定する場合は、--txtオプションを指定してください。
色を変更するにはRRGGBBAAの16進数を指定します。
--color AA0000FF --bg_color 404080FF
色の16進数はこちらで作成できます。
Voice名は以下が使用できます。
python srt2video.py --list-voices
=== 日本語ボイス一覧 ===
ja-JP-KeitaNeural (男性)
ja-JP-NanamiNeural (女性)
python srt2video.py --help
usage: srt2video.py [-h] [--txt] [--voice VOICE] [--rate RATE] [--mp3_only] [--font FONT] [--size SIZE]
[--color COLOR] [--bg_color BG_COLOR] [--bg_video_color BG_VIDEO_COLOR]
[--pos {top,center,bottom}] [--margin MARGIN] [--resolution RESOLUTION] [--output_dir OUTPUT_DIR]
[--list-voices] [--list-fonts] [--chars_per_line CHARS_PER_LINE]
[input_file]
positional arguments:
input_file
options:
-h, --help show this help message and exit
--txt
--voice VOICE
--rate RATE
--mp3_only
--font FONT
--size SIZE
--color COLOR
--bg_color BG_COLOR
--bg_video_color BG_VIDEO_COLOR
--pos {top,center,bottom}
--margin MARGIN
--resolution RESOLUTION
--output_dir OUTPUT_DIR
--list-voices
--list-fonts
--chars_per_line CHARS_PER_LINE
1行あたりの最大文字数