網頁

2019年12月15日 星期日

Ubuntu 建立桌面捷徑 和 桌面啟動時自動執行

建立桌面捷徑
sudo apt-get install --no-install-recommends gnome-panel
gnome-desktop-item-edit ~/Desktop/ --create-new


桌面啟動時自動執行
開始/Startup Applications/Add

(sleep 10; shellcommand.sh)&

2019年11月6日 星期三

gitea in ubuntu

參考 如何在Ubuntu 18.04上安裝Gitea

安裝 Nginx
$ sudo apt update
$ sudo apt -y install nginx
安裝完成可以用瀏覽器測試 http://localhost
自動啟動 nginx
$ sudo systemctl stop nginx.service
$ sudo systemctl start nginx.service
$ sudo systemctl restart nginx.service
$ sudo systemctl reload nginx.service
$ sudo systemctl enable nginx.service

安裝 Git
$ sudo apt -y install git
$ git --version

安裝 MariaDB
$ sudo apt -y install mariadb-server mariadb-client
$ sudo systemctl stop mariadb.service
$ sudo systemctl start mariadb.service
$ sudo systemctl restart mariadb.service
$ sudo systemctl reload mariadb.service
$ sudo systemctl enable mariadb.service

建立 MariaDB root 密碼,並禁止遠端連接
$ sudo mysql_secure_installation
Enter current password for root (enter for none): Just press the Enter
Set root password? [Y/n]: Y
New password: Enter password
Re-enter new password: Repeat password
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

重新啟動 MariaDB
$ sudo systemctl restart mariadb.service

建立 gitea 資料庫, giteauser 使用者
$ sudo mysql -u root -p
CREATE DATABASE gitea;
CREATE USER 'giteauser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON gitea.* TO 'giteauser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

建立 git 使用者,以便運行 gitea
$ sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git
$ sudo mkdir -p /var/lib/gitea/{custom,data,indexers,public,log}
$ sudo chown git:git /var/lib/gitea/{data,indexers,log}
$ sudo chmod 750 /var/lib/gitea/{data,indexers,log}
$ sudo mkdir /etc/gitea
$ sudo chown root:git /etc/gitea
$ sudo chmod 770 /etc/gitea

下載並安裝 gitea
$ sudo wget -O gitea https://dl.gitea.io/gitea/1.5.0/gitea-1.5.0-linux-amd64
$ sudo chmod +x gitea
$ sudo cp gitea /usr/local/bin/gitea
$ sudo vi /etc/systemd/system/gitea.service
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
#After=mysqld.service
#After=postgresql.service
#After=memcached.service
#After=redis.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl enable gitea
$ sudo systemctl start gitea
$ sudo system status gitea

使用 Nginx 代理 gitea
$ sudo vi /etc/nginx/sites-available/git
upstream gitea {
 server 127.0.0.1:3000;
}

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name example.com;
 root /var/lib/gitea/public;
 access_log off;
 error_log off;

 location / {
 try_files maintain.html $uri $uri/index.html @node;
 }

 location @node {
 client_max_body_size 0;
 proxy_pass http://localhost:3000;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header Host $http_host;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_max_temp_file_size 0;
 proxy_redirect off;
 proxy_read_timeout 120;
 }
}

$ sudo ln -s /etc/nginx/sites-available/git /etc/nginx/sites-enabled
$ sudo systemctl reload nginx.service

開啟網頁設定 Gitea
http://localhost/install


錯誤排除

最後安裝動作 http://localhost:3000 出現下列錯誤
Index column size too large. The maximum column size is 767 bytes

sudo mysql -u root -p
[sudo] password for user: (os 的密碼)
Enter password:(mysql 的密碼)
MariaDB [(none)]> show global variables like 'innodb_large%';
MariaDB [(none)]> set global innodb_large_prefix = ON;
MariaDB [(none)]> set global innodb_default_row_format=dynamic;

MariaDB [(none)]> select user, host from mysql.user;
MariaDB [(none)]> show grants for 'giteauser'@'localhost';
MariaDB [(none)]> revoke all privileges, grant option from 'giteauser'@'localhost';
MariaDB [(none)]> drop user 'giteauser'@'localhost';
MariaDB [(none)]> drop database gitea;

http://localhost:3000/install
只能執行一次,下一次就回 404
sudo vi /etc/gitea/app.ini
INSTALL_LOCK=false
sudo systemctl stop gitea
sudo systemctl start gitea

http://localhost:3000/install
主要填寫 Database
Username=giteauser
Password=
點開 Server and Third-Party Service Settings
Disable Self-Registration
Require Sign-In to View Pages
點開 Administrator Account Settings
建立第一個 gitea 管理者


2019年10月24日 星期四

Jetson Nano 不接螢幕 預設螢幕解析度

編輯 /etc/X11/xorg.conf

新增

Section "Monitor"
    Identifier "DSI-0"
    Option "Ignore"
EndSection

Section "Screen"
    Identifier "Default Screen"
    Monitor "Configured Monitor"
    Device "Default Device"
    SubSection "Display"
        Depth 24
        Virtual 1280 800
    EndSubSection
EndSection






2019年10月18日 星期五

tensorflow 和 cuda cudnn 版本

查看各個版本的對應

查看目前 cuda 版本
cat /usr/local/cuda/version.txt

查看目前 cudnn 版本
grep CUDNN_MAJOR -A 2 /usr/local/cuda/include/cudnn.h
查看工具版本
which nvcc
nvcc --version

查看驅動程式版本
cat /proc/driver/nvidia/version

nvidia-smi

2019年10月16日 星期三

jetson nano sony IMX219 camera

使用 GStreamer

DISPLAY=:0.0 gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=3280, height=2464, format=(string)NV12, framerate=(fraction)20/1' ! nvoverlaysink -e


2019年10月9日 星期三

windows 10 憑證管理

本機裝置 的憑證 certlm.msc
目前的使用者憑證 certmgr.msc

參考格式 Create and assign SCEP certificate profiles in Intune 填寫 Subject
如: "DigiChance11,E=ing@yahoo.com,OU=Mark Chen,O=R&D,L=Taichung,S=Taiwan,C=TW"

CertFindCertificateInStore X509_ASN_ENCODING CERT_FIND_SHA1_HASH
對應 憑證指紋

2019年9月24日 星期二

2019年9月19日 星期四

虛擬機器

VirtualBox

VMware
在 Ubuntu 上似乎討論比較少,所以有些問題找不到答案
copy paste
physical disk

Booting a Physical Windows 10 Disk Using VirtualBox on Linux

9.8.1. Using a Raw Host Hard Disk From a Guest

Add a raw disk to a virtualbox virtual machine

VirtualBox 使用實體的硬碟
找出硬碟的位置如 /dev/sdb

$ sudo groupadd win10disk
$ sudo usermod -a -G win10disk youruser
$ sudo udevadm info /dev/sdX | grep UUID
E: ID_PART_TABLE_UUID=01234567-89ab-cdef-0123-456789abcde
$ vi /etc/udev/rules.d/99-win10disk.rules
ENV{ID_PART_TABLE_UUID}=="1234567-89ab-cdef-0123-456789abcde", GROUP="win10disk"
$ ls -l /dev/sdb
brw-rw---- 1 root win10disk 8, 16 Nov 4 23:33 /dev/sdb
$ VBoxManage internalcommands createrawvmdk -filename /path/to/diskname.vmdk -rawdisk /dev/sdb
RAW host disk access VMDK file /path/to/windows10.vmdk created successfully.


How to Enable USB in VirtualBox

安裝 VirtualBox Extension Pack
File/Preferences/Extensions/
$ sudo usermod -a -G vboxusers youruser


$ sudo apt-get update -y
會出現錯誤
$ sudoedit /etc/apt/sources.list
#deb http://download.virtualbox.org/virtualbox/debian bionic contrib
deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian bionic contrib

2019年9月8日 星期日

Ubuntu 設定預設聲音輸出


vidia@nvidia-desktop:~$ pactl list short
sources 0 alsa_output.platform-3510000.hda.hdmi-stereo-extra2.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED 
1 alsa_output.platform-sound.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED 
2 alsa_input.platform-sound.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED

nvidia@nvidia-desktop:~$ sudo vi /etc/pulse/default.pa  
### Make some devices default 
#set-default-sink output 
set-default-sink 0 
#set-default-source input

nvidia@nvidia-desktop:~$ pacmd list-sinks
2 sink(s) available.
  * index: 0
name: <alsa_output.platform-3510000.hda.hdmi-stereo-extra2>
driver: <module-alsa-card.c>
    index: 1
name: <alsa_output.platform-sound.analog-stereo>
driver: <module-alsa-card.c>

nvidia@nvidia-desktop:~$ pacmd set-default-sink 1
nvidia@nvidia-desktop:~$ pacmd set-default-sink 0


2019年9月5日 星期四

vmware in ubuntu

從官網上下載
VMware-Player-15.1.0-13591040.x86_64.bundle
VMware-Workstation-Full-15.1.0-13591040.x86_64.bundle

安裝
chmod a+x VMware-Player-15.1.0-13591040.x86_64.bundle
sudo ./VMware-Player-15.1.0-13591040.x86_64.bundle

啟動
sudo vmware
sudo vmplayer

解除安裝
vmware-installer -u "vmware-workstation"
vmware-installer -u "vmware-player"


2019年8月27日 星期二

nethogs
Monitor Per Process Network Bandwidth Usage in Real Time

iotop
simple top-like I/O monitor

2019年8月24日 星期六

Build OpenCV 3.4 with CUDA

Build OpenCV 3.4 on NVIDIA Jetson AGX Xavier Developer Kit

原先內建的 OpenCV 放在 /usr
心建立的會放在 /usr/local

$ git clone https://github.com/jetsonhacks/buildOpenCVXavier.git
$ cd buildOpenCVXavier
$ git checkout v1.0
$ ./buildOpenCV.sh

sudo ln -s /usr/local/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so envs/OpenAiGym/lib/python3.6/site-packages/



2019年8月21日 星期三

numpy 之 GPU 版本, CuPy, MinPy

目前有 CuPy 和 MinPy
而 MinPy 有 Automatic gradient support,但感覺相容性不佳,要更動很多程式碼



CuPy 安裝和使用
pip install cupy

cupy_array = cupy.array(numpy_array)
numpy_array = cupy.asnumpy(cupy_array)

numpy.argwhere(cond) 要換成
cupy.transpose(cupy.asarray(cupy.nonzero(cond), dtype=np.int), axes=())

numpy.array([array1, array2]) 要換成
cupy.stack([array1, array2])

idx = numpy.max(array) 若只有1個值 要換成
idx = cupy.max(array).item()



MinPy 安裝和使用
查詢 mxnet 和 CUDA 版本的配合
https://mxnet.apache.org/versions/master/install/index.html?platform=Linux&language=Python&processor=GPU

sudo apt-get update
sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev

git clone --recursive -b v1.5.0 https://github.com/dmlc/mxnet
cd mxnet;
cp make/config.mk .
echo "USE_CUDA=1" >>config.mk
echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk
echo "USE_CUDNN=1" >>config.mk
make -j$(nproc)

pip install numpy pyyaml
python ~/mxnet/python/setup.py install

minpy_array = minpy.array(numpy_array)
numpy_array = minpy_array.asnumpy()

numpy.array([array1, array2]) 要換成
minpy.stack(*[array1, array2])

numpy_array.transpose(axes=()) 要換成
minpy.transpose(minpy_array, axes=())

numpy.zeros((0, 1)) 是合法的
minpy.zeros((0, 1)) 是不合法的

numpy_array[numpy.newaxis, :] 要換成
minpy.expand_dims(minpy_array, axis=0)

2019年8月14日 星期三

使用 TensorRT, 載入 frozen_model.pb 太慢

使用 TensorRT 就是要加快 inference 的速度
沒想到載入模型時,速度超慢

上網查到 extremely long model loading time problem
發現主要原因為 protobuf 使用 python
改用 cpp 才能改善速度

文章上使用 protobuf 3.6.1
但是我的 protobuf 使用 3.8.0
所以把相關參數改成 3.8.0
並把 protobuf 安裝在 python 的 virtualenv 上

sudo /usr/local/cuda-10.0/bin/nvprof --log-file=profile_freeze.log /mnt/XavierSSD/envs/OpenAiGym/bin/python inference.py


2019年7月27日 星期六

apt-get

sudo apt-get install chromium-browser-l10n
chromium-browser
chromium-codecs-ffmpeg-extra
unity-scope-chromiumbookmarks
apt list --installed
sudo apt-get remove chromium-browser
apt-cache madison chromium-browser
sudo apt-get install chromium-browser=75.0.3770.90-0ubuntu0.18.04.1


2019年7月25日 星期四

毫米波雷達

基於TI AWR1642的77G毫米波雷達盲區偵測BSD方案

找到好東西,記錄下列重點

FMCW (Frequency Modulated Continuous Wave , 線性調頻信號)
ADAS 先進駕駛輔助系統(Advanced Driver Assistance Systems)
自适应巡航(ACC)
前向碰撞预警(FCW)
自动紧急制动(AEB)
盲点侦测(BSD)
辅助停车(PA)
变道辅助(lane change assist,LCA)
后碰预警(RCW)
一般来讲 chirp 的扫频带宽越大,分辨率越好,但是探测距离会短,反之则分辨率低,探测距离远

AWR1843 是 3T4R
如果是 3 TX and 4 RX,則 MIMO radar system 可以等效為 12 virtual channels 其 Angular resolution 約為 10°
AWR1642 是 2T4R
如果是 2 TX and 4 RX,則 MIMO radar system 可以等效為 8 virtual channels 其 Angular resolution 約為 15°
3T4R 可以在 2T4R 基础上,增加水平角分辨率,或者是增加测俯仰角的能力。

假設一個 frame 具有 128 chirps ( Nchirp = 128 ) 、
ADC 取樣數 為 256 samples ( Nadc = 256 ) 、
ADC sampling rate 為 5 MHz 、
四個 RX 天線 則 radar-cube memory 所需為 512KB
( 256 samples × 128 chirps × 4 antennas × 4 bytes / sample )
以 AWR1642 的 C674x DSP 運作在 600 MHz 的運算能力做計算。
256-pt range-FFT with windowing 需要耗時 ( 1.55 + 0.37 ) = 1.92 μs
因為 ADC 取樣數 為 256 samples ( Nadc = 256 ) 、
ADC sampling rate 為 5 MHz 則 Chirp cycle time Tc 至少為 256 / 5 = 51μs ( 不包含 Idle Time )
所以在 Intraframe processing 處理 1st Dimension FFT Processing 處理時間相當寬裕。
一樣以 AWR1642 的 C674x DSP 運作在 600 MHz 的運算能力做計算。
Doppler-FFT with windowing 需要耗時 ( 1.59 + 0.32 ) = 1.91 μs,
所以在 Interframe processing 處理 Doppler-FFT 需耗時 1.95 ms
( 1.91 μs × 256 range bins × 4 RX antennas )
一個 frame 計算到這裡,至少耗時 15.006 ms ( 256 × 51μs + 1.95ms )
隨後根據系統 Signal Processing Chain 接續的 detection algorithm 繼續計算。

雷达可以探测静止目标,车辆停止时也有功能,此时可以做为 RCTA (后方横向来车告警),用于车辆倒车出库时的盲区提醒。

这里面所说的精度指的是 Range Resolution,
根据 mmw Radar 捕捉目标的基本理论 Range Resolution=C/2B,
其中 C= 光速,B= 雷达带宽。以此计算,AWR1642 最大输出带宽为 4GHz,
得到 Range Resolution ≈ 4cm。
24GHz 雷達分辨率約為 60cm
77GHz 雷達分辨率約為 4cm

雷达性能参数
Max range:最大距离,雷达能探测到的最远距离。
Range resolution:距离分辨率,指分辨两个距离很近的物体的能力。
Range accuracy:距离精度,单个目标的距离测量精度,取决于信噪比,通常距离精度是距离分辨率的一小部分。
Max velocity:最大速度,最大相对速度可以通过两个间隔为 Tc 的 Chirp 测得,更高的 Vmax 需要两个线性调频脉冲之间更短的传输时间。
Velocity resolution:速度分辨率,在速度上分离两个物体的能力,取决于帧的活动持续时间,雷达的速度分辨率与帧时间(Tf)成反比。
Velocity accuracy:速度精度,单个物体速度测量的准确性,取决于信噪比,通常是速度分辨率的一部分。
Max Angular Field of View:最大角视场,两个天线之间的间隔 l = l/2 会导致 ±90°的最大角视场。
Angular resolution:角度分辨率,角度分离两个物体的能力,雷达传感器的角度分辨率通常较低。

Chirp duration 為 8μs 最大可量測相對速度為 92.28 kmph

Maximum unambiguous range 80 m
Range resolution 35 cm ( Normal resolution )

2019年7月12日 星期五

玩 OpenAI Gym Atari 遊戲

參考 Playing the OpenAI Gym Atari Games

sudo apt-get build-dep python-pygame
pip install pygame
pip install matplotlib
sudo apt-get install python3-tk

mkdir -p gym/utils
下載 play.py 到 gym/utils

執行
import gym
from gym.utils.play import play
env = gym.make("MontezumaRevengeNoFrameskip-v4")
play(env, zoom=4)

2019年7月11日 星期四

Nvidia Jetson AGX Xavier 之 Qt 安裝

參考 How to install PyQt4 on Tx2
sudo apt-get install libqt4-dev qt4-dev-tools python-qt4-dev pyqt4-dev-tools
sudo apt-get install python-qt4
sudo apt-get install python3-pyqt4


參考 Install Qt Creator on NVIDIA Jetson TK1
sudo apt-get install build-essential qt5-default qtcreator -y
開啟 Qt Creator
選擇 Tools/Options/Build & Run/Compilers
Add/GCC
Compiler path: /usr/bin/gcc
選擇 Tools/Options/Build & Run/Kits
Manual/Desktop (default)
Compiler: GCC

sudo apt-get install python3-pyqt5
sudo apt-get install pyqt5-dev-tools
sudo apt-get install qttools5-dev-tools
cp -r /usr/lib/python3/dist-packages/PyQt5 ~/XavierSSD/envs/OpenAiGym/lib/python3.6/site-packages/

wget "https://www.riverbankcomputing.com/static/Downloads/sip/sip-4.19.14.tar.gz"
wget 網址已經不存在
改從 https://distfiles.macports.org/py-sip/ 下載
tar -zxf sip-4.19.14.tar.gz
cd sip-4.19.14/
python configure.py
make
make install

2019年7月3日 星期三

python virtualenv

# pip3 install virtualenv 不能使用
apt-get install  python3-venv
mkdir envs
cd envs

virtualenv -p /usr/bin/python3 tensorflow
python3 -m venv --system-site-packages tensorflow

source tensorflow/bin/activate

安裝 指定版本
pip install package_name==2.6.0
列出已安裝的 package
pip list
顯示 package 的資料
pip show package_name
產生一份安裝列表
pip freeze > requirements.txt
cat requirements.txt
依據安裝列表 安裝 package
pip install -r requirements.txt

deactivate

若需要有 root 的權限
$ sudo tensorflow/bin/python your_python.py
若需要傳入特定環境變數
$ sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH tensorflow/bin/python your_python.py


2019年6月30日 星期日

Xavier OpenAI Gym

使用PyTorch,OpenAI Gym和Gazebo機器人模擬器爲NVIDIA Jetson深度強化學習GPU庫
PyTorch Install problem (Solved)
Robot Operating System (ROS) on NVIDIA Jetson AGX Xavier Developer Kit
TX2 - Jetson Reinforcement - cmake -- configuring incomplete
Install Gazebo using Ubuntu packages
NVIDIA Xavier - Deep Learning - Deep Learning Tutorials - Jetson Reinforcement
Ubuntu gazebo package
nvidia@jetson-0423418048807:~$ apt-cache madison gazebo9
   gazebo9 | 9.8.0-1~bionic | http://packages.osrfoundation.org/gazebo/ubuntu-stable bionic/main arm64 Packages
   gazebo9 | 9.0.0+dfsg5-3ubuntu1 | http://ports.ubuntu.com/ubuntu-ports bionic/universe arm64 Packages
    gazebo | 9.0.0+dfsg5-3ubuntu1 | http://ports.ubuntu.com/ubuntu-ports bionic/universe Sources
nvidia@jetson-0423418048807:~$
nvidia@jetson-0423418048807:~$ apt-cache madison libgazebo9-dev
libgazebo9-dev | 9.8.0-1~bionic | http://packages.osrfoundation.org/gazebo/ubuntu-stable bionic/main arm64 Packages
libgazebo9-dev | 9.0.0+dfsg5-3ubuntu1 | http://ports.ubuntu.com/ubuntu-ports bionic/universe arm64 Packages
    gazebo | 9.0.0+dfsg5-3ubuntu1 | http://ports.ubuntu.com/ubuntu-ports bionic/universe Sources
nvidia@jetson-0423418048807:~$
nvidia@jetson-0423418048807:~$ sudo apt-get install gazebo9=9.0.0+dfsg5-3ubuntu1
nvidia@jetson-0423418048807:~$ sudo apt-get install libgazebo9-dev=9.0.0+dfsg5-3ubuntu1
Getting Started with Gym
Errors during install sklearn.
How to install opencv-python for python3.6
Installing everything
GitHub atari_py
python3 setup.py build
python3 setup.py install
pip3 install cffi
sudo apt install libffi-dev

2019年6月25日 星期二

Nvidia Jetson AGX Xavier Build tensorflow 1.13

參考 Building Tensorflow 1.13 on Jetson Xavier

安裝 bazel
nvidia@jetson-0423418048807:~/XavierSSD/Downloads$ wget https://github.com/bazelbuild/bazel/releases/download/0.19.2/bazel-0.19.2-dist.zip
nvidia@jetson-0423418048807:~/XavierSSD/Downloads$ mkdir bazel
nvidia@jetson-0423418048807:~/XavierSSD/Downloads$ cd bazel
nvidia@jetson-0423418048807:~/XavierSSD/Downloads/bazel$ unzip bazel-0.19.2-dist.zip
nvidia@jetson-0423418048807:~/XavierSSD/Downloads/bazel$ env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh
nvidia@jetson-0423418048807:~/XavierSSD/Downloads/bazel$ cd ..
nvidia@jetson-0423418048807:~/XavierSSD/Downloads$ mv bazel ~/XavierSSD
nvidia@jetson-0423418048807:~/XavierSSD/Downloads$ cd ../bazel/
nvidia@jetson-0423418048807:~/XavierSSD/bazel$ vi ~/.bashrc
加入下一行到檔案底部,並且也執行一遍
export PATH=~/XavierSSD/bazel/output${PATH:+:${PATH}}

下載 tensorflow
nvidia@jetson-0423418048807:~/XavierSSD/bazel$ cd ..
nvidia@jetson-0423418048807:~/XavierSSD$ git clone https://github.com/tensorflow/tensorflow.git
nvidia@jetson-0423418048807:~/XavierSSD$ cd tensorflow/

設定 git 環境,取得 r1.13 版
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git config --global user.email "name@yahoo.com.tw"
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git config --global user.name "name"
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git checkout r1.13

為 Nvidia Jetson AGX Xavier 修改
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ vi tensorflow/lite/kernels/internal/BUILD
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git add tensorflow/lite/kernels/internal/BUILD
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git commit -m "Update 1"
[r1.13 982e077b2a] Update 1
 1 file changed, 3 deletions(-)
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git log
commit 982e077b2a4e2123f7a299dbaf95d97383303d17 (HEAD -> r1.13)
Author: name <name@yahoo.com.tw>
Date:   Mon Jun 24 14:49:30 2019 +0800

    Update 1

commit 93dd14dce2e8751bcaab0a0eb363d55eb0cc5813 (origin/r1.13)
Author: Mihai Maruseac <mihaimaruseac@google.com>
Date:   Tue May 21 10:08:18 2019 -0700

    Update png_archive version to 1.6.37

    PiperOrigin-RevId: 249272809

nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git diff 93dd1 982e0
diff --git a/tensorflow/lite/kernels/internal/BUILD b/tensorflow/lite/kernels/internal/BUILD
index 4be3226938..7226f96fdf 100644
--- a/tensorflow/lite/kernels/internal/BUILD
+++ b/tensorflow/lite/kernels/internal/BUILD
@@ -22,15 +22,12 @@ HARD_FP_FLAGS_IF_APPLICABLE = select({
 NEON_FLAGS_IF_APPLICABLE = select({
     ":arm": [
         "-O3",
-        "-mfpu=neon",
     ],
     ":armeabi-v7a": [
         "-O3",
-        "-mfpu=neon",
     ],
     ":armv7a": [
         "-O3",
-        "-mfpu=neon",
     ],
     "//conditions:default": [
         "-O3",
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ vi third_party/aws/BUILD.bazel
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git add third_party/aws/BUILD.bazel
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git commit -m "Update 2"
[r1.13 a3d6ea2fce] Update 2
 1 file changed, 1 insertion(+), 1 deletion(-)
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git log
commit a3d6ea2fce8fff7bcf74ee52cd77074416d24bf2 (HEAD -> r1.13)
Author: mark <ingrenn@yahoo.com.tw>
Date:   Mon Jun 24 14:56:09 2019 +0800

    Update 2

commit 982e077b2a4e2123f7a299dbaf95d97383303d17
Author: mark <ingrenn@yahoo.com.tw>
Date:   Mon Jun 24 14:49:30 2019 +0800

    Update 1

nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git diff 982e0 a3d6ea
diff --git a/third_party/aws/BUILD.bazel b/third_party/aws/BUILD.bazel
index 5426f79e46..e08f8fc108 100644
--- a/third_party/aws/BUILD.bazel
+++ b/third_party/aws/BUILD.bazel
@@ -24,7 +24,7 @@ cc_library(
         "@org_tensorflow//tensorflow:raspberry_pi_armeabi": glob([
             "aws-cpp-sdk-core/source/platform/linux-shared/*.cpp",
         ]),
-        "//conditions:default": [],
+        "//conditions:default": glob(["aws-cpp-sdk-core/source/platform/linux-shared/*.cpp",]),
     }) + glob([
         "aws-cpp-sdk-core/include/**/*.h",
         "aws-cpp-sdk-core/source/*.cpp",
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ vi third_party/gpus/crosstool/BUILD.tpl
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git add third_party/gpus/cro
sstool/BUILD.tpl
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git commit -m "Update 3"
[r1.13 65ad3b64e5] Update 3
 1 file changed, 1 insertion(+)
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git log
commit 65ad3b64e5f16b3496628bee800fabf825a7c1ce (HEAD -> r1.13)
Author: mark <ingrenn@yahoo.com.tw>
Date:   Mon Jun 24 15:04:22 2019 +0800

    Update 3

commit a3d6ea2fce8fff7bcf74ee52cd77074416d24bf2
Author: mark <ingrenn@yahoo.com.tw>
Date:   Mon Jun 24 14:56:09 2019 +0800

    Update 2

commit 982e077b2a4e2123f7a299dbaf95d97383303d17
Author: mark <ingrenn@yahoo.com.tw>
Date:   Mon Jun 24 14:49:30 2019 +0800

    Update 1

commit 93dd14dce2e8751bcaab0a0eb363d55eb0cc5813 (origin/r1.13)
Author: Mihai Maruseac <mihaimaruseac@google.com>
Date:   Tue May 21 10:08:18 2019 -0700

    Update png_archive version to 1.6.37
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ git diff a3d6ea 65ad3
diff --git a/third_party/gpus/crosstool/BUILD.tpl b/third_party/gpus/crosstool/BUILD.tpl
index db76306ffb..184cd35b87 100644
--- a/third_party/gpus/crosstool/BUILD.tpl
+++ b/third_party/gpus/crosstool/BUILD.tpl
@@ -24,6 +24,7 @@ cc_toolchain_suite(
         "x64_windows|msvc-cl": ":cc-compiler-windows",
         "x64_windows": ":cc-compiler-windows",
         "arm": ":cc-compiler-local",
+        "aarch64": ":cc-compiler-local",
         "k8": ":cc-compiler-local",
         "piii": ":cc-compiler-local",
         "ppc": ":cc-compiler-local",
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
修改完成

安裝所需版本的 g++ 和 gcc
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ sudo apt-get install g++-5
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ sudo apt-get install gcc-5

設定編譯環境
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ ./configure
Extracting Bazel installation...
WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown".
You have bazel 0.19.2- (@non-git) installed.
Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python3


Found possible Python library paths:
  /usr/lib/python3.6/dist-packages
  /usr/lib/python3/dist-packages
  /usr/local/lib/python3.6/dist-packages
Please input the desired Python library path to use.  Default is [/usr/lib/python3.6/dist-packages]

Do you wish to build TensorFlow with XLA JIT support? [Y/n]: n
No XLA JIT support will be enabled for TensorFlow.

Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
No OpenCL SYCL support will be enabled for TensorFlow.

Do you wish to build TensorFlow with ROCm support? [y/N]: n
No ROCm support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]: y
CUDA support will be enabled for TensorFlow.

Please specify the CUDA SDK version you want to use. [Leave empty to default to CUDA 10.0]:


Please specify the location where CUDA 10.0 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: /usr/local/cuda-10.0


Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7]: 7.3


Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda-10.0]: /usr/lib/aarch64-linux-gnu


Do you wish to build TensorFlow with TensorRT support? [y/N]: y
TensorRT support will be enabled for TensorFlow.

Please specify the location where TensorRT is installed. [Default is /usr/lib/aarch64-linux-gnu]:


Please specify the locally installed NCCL version you want to use. [Default is to use https://github.com/nvidia/nccl]:


Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 3.5,7.0]: 7.2


Do you want to use clang as CUDA compiler? [y/N]: n
nvcc will be used as CUDA compiler.

Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: /usr/bin/gcc-5


Do you wish to build TensorFlow with MPI support? [y/N]: n
No MPI support will be enabled for TensorFlow.

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:


Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.

Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
        --config=mkl            # Build with MKL support.
        --config=monolithic     # Config for mostly static monolithic build.
        --config=gdr            # Build with GDR support.
        --config=verbs          # Build with libverbs support.
        --config=ngraph         # Build with Intel nGraph support.
        --config=dynamic_kernels        # (Experimental) Build kernels into separate shared objects.
Preconfigured Bazel build configs to DISABLE default on features:
        --config=noaws          # Disable AWS S3 filesystem support.
        --config=nogcp          # Disable GCP support.
        --config=nohdfs         # Disable HDFS support.
        --config=noignite       # Disable Apacha Ignite support.
        --config=nokafka        # Disable Apache Kafka support.
        --config=nonccl         # Disable NVIDIA NCCL support.
Configuration finished
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$

建立 tensorflow 安裝資料
此處會執行很久,甚至會報錯,如找不到 numpy 等
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ bazel build --config=opt --config=nonccl //tensorflow/tools/pip_package:build_pip_package --incompatible_remove_native_http_archive=false --verbose_failures --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"
產生 tensorflow-1.13.1-cp36-cp36m-linux_aarch64.whl
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ sudo bazel-bin/tensorflow/tools/pip_package/build_pip_package ../


移除舊的 tensorflow,並安裝新的
nvidia@jetson-0423418048807:~$ source XavierSSD/envs/tensorflow/bin/activate
(tensorflow) nvidia@jetson-0423418048807:~$ cd XavierSSD/tensorflow/
((tensorflow) nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ pip3 uninstall tensorflow-gpu
(tensorflow) nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ pip3 install ../tensorflow-1.13.1-cp36-cp36m-linux_aarch64.whl
(tensorflow) nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ deactivate
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$

建立 tensorflow c++ 的 shared library libtensorflow_cc.so
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ bazel build --config=opt --config=nonccl //tensorflow:libtensorflow_cc.so --incompatible_remove_native_http_archive=false --verbose_failures --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ ls -al bazel-bin/tensorflow/
libtensorflow_cc.so
-r-xr-xr-x 1 nvidia nvidia 303026864 Jun 25 12:22 bazel-bin/tensorflow/libtensorflow_cc.so
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$

nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ mkdir tensorflow/cc/example
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ vi tensorflow/cc/example/example.cc

// tensorflow/cc/example/example.cc

#include "tensorflow/cc/client/client_session.h"
#include "tensorflow/cc/ops/standard_ops.h"
#include "tensorflow/core/framework/tensor.h"

int main() {
  using namespace tensorflow;
  using namespace tensorflow::ops;
  Scope root = Scope::NewRootScope();
  // Matrix A = [3 2; -1 0]
  auto A = Const(root, { {3.f, 2.f}, {-1.f, 0.f} });
  // Vector b = [3 5]
  auto b = Const(root, { {3.f, 5.f} });
  // v = Ab^T
  auto v = MatMul(root.WithOpName("v"), A, b, MatMul::TransposeB(true));
  std::vector<Tensor> outputs;
  ClientSession session(root);
  // Run and fetch v
  TF_CHECK_OK(session.Run({v}, &outputs));
  // Expect outputs[0] == [19; -3]
  LOG(INFO) << outputs[0].matrix<float>();
  return 0;
}
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ vi tensorflow/cc/example/BUILD

load("//tensorflow:tensorflow.bzl", "tf_cc_binary")

tf_cc_binary(
    name = "example",
    srcs = ["example.cc"],
    deps = [
        "//tensorflow/cc:cc_ops",
        "//tensorflow/cc:client_session",
        "//tensorflow/core:tensorflow",
    ],
)
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$

編譯範例 example.cc
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ bazel build -c opt //tensorflow/cc/example:example
跑了好久,測試執行
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$ bazel-bin/tensorflow/cc/exam
ple/example
2019-06-25 16:10:03.922559: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:965] ARM64 does not support NUMA - returning NUMA node zero
2019-06-25 16:10:03.922959: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties:
name: Xavier major: 7 minor: 2 memoryClockRate(GHz): 1.5
pciBusID: 0000:00:00.0
totalMemory: 15.45GiB freeMemory: 8.57GiB
2019-06-25 16:10:03.923054: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
2019-06-25 16:10:03.924346: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-06-25 16:10:03.924409: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990]      0
2019-06-25 16:10:03.924452: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0:   N
2019-06-25 16:10:03.925152: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 8340 MB memory) -> physical GPU (device: 0, name: Xavier, pci bus id: 0000:00:00.0, compute capability: 7.2)
2019-06-25 16:10:07.582973: I tensorflow/cc/example/example.cc:22] 19
-3
nvidia@jetson-0423418048807:~/XavierSSD/tensorflow$


nvidia@jetson-0423418048807:~/XavierSSD$ git clone https://github.com/bitbionic/
keras-to-tensorflow.git
Cloning into 'keras-to-tensorflow'...
remote: Enumerating objects: 3719, done.
remote: Total 3719 (delta 0), reused 0 (delta 0), pack-reused 3719
Receiving objects: 100% (3719/3719), 227.81 MiB | 786.00 KiB/s, done.
Resolving deltas: 100% (7/7), done.
Checking out files: 100% (3688/3688), done.
nvidia@jetson-0423418048807:~/XavierSSD$
nvidia@jetson-0423418048807:~/XavierSSD$ cd keras-to-tensorflow
nvidia@jetson-0423418048807:~/XavierSSD/keras-to-tensorflow$ vi main.c
因為編譯時會有兩種錯誤
data.ToString(); 改成 std::string(data);
tensorflow::StringPiece(file_name).ends_with(".png")
改成
tensorflow::str_util::EndsWith(file_name, ".png")

nvidia@jetson-0423418048807:~/XavierSSD/keras-to-tensorflow$
nvidia@jetson-0423418048807:~/XavierSSD/keras-to-tensorflow$ g++-5 -std=gnu++11 -c ./main.cpp -D_GLIBCXX_USE_CXX11_ABI=0     -I../tensorflow     -I../tensorflow/bazel-tensorflow/external/eigen_archive     -I../tensorflow/bazel-tensorflow/external/protobuf_archive/src     -I../tensorflow/bazel-tensorflow/external/com_google_absl     -I../tensorflow/bazel-genfiles




2019年6月24日 星期一

Ubuntu 鍵盤 滑鼠大小設定

因為買了 Mircosoft 的小鍵盤,在鍵盤上找不到 Home End 和 PtrSc 鍵

修改功能鍵
System Settings/Keyboard/Shortcuts

還原方法
執行 dconf Editor
/org/gnome/settings-deamon/plugins/media-keys
點選修改過的功能
按下 Use default value

但是最後發現
Home = Ctrl + ← 或  Fn + ←
End = Ctrl + → 或 Fn + →
Print Screen (full screen): Fn + Windows Key + Space
Print Screen (current window) :Fn + Alt + Space


設定滑鼠大小
$ gsettings get org.gnome.desktop.interface cursor-size
24
$ gsettings set org.gnome.desktop.interface cursor-size 48
重新開機

nvidia@jetson-0423418048807:~$ cat cursor.sh
(sleep 10; gsettings set org.gnome.desktop.interface cursor-size 48)&
nvidia@jetson-0423418048807:~$

開始/Startup Applications/Add
cursor.sh








2019年6月22日 星期六

Nvidia Jetson AGX Xavier 安裝 tensorflow

安裝虛擬環境
nvidia@jetson-0423418048807:~/XavierSSD$ sudo apt-get install python3-pip
nvidia@jetson-0423418048807:~/XavierSSD$ sudo apt-get install build-essential libssl-dev libffi-dev python-dev
nvidia@jetson-0423418048807:~/XavierSSD$ sudo apt-get install python3-venv
nvidia@jetson-0423418048807:~/XavierSSD$ mkdir envs
nvidia@jetson-0423418048807:~/XavierSSD$ cd envs
nvidia@jetson-0423418048807:~/XavierSSD/envs$ python3 -m venv tensorflow
nvidia@jetson-0423418048807:~/XavierSSD/envs$ cd
啟動虛擬環境
nvidia@jetson-0423418048807:~$ source ~/XavierSSD/envs/tensorflow/bin/activate
(tensorflow) nvidia@jetson-0423418048807:~$ 

設定 OpenCV
(tensorflow) nvidia@jetson-0423418048807:~$ sudo find / -name "cv2*"
find: ‘/run/user/1001/gvfs’: Permission denied
/usr/lib/python2.7/dist-packages/cv2.so
/usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so
(tensorflow) nvidia@jetson-0423418048807:~$ cd XavierSSD/envs/tensorflow/lib/python3.6/site-packages/
(tensorflow) nvidia@jetson-0423418048807:~/XavierSSD/envs/tensorflow/lib/python3.6/site-packages$ ln -s /usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so

測試 OpenCV
(tensorflow) nvidia@jetson-0423418048807:~$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
3.3.1
>>> exit()

大部份的安裝說明文件,第一步都是要你先安裝 JetPack 或 NVIDIA SDK Manager
其實都已經安裝完,參考 Nvidia Jetson AGX Xavier 安裝

$ sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev
$ pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker six mock requests gast h5py astor termcolor protobuf keras-applications keras-preprocessing wrapt google-pasta

直接下載安裝
(tensorflow) nvidia@jetson-0423418048807:~$ pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu --ignore-installed

若是因為網路下載失敗
用網頁開啟 https://developer.download.nvidia.com/compute/redist/jp/v42/tensorflow-gpu/
下載 https://developer.download.nvidia.com/compute/redist/jp/v42/tensorflow-gpu/

(tensorflow) nvidia@jetson-0423418048807:~/XavierSSD/Downloads$ pip3 install tensorflow_gpu-1.13.1+nv19.5-cp36-cp36m-linux_aarch64.whl 

測試 tensorflow
(tensorflow) nvidia@jetson-0423418048807:~/XavierSSD/Downloads$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello Tensorflow')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello Tensorflow'
>>> exit()
(tensorflow) nvidia@jetson-0423418048807:~/XavierSSD/Downloads$ 


Nvidia Jetson AGX Xavier 之 darknet 安裝

nvidia@jetson-0423418048807:~/XavierSSD$ export PATH=${PATH}:/usr/local/cuda/bin
nvidia@jetson-0423418048807:~/XavierSSD$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
nvidia@jetson-0423418048807:~/XavierSSD$ git clone https://github.com/pjreddie/darknet
nvidia@jetson-0423418048807:~/XavierSSD$ cd darknet/
nvidia@jetson-0423418048807:~/XavierSSD/darknet$ vi Makefile 修改下列三行
GPU=1
CUDNN=1
OPENCV=1

nvidia@jetson-0423418048807:~/XavierSSD$ make


Nvidia Jetson AGX Xavier 測試

測試 CUDA
nvidia@jetson-0423418048807:~$ cd NVIDIA_CUDA-10.0_Samples/
nvidia@jetson-0423418048807:~/NVIDIA_CUDA-10.0_Samples$ cd bin/aarch64/linux/release/

nvidia@jetson-0423418048807:~/NVIDIA_CUDA-10.0_Samples/bin/aarch64/linux/release$ ./oceanFFT

nvidia@jetson-0423418048807:~/NVIDIA_CUDA-10.0_Samples/bin/aarch64/linux/release$ ./nbody -fullscreen -numbodies=16384


測試 tegra
nvidia@jetson-0423418048807:~$ cd tegra_multimedia_api/samples/backend/
nvidia@jetson-0423418048807:~/tegra_multimedia_api/samples/backend$
nvidia@jetson-0423418048807:~/tegra_multimedia_api/samples/backend$ ./backend 1 ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 --trt-deployfile ../../data/Model/GoogleNet_one_class/GoogleNet_modified_oneClass_halfHD.prototxt --trt-modelfile ../../data/Model/GoogleNet_one_class/GoogleNet_modified_oneClass_halfHD.caffemodel --trt-mode 1 --trt-proc-interval 1 -fps 10
這裡會等很久

安裝 VisionWorks-1.6-Samples
nvidia@jetson-0423418048807:~$ /usr/share/visionworks/sources/install-samples.sh ~/
Creating the /home/nvidia//VisionWorks-1.6-Samples directory...
Copying VisionWorks samples to /home/nvidia//VisionWorks-1.6-Samples...
Finished copying VisionWorks samples
nvidia@jetson-0423418048807:~$ cd VisionWorks-1.6-Samples/
nvidia@jetson-0423418048807:~/VisionWorks-1.6-Samples$ make -j8

測試 VisionWorks-1.6-Samples
nvidia@jetson-0423418048807:~/VisionWorks-1.6-Samples/bin/aarch64/linux/release$ ls
nvx_demo_feature_tracker        nvx_sample_nvgstcamera_capture
nvx_demo_feature_tracker_nvxcu  nvx_sample_object_tracker_nvxcu
nvx_demo_hough_transform        nvx_sample_opencv_npp_interop
nvx_demo_motion_estimation      nvx_sample_opengl_interop
nvx_demo_stereo_matching        nvx_sample_player
nvx_demo_video_stabilizer


2019年6月21日 星期五

Nvidia Jetson AGX Xavier 運作模式,溫度,風扇

參考 NVPModel – NVIDIA Jetson AGX Xavier Developer Kit

sudo nvpmodel -q
查詢目前模式

sudo nvpmodel -m 0
設定成全力運行模式

0: 全力運行
1: 10W
2: 15W
3: 30W

sudo ./jetson_clocks.sh -show
顯示目前運作狀態

sudo ./jetson_clocks.sh
全力運作


0: 全力運作
1: 10W
2: 15W 預設值
3: 30W

sudo apt-get install lm-sensors
sudo sensors-detect 千萬不能執行,會當機
sensors 察看目前溫度

圖形介面的 sensor
sudo apt-get install psensor
psensor

專門為 NVIDIA jetson 準備的工具
Basic scripts and function to improve the performance in your NVIDIA Jetson
sudo apt-get install python3-pip
sudo -H pip3 install jetson-stats
jtop 即是 top for jetson
執行時使用 sudo jtop
其中第一個頁籤 1 ALL,中的 Sensor PMIC 一直是 100.00C,不知為何?
第三頁籤 3 CTRL,用 "+"、"-" 控制 NVP model

jetson-release 查詢 NVIDIA jetson 資訊

開機啟動風扇
sudo vi /etc/rc.local
#!/bin/bash
sleep 10
sudo sh -c 'echo 100 > /sys/devices/pwm-fan/target_pwm'

sudo chmod u+x /etc/rc.local



Nvidia Jetson AGX Xavier 之 WOL

poweroff 無法喚醒
sudo systemctl suspend
才可以喚醒,據說功耗 1.5-2W


sudo apt-get install ethtool

vi wol.sh
sudo ethtool -s wth0 wol g
sudo systemctl suspend


sudo ethtool eth0 (顯示 eth0 的設定)
Supports Wake-on: g (支援 wol)
Wake-on: d (wol 未啟動)
Wake-on: g (wol 啟動)

Nvidia Jetson AGX Xavier 安裝中文輸入法

參考 Ubuntu 類似微軟注音的輸入法 - hime 詞音輸入法

Ctrl+Space 啟動中文輸入
Shift 中英文切換
Ctrl+Alt+4 符號表

nvidia@jetson-0423418048807:~$ sudo apt-get install ibus-chewing

重新開機

System Settings/Language Support
Install / Remove Languages...
Add Chinese (traditional)
Keyboard input method system: ibus

在 Ubuntu 18.04 中新增新酷音輸入法

How can I use chewing(zhuyin) input method?
ubuntu 英文版中安裝新酷音輸入法
讓 Linux 下的中文輸入法更接近微軟新注音使用體驗
Ubuntu: fcitx + chewing 新酷音輸入法

Nvidia Jetson AGX Xavier 安裝 SSD

參考 Install NVMe SSD on NVIDIA Jetson AGX Developer Kit
硬體安裝完成後,開機制桌面,執行 Disks
右上角選項按鈕,Format Disk, 使用 GPT
按 + Create Partition
輸入 Volume Name
選擇 Ext4
按設定按鈕,選擇 Edit Mount Options
User Session Defaults 選擇 OFF
輸入 Mount Point


參考 Creating a Swap file
free 命令可以查詢 swap 狀況
sudo apt-get install gparted
sudo vi /etc/fstab
加入一行
/dev/nvme0n1p2 none swap sw 0 0
sudo swapon -a


Nvidia Jetson AGX Xavier 設定 VNC

有兩種 VNC 設定成功,x11vnc 和 vino
但是都必須先用 ssh 連上 xavier,啟動 service

此處談及的 VNC,不是 x-win 登入,是直接使用 console 的桌面

至於開機自己啟動的方式,一直沒有成功

x11vnc 設定方式,參考
VNC 連線小記 - Windows & Ubuntu Linux by x11vnc and tigervnc
sudo apt-get install x11vnc -y
sudo x11vnc -storepasswd
密碼存放於 ~/.vnc/passwd
sudo chmod 644 ~/.vnc/passwd
vi x11vnc.sh
DISPLAY=:0 x11vnc -rfbport 5900 -rfbauth /home/nvidia/.vnc/passwd

vino 設定方式,參考
Nvidia AGX Xavier/Jetson Nano遠端登入remote by VNC
sudo apt-get install dconf-editor
執行 dconf-editor,開啟設定畫面
至 /org/gnome/desktop/remote-access/vnc-passwd
notify-on-connect ON
prompt-enabled OFF
require-encryption OFF

sudo vi /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
在最後的 </schema> 之前補上


    <key name="enabled" type="b">
      <summary>Enable remote access to the desktop</summary>
      <description>
        If true, allows remote access to the desktop via the RFB
        protocol. Users on remote machines may then connect to the
        desktop using a VNC viewer.
      </description>
      <default>false</default>
    </key>
    
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
vi vino.sh
DISPLAY=:0 /usr/lib/vino/vino-server

Nvidia Jetson AGX Xavier 安裝


xavier 安裝,需要準備一台 ubuntu 18.04 的機器
當然不可能有這麼多的資源,使用虛擬機器
使用 64-bit 的虛擬機器,需要進入實體機器的 BIOS
開啟CPU設定中的,虛擬化技術
intel virtualization technology (vt-x) 或 AMD Virtualization(amd-v)
VisualBox 要安裝 Extension Pack 才能使用 USB2.0, 3.0
因為找不到最新版的 Extension Pack, 所以安裝了 5.1 版的 VisualBox
但在安裝的過程中也出了問題
,決定改用 VMware player 15.1.0
參照 VMware Workstation Player Install and Network Configuration
使用 Bridged 網路(其實 NAT 也可以成功,只是要指定 IP)
硬碟空間不能太小,以免卡關(建議40G)

到 Jetson Download Center 下載 JetPack 4.1.1
mark@Ubuntu64:~/Downloads$ chmod +x JetPack-L4T-4.1.1-linux-x64_b57.run 
mark@Ubuntu64:~/Downloads$ ./JetPack-L4T-4.1.1-linux-x64_b57.run 


請注意,要將 Compile CUDA Samples 設為 install
否則會找不到 ~/NVIDIA_CUDA-10.0_Samples
將 xavier 電源指示燈旁的 USB 連接至虛擬機器
不要看下一張圖的說明,它描述了如何啟動 xavier 進入工程模式
但它是錯的,正確的是
關機後同時按壓電源鍵(Power)與工程模式鍵(Recovery)兩秒後放開進入工程模式

偵測到USB連線,選擇虛擬機器
此時若是使用 Bridged 網路,它會自動往下跑
若是使用 NAT 網路,它會找不到 xavier
需要輸入 IP
到了下圖的畫面,直接關掉 terminal,完成
xavier 預設帳號密碼:nvidia/nvidia

2019年5月30日 星期四

Nvidia Jetson AGX Xavier 風扇設定

At L4t BSP R32.1, it's moved to other path
/sys/kernel/debug/tegra_fan/target_pwm changed to /sys/devices/pwm-fan/target-pwm


關閉風扇
echo 0 | sudo tee /sys/kernel/debug/tegra_fan/target_pwm

風扇全速轉動
echo 255 | sudo tee /sys/kernel/debug/tegra_fan/target_pwm
取得目前速度
cat /sys/kernel/debug/tegra_fan/cur_pwm

2019年1月23日 星期三

tsseract 訓練 在 Unbuntu 上

https://github.com/tesseract-ocr/tesseract/wiki/Compiling
https://github.com/tesseract-ocr/tesseract/wiki/Compiling-%E2%80%93-GitInstallation

sudo apt-get install g++
sudo apt-get install autoconf automake libtool
sudo apt-get install pkg-config
sudo apt-get install libpng-dev
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install zlib1g-dev

sudo apt-get install libicu-dev
sudo apt-get install libpango1.0-dev
sudo apt-get install libcairo2-dev

sudo apt-get install libleptonica-dev

sudo apt install git

git clone https://github.com/tesseract-ocr/tesseract.git tesseract-ocr
git clone https://github.com/tesseract-ocr/langdata.git langdata
git clone https://github.com/tesseract-ocr/tessdata_best.git tessdata_best
git clone https://github.com/tesseract-ocr/tessdata_fast.git tessdata_fast
cd tesseract-ocr
./autogen.sh
./configure
make
sudo make install
sudo ldconfig
make training
sudo make training-install

https://github.com/tesseract-ocr/tesseract/wiki/Data-Files

sudo apt install curl
sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless
sudo apt install default-jdk
sudo apt install openjdk-11-jdk-headless
sudo apt install openjdk-8-jdk-headless

cd java
make ScrollView.jar

https://github.com/tesseract-ocr/tesseract/wiki/ViewerDebugging

text2image --find_fonts \
--fonts_dir /usr/share/fonts \
--text ./langdata/plate/plate.
--min_coverage .9  \
--outputbase ./langdata/plate/plate \
|& grep raw \
 | sed -e 's/ :.*/@ \\/g' \
 | sed -e "s/^/  '/" \
 | sed -e "s/@/'/g" >./langdata/plate/fontslist.txt

text2image --font="aakar Medium" \
--fonts_dir /usr/share/fonts \
--text ./langdata/plate/plate.txt \
--min_coverage .9  \
--outputbase ./langdata/plate/plate.aakar_Medium.exp0

text2image --font="Abyssinica SIL" \
--fonts_dir /usr/share/fonts \
--text ./langdata/plate/plate.txt \
--min_coverage .9  \
--outputbase ./langdata/plate/plate.Abyssinica_SIL.exp0

mkdir training
cd training
mkdir -p langdata/eng
準備 langdata/eng/eng.traning_text
拷貝 langdata/radical-stroke.txt
mkdir -p tessdata/configs
拷貝 tessdata/eng.traineddata
拷貝 tessdata/configs/lstm.train

~/ocr/tesseract-ocr/src/training/tesstrain.sh --fonts_dir /usr/share/fonts \
 --lang eng --linedata_only \
 --noextract_font_properties --langdata_dir langdata \
 --tessdata_dir tessdata \
 --output_dir train

若字型不存在 (Could not find font named 'xxx xxx')
編輯 src/training/language-specific.sh 刪除不存在的字型

tif 檔產生到一半停住了, 原因是利用背景處理加速
let rem=counter%par_factor 為零時出錯
修改 src/training/tesstrain_utils.sh, 不要使用背景處理
有以下兩段, 刪除命令後面的 &
phase_I_generate_image()
  generate_font_image "${font}"
phase_E_extract_features()
  run_command tesseract ${img_file} ${img_file%.*} ${box_config} ${config} &
並刪除相關的 let, if, wait

combine_tessdata -e ../tessdata_best/eng.traineddata train/eng.lstm

lstmtraining --model_output model \
 --continue_from train/eng.lstm \
 --traineddata train/eng/eng.traineddata \
 --old_traineddata ../tessdata_best/eng.traineddata \
 --train_listfile train/eng.training_files.txt \
 --max_iterations 3600

lstmtraining --stop_training \
 --continue_from model_checkpoint \
 --traineddata train/eng/eng.traineddata \
 --old_traineddata ../tessdata_best/eng.traineddata \
 --model_output new.traineddata

若要直接使用 tif 和 box
修改 src/training/tesstrain_utils.sh, 固定 tif, box 檔案的目錄
    #TRAINING_DIR=${TMP_DIR}
    TRAINING_DIR=/tmp/images
修改 src/training/tesstrain.sh, 不要自動產生圖形
#phase_I_generate_image 8

2019年1月10日 星期四

Tesseract 訓練, 使用 jTessBoxEditor

這是舊版的訓練方式,Tesseract 4.0 開始了新的 LSTM(AI) 的方式

D:\>java -jar jTessBoxEditor.jar
TIFF/Box Generator
text2image 不要勾
Input 選擇 .txt 文字檔
Output 按 ... 設定輸出位置
英文輸入 eng, 中文輸入 chi_tra
選擇字型
按 Generate 產生 .box 和 .font_properties

tif文面命名格式[lang].[fontname].exp[num].tif
lang:plt
fontname:normal
num:0

手動由 .tif -> .box
D:\>ttesseract.exe plt.normal.exp0.tif plt.normal.exp0 --psm 7 -l eng batch.nochop makebox

手動生成 .font_properties, 內容為 <fontname> <italic> <bold> <fixed> <serif> <fraktur>
echo normal 0 1 1 0 1 >plt.font_properties

由 .box 文件 -> .tr
D:\>tesseract.exe plt.normal.exp0.tif plt.normal.exp0 box.train.stderr
由 .box 文件 -> unicharset
D:\>unicharset_extractor.exe plt.normal.exp0.box
由 font_properties, unicharset, .tr -> shapetable
D:\>shapeclustering.exe -F plt.font_properties -U unicharset plt.normal.exp0.tr
由 font_properties, unicharset, .tr ->lang.unicharset, inttemp, pffmtable
D:\>mftraining.exe -F plt.font_properties -U unicharset -O plt.unicharset plt.normal.exp0.tr
由.tr 文件 -> normproto
D:\>cntraining.exe plt.normal.exp0.tr
重命名 以 lang. 開頭重命名 inttemp, normproto, pffmtable, shapetable
D:\>move inttemp plt.inttemp
D:\>move normproto plt.normproto
D:\>move pffmtable plt.pffmtable
D:\>move shapetable plt.shapetable
合併生成 lang.traineddata文件,在這裏爲 plt.traineddata
D:\>combine_tessdata.exe plt.