Flow-Developers

Raspberry Pi, Raspbian, python, ROS, IoT, 電子工作, 機械学習, Deep learning, ライフハック

Windows環境で『Apple ProRes』を書き出す方法まとめ

Windows環境で、『Apple ProRes』を書き出す方法

FFmpegを使えば、Windows環境は書き出せます。

f:id:flow-dev:20220403103509p:plain
Apple ProRes

コマンドをご紹介します。

23.98fps / yuv422 / ProResHQ /

ffmpeg -r ntsc-film -i input.mp4 -y -threads 0 -codec:v prores_ks -pix_fmt yuv422p10 -profile:v 3 -bits_per_mb 8000 -vendor ap10 -vf scale=in_color_matrix=bt709:out_color_matrix=bt709 -r ntsc-film output.mov

Timecode指定 / 23.98fps / yuv422 / ProResHQ /

ffmpeg -r ntsc-film -i input.mp4 -timecode 11:00:06:00 -y -threads 0 -codec:v prores_ks -pix_fmt yuv422p10 -profile:v 3 -bits_per_mb 8000 -vendor ap10 -vf scale=in_color_matrix=bt709:out_color_matrix=bt709 -r ntsc-film output.mov

RGBA(4ch)連番png / 23.98fps / ProRes4444 /

ffmpeg -r ntsc-film -i %05d.png -y -threads 0 -codec:v prores_ks -pix_fmt rgba -profile:v 4444 -bits_per_mb 8000 -vendor ap10 -vf scale=in_color_matrix=bt709:out_color_matrix=bt709 -r ntsc-film output.mov

ご参考 blog.goo.ne.jp

flow-developers.hatenablog.com

DaVinci Resolveで『10bitの動画』を書き出す設定

DaVinci Resolveで『10bitの動画』を書き出す設定

10bitで収録した素材、10bitで書き出したいですよね。

DaVinci Resolveの設定方法をまとめました。

※DaVinci Resolve17.4 (2022年/4月1日現在) の情報

f:id:flow-dev:20220403100843p:plain
DaVinci Resolve17

『デリバーページ』で2つの設定が必要

エンコーダー』の設定で、『NVIDIA』を選択

f:id:flow-dev:20220403100133p:plain
エンコーダー』の設定で、『NVIDIA』を選択

『プロファイル』の設定、『メイン10』を選択

f:id:flow-dev:20220403100408p:plain
『プロファイル』の設定、『メイン10』を選択
一覧表にしてみました。

プロファイル設定 書き出し
メイン 8bit書き出し
メイン10 10bit書き出し
メイン4:4:4 4:4:4 8bit書き出し
メイン4:4:4 10 4:4:4 10bit書き出し

以上2つの設定を行えば、

DaVinci Resolveで『10bitの動画』を書き出すことが出来ます。

OSError: broken data stream when reading image fileの回避

OSError: broken data stream when reading image fileの回避

機械学習で、大量の画像をPILで読み込んでいる時、OSError: broken data stream when reading image fileに遭遇して、trainが止まってしまう現象に遭遇したら、以下の方法で回避できます。

PILの【LOAD_TRUNCATED_IMAGES】を有効にする

PILの、LOAD_TRUNCATED_IMAGESを有効にする事で、OSError: broken data stream when reading image fileを回避できます。PILを使用しているところすべてに、この対応を行いましょう。

from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

stackoverflow.com

以上です。快適な機械学習を!

OBS studioでNDI対応 (Ubuntuの場合)

OBS studioでNDI対応 (Ubuntuの場合)

NDIって便利です。IPネットワーク上で高画質な映像を伝送できるんです。そしてNDIは、UE4、Unity、OBS studio、様々なソフトが送受信に対応してます。 Ubuntuで画像処理したストリームを、UE4、Unity、OBS studioに渡したい。そんな時、NDIはとっても便利です。今回は、Ubuntu版のOBS studioで、NDIを受信する環境構築をご紹介します。

www.pronews.jp

1. OBS studio version25.0 以降をインストール

sudo apt install ffmpeg
sudo apt install v4l2loopback-dkms
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt update
sudo apt install obs-studio

memo

  • ffmpegは必須です。
  • 仮想カメラを使うならv4l2loopback-dkmsが必要。入れておきましょう。
  • OBS studioのmultiverse repoを有効化することで、OBS studio最新版を取得できます。

obsproject.com

2. obs-ndi 4.9.1をインストール

  • libndi4_4.5.1-1_amd64.debをダウンロード&インストール
  • obs-ndi_4.9.1-1_amd64.debをダウンロード&インストール

  • debなので、ダブルクリックで簡単にインストールできます。

※2022年2月現在、obs-ndiはNDI4をサポートしています。

github.com

3. OBS studioを立ち上げて、NDI™Sourceを追加でOK

NDI™Sourceを追加すれば、お好きなNDIストリームを受信できます。

f:id:flow-dev:20220205083349p:plain

以上で、OBS studioでNDI対応 (Ubuntuの場合)の環境構築が完了です。

Build and Install onnx-tensorrt on JetsonXavierNX(Jetpack 4.4)

build and install onnx-tensorrt

f:id:flow-dev:20210213134706p:plain

environment

  • jetson xavier nx
  • jetpack4.4
uname -a
Linux jetson xaveir-nx 4.9.140-tegra #1 SMP PREEMPT Tue Oct 27 21:02:46 PDT 2020 aarch64 aarch64 aarch64 GNU/Linux

update cmake (3.13 Later for onnx-tensorrt)

  • Install what you need to build cmake.
sudo apt install libssl-dev libprotobuf-dev protobuf-compiler

# Was neccessary for my environment for $ ./bootstrap
  • Build and install the latest version of cmake

qiita.com

install onnx-tensorrt on jetosn xavier nx

  • Build onnx-tensorrt using the following steps
git clone --recursive -b 7.1  https://github.com/onnx/onnx-tensorrt.git  onnx_tensorrt
cd onnx-tensorrt
mkdir build && cd build
cmake .. -DTENSORRT_ROOT=/usr/src/tensorrt -DCMAKE_INSTALL_PREFIX=/usr/  
make -j8
sudo make install

www.codenong.com

※If you want to Build with Docker, please refer to here.

https://github.com/onnx/onnx-tensorrt/issues/385

convert model onnx to tensorrt

  • How to execute
onnx2trt my_model.onnx -o my_engine.trt

install onnxruntime 1.4.0

wget https://nvidia.box.com/shared/static/8sc6j25orjcpl6vhq3a4ir8v219fglng.whl -O onnxruntime_gpu-1.4.0-cp36-cp36m-linux_aarch64.whl
pip3 install onnxruntime_gpu-1.4.0-cp36-cp36m-linux_aarch64.whl

developer.nvidia.com

install onnx_tensorrt.backend

  • PATH to CUDA.
#Add a blank, then these 2 lines
# (letting your Nano know where CUDA is) to the bottom of the file.

sudo nano ~/.bashrc

export PATH=${PATH}:/usr/local/cuda/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64

source ~/.bashrc

# test nvcc path done
nvcc --version
  • In order to install "onnx_tensorrt.backend" on Jetson XavierNX, you need to change the following two files in onnx-tensorrt. The differences are as follows.
--- a/NvOnnxParser.h
+++ b/NvOnnxParser.h
@@ -31,6 +31,10 @@
 #define NV_ONNX_PARSER_MINOR 1
 #define NV_ONNX_PARSER_PATCH 0
 
+#ifndef TENSORRTAPI
+#define TENSORRTAPI
+#endif // TENSORRTAPI
+
 static const int NV_ONNX_PARSER_VERSION = ((NV_ONNX_PARSER_MAJOR * 10000) + (NV_ONNX_PARSER_MINOR * 100) + NV_ONNX_PARSER_PATCH);
 
 //! \typedef SubGraph_t
diff --git a/setup.py b/setup.py
index 8ffa543..d6244a3 100644
--- a/setup.py
+++ b/setup.py
@@ -59,10 +59,11 @@ EXTRA_COMPILE_ARGS =  [
     '-std=c++11',
     '-DUNIX',
     '-D__UNIX',
-    '-m64',
     '-fPIC',
     '-O2',
     '-w',
+    '-march=armv8-a+crypto',
+    '-mcpu=cortex-a57+crypto',
     '-fmessage-length=0',
     '-fno-strict-aliasing',
     '-D_FORTIFY_SOURCE=2',
  • After the above preparation, I was able to install it with the following command.
cd onnx-tensorrt
sudo apt install swig
pip3 install pycuda
sudo python3 setup.py install
  • In python3, if import onnx_tensorrt.backend as backend succeeds, install succeeds.
python3
>>import onnx_tensorrt.backend as backend

onnx->TensorRT変換するときに便利なサイト

  • TopK layer(2次元)や,Dobule型は2021/1現在,TensorRT変換できないので対処する記述が必要.

PyTorch documentation — PyTorch 1.10 documentation

  • onnx->TensorRT変換のErrがどこで起きてるか探しやすい.Ctrl+Fでlayer番号で検索できる.

Netron

  • Nvidiaのフォーラムに行けば大体似たようなErrに遭遇しているので,きっかけにはなる.

NVIDIA Developer Forums - NVIDIA Developer Forums

  • onnx-tensorrt/issuesも活発でよい質問多い.

github.com

  • onnxモデルをきれいにしてくれるので使ってもよいが,今回の場合は,綺麗にしすぎてTensorRT変換が出来なくなった.
  • --input-shapeで動的サイズのinputを,静的サイズに変更できるのは便利な時があるかもしれない.
  • Jetson XavierNXでonnx-tensorrtの環境を作った後だとうまくinstallできなかったので,別のPCで環境作った.

github.com



定番ジンバル、DJI Roninをリモートコントロール!

定番ジンバル、DJI Roninをリモートコントロール

f:id:flow-dev:20220224095416j:plain

DJI Roninのリモートコントロール機能は、驚くほど機能が豊富です。マルチカメラ制御ケーブルを利用すれば、マウントしたカメラのREC開始などもジンバル側からコントロールできます。そして、これらすべてはスマートフォンからコントロールが出来るのです。とっても便利なので、使い方のポイントをご紹介。

1. 必要な機材

  • DJI Ronin-S / DJI Ronin-SC / DJI Ronin-RS2 本体
  • Ronin マルチカメラ制御ケーブル ★注意!!! Ronin-S マルチカメラ制御ケーブルはカメラメーカー毎に種類があります!

2. ジンバルのリモートコントロール機能紹介

  • スマフォ上のジョイスティックで、ジンバルの向きをグリグリ動かせる。
  • PS4 or XBOX360のコントローラで、ジンバルの向きをグリグリ動かせる。
  • PS4 or XBOX360のコントローラで、 録画/ズーム/フォーカス制御が出来る。
  • スマフォのカメラで被写体トラッキングを行い、 ジンバルが被写体を自動追尾する。
  • ジンバルの正確なパンを利用して、パノラマ撮影ができる。
  • ジンバルの動きを事前に計画し、ロボットカメラ撮影ができる。


DJI Ronin-SC: How to connect your PS4 Controller

3. リモートコントロールできるカメラの機能一覧

f:id:flow-dev:20200923092546p:plain
SONYカメラのリモート制御一覧

4. スマートフォンの制御画面はこんな感じ

  • 直感的で使いやすいUIです。

f:id:flow-dev:20200923092426p:plain
スマフォ制御画面

便利なので、ぜひ一度使ってみると良いですよ。

参考リンク

https://dl.djicdn.com/downloads/Ronin-S/20190926/Ronin_S_Camera_Compatibility_List_en_0926.pdf

www.cined.com

www.cined.com

JetsonXavierNXでlibjpeg-turboを使う

はじめに

  • cv2.imdecode()だと, Jpegのdecodeが遅い.
  • SIMD命令のlibjpeg-turboをXavierNXで使いたい.
  • PythonAPIで呼びたい.

f:id:flow-dev:20210213134510p:plain

libjpeg-turboのInstall

  • 以下のinst_libjpeg-turbo_205.shを使うと簡単.

Jetson_Convenience_Script/inst_libjpeg-turbo_205.sh at master · FREEWING-JP/Jetson_Convenience_Script · GitHub

wget https://raw.githubusercontent.com/FREEWING-JP/Jetson_Convenience_Script/master/libjpeg-turbo/inst_libjpeg-turbo_205.sh
chmod 777 inst_libjpeg-turbo_205.sh 
bash ./inst_libjpeg-turbo_205.sh

PyTurboJPEGのInstall

  • python3からlibjpeg-turboを呼ぶAPI

pypi.org

sudo pip3 install PyTurboJPEG

PyTurboJPEGの書き方

import cv2
from turbojpeg import TurboJPEG

# specifying library path explicitly
# defaultでlinuxの場合は,/usr/lib64/libturbojpeg.soを指してるので指定は不要.
# jpeg = TurboJPEG('/usr/lib64/libturbojpeg.so')

# using default library installation
jpeg = TurboJPEG()

# direct rescaling 1/2 while decoding input.jpg to BGR array
in_file = open('input.jpg', 'rb')

# 指定倍率でリサイズ可能. 速い.
# supported scaling factors are 
# [(2, 1), (15, 8), (7, 4), (13, 8), (3, 2), (11, 8), (5, 4), (9, 8), 
# (1, 1), (7, 8), (3, 4), (5, 8), (1, 2), (3, 8), (1, 4), (1, 8)]

bgr_array_half = jpeg.decode(in_file.read(), scaling_factor=(1, 2))
in_file.close()
cv2.imshow('bgr_array_half', bgr_array_half)
cv2.waitKey(0)

まとめ

  • libjpeg-turboで, Jpegのdecodeを高速化できた.
  • XavierNXだと, cv2.imcodeに比べて若干速い程度.(scaling_factorを上手く使うと速い)
  • PythonAPIで呼べるので便利.

参考リンク

PyTurboJPEG · PyPI

GitHub - lilohuang/PyTurboJPEG: PyTurboJPEG is a highly optimized Python wrapper of libjpeg-turbo (TurboJPEG API) which supports x86 and ARM architecture.

【2020年版】NVIDIA Jetson Nano、Jetson Xavier NXの便利スクリプト (Jetsonの面倒な初期設定やミドルウェアのインストールを bashスクリプトの実行だけで簡単にできます)

おまけ

  • arm64だと使えなかった高速化ネタ

  • pillow-simd, accimage. Desktopで使えば便利そう.

qiita.com