2018年6月26日 星期二

[圖文] Jetson3.3 TX2 環境 配置 安裝 含 OpenCV3.4 編譯 升級方法

[圖文] Jetson3.2 TX2 環境 配置 安裝 含 OpenCV3.4 編譯 升級方法

TX2從零開始完整的圖文教學~
前置條件安裝 ubuntu 16.04 可以參考這篇站內文:
https://charlottehong.blogspot.com/2018/06/ubuntu1604-efi.html
安裝過 TX2 的 Ubuntu 會被安裝一堆軟件還有開啟 arm 的鏡像站會造成 upgrad 的時候跳錯,雖然不影響只是看了很礙眼XD,建議是額外安裝一個新的系統不要用自己正在用的。

下載 jetpakc3.2

jetpakc3.2:https://developer.nvidia.com/embedded/jetpack
需要加入會員才可以下載,有點麻煩就註冊一下吧
下載完之後直接執行他
# 版本號會變我用*號替代,沒同名衝突也是可以執行的
chmod +x JetPack*.run
./JetPack*.run
然後就有圖形化介面可以安裝了

開始安裝

一開始會先跳一個框框,按下ok即可
下一步
打勾 yes 同意
選擇你的版子Tx2
預設就是 full 安裝全部,直接next即可
需要同意這些事項
漫長的下載與安裝等待
這邊下載很吃網路(可能是跑BT),路由器硬件能力較差可能會倒置網路癱瘓(我用RT-N10+ 整個卡死不能開網頁),網路不夠快可能會倒置整個網路環境爆ping。
中間會跳一個視窗要你按
然後繼續跑
完成之後下一步
這邊會要你選擇模式,建議就照著圖一的方式接,也就是把TX2跟當前的電腦接到同一個WIFI機上面,真的沒有WIFI機可以接在考慮圖二的方式
選擇網卡,只有一張就直接下一步吧
繼續下一步
還有跳一黑窗要你做一些事
如以下步驟:
  1. 切斷TX2電源
  2. 接上 USB 與電腦連接
  3. 打開TX2電源
  4. 按一下POWER按鈕
  5. 同時按住 RET與REC按鈕
然後自己打開一個新的終端機輸入 lsusb 看看有沒有 NVIDIA Corp. 有就可以繼續了
然後回到黑窗按一下 Enter 繼續漫長的等待
過程會跳一個資料夾出來只是說明文件可以閱讀一下,也可以直接關閉
再來還需要一段時間安裝還沒裝好,從跳出上圖開始,右上角會顯示網路中斷警告,但還可以繼續用網路。等到安裝完畢移除TX2與電腦的USB連接網路中斷警告就會恢復了。
中間會出現一次要求你按enter的視窗,按了之後還要跑一段時間然後還有第二次,第二次比較特別要實際到 nvidia tx2 上面操作
第二次的時候直接 ctrl+c 也可以完成安裝,會少裝一些套件
這邊大致上就是說給你 ip 你連過去照著上面的指令打
# 這邊 ip 自己看不一定是這個,指令也照上面的為主,版本更動可能有變

ssh nvidia@192.168.50.3sudo dpkg -i ~/TensorRT/libnvinfer4_4.1.3-1+cuda9.0_arm64.deb; sudo dpkg -i ~/TensorRT/libnvinfer-dev*; sudo dpkg -i ~/TensorRT/libnvinfer-samples*; sudo dpkg -i ~/TensorRT/tensorrt* ;sudo dpkg -i ~/TensorRT/libgie-dev*

sudo apt-get -f install
然後回到黑窗按2次 enter 然後就會繼續執行了。
接下來還有一次,做完一樣回到黑窗按兩下 enter (要等真沒反應多按一下)
sudo apt-get install libvisionworks libvisionworks-dev libvisionworks-samples

sudo apt-get -f install
安裝完畢,黑窗會顯示關閉即可~關閉就安裝好了
再來TX2就已經開機了,可以直接接上HDMI線與螢幕看到作業系統
NVIDIA TX2 預設密碼是 nvidia
然後就可以開心的使用瞜,一切套件都裝好了 CUDA 9 與 OpenCV331 等等套件都包好了。


OpenCV 3.4 可執行 CUDA 版本

上面配置好之後預設的 opencv 好像沒有包含 GPU 版本,是 apt-get 的函式庫,如果需要運行 CUDA 需要自行重新編譯安裝。
# 移除原裝331版本
sudo apt-get purge libopencv *

# 先升級作業系統避免不必要的問題
sudo apt-get update
sudo apt-get dist-upgrade

# 下載套件
sudo apt-get install git
git clone https://github.com/jetsonhacks/buildOpenCVTX2

# 開始編譯
cd buildOpenCVTX2
./buildOpenCV.sh
然後會需要一段時間,還蠻久的等他自己跑完就可以了,跑完之後要補一條指令
# 更新路徑
sudo ldconfig
驗證一下有沒有安裝成功
# 察看OpenCV版本
pkg-config -- modversion

# 察看路徑與函式庫
pkg-config opencv --libs --cflags
然後就可以正常使用 OpenCV 的 CUDA 版本的函式庫了

ubuntu16.04 以 EFI 安裝系統詳細圖文說明

ubuntu16.04 以 EFI 安裝系統詳細圖文說明

網路上還有不少流傳著EFI無法安裝不能開啟之類的文章,其實很早之前就已經支援了,只是方法多一個小步驟漏了就很容易安裝失敗,才會導致這些文章的出現。

下載

官方載點:https://www.ubuntu-tw.org/modules/tinyd0/
選擇你要的版本~下載然後安裝到隨身碟
安裝到隨身碟可以參考這個軟體
rufus:https://rufus.akeo.ie/
打開之後把 ISO 拖曳拉進去,然後什麼都不用設置預設即可,直接按下執行
執行之後會刪除所有資料,記得要先備份

以EFI開啟隨身碟

做好隨身碟之後插入主機重新啟動,開機的時候按下選擇開機選單
  • 華碩:F8
  • 微星:F11
  • 技嘉:F12
有些板子預設是關閉的你在摸索一下怎麼開
這裡的重點是要選擇帶有 UEFI 字樣的開機才可以,選錯安裝完畢會失敗不能開機。
打開之後 ubuntu 有選單一般選第一個即可,如果顯示卡有衝突開機失敗就選第二個

開始安裝

進入隨身碟開機之後會是一個完整的 ubuntu 可以使用,桌面就有安裝選項打開他開始安裝。
選擇你要的語言
這裡依照情況選擇即可,建議是一起更新
如果有跳警告就繼續吧
選擇全新安裝
這裡記得要
  1. 先點選新分割表,這會刪除所有分區並格式化為GPT硬盤
  2. 點 + 新增EFI分區容量設置 大於100M即可
  3. 設置 SWAP 建議就16G吧
  4. 其他分區自行決定,沒有需求就是切一個root即可
還有最下方的用來安裝開機程式的裝置與MBR不同,
這裡要選中 EFI 分區,如圖中是 sda1 沒選到會導致不能開機
下一步選擇語言,預設即可
設置你的使用者資訊
然後等待安裝好
安裝好就可以重啟了

重新啟動之後

大部分的主機板預設都是用EFI啟動的,直接重啟即可,這邊要說例外尤其是 3代的英特爾普遍有這個問題。
我使用的板子是 H61 預設是不會使用EFI啟動的,也不能關閉CSM,所以重啟之後會使用原本的MBR開機,下場就是什麼都沒有開不起來,要手動到BIOS裡面調整為EFI啟動優先
EFI啟動選項有2個,一個有認證一個沒認證,如果你的主機板有打開安全啟動就是兩個都試試看即可。
如果是比電,少數的機種需要自己新增安裝選單,要找一下選項,有一個可以瀏覽檔案選中 s 開頭的efi檔案這個有認證的。

2018年6月24日 星期日

PowerShell 自動產生 gitignore 檔案

git 自動產生 gitignore 檔案

每一次都要打git的忽略文件超煩,完全沒意義的東西,真的該設定一個指令讓他自動執行呀。



安裝到 PoweShell

這邊已Windwos內建的 PoweShell 為例,直接輸入

git config --global alias.ignore '!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi'

如果當初安裝沒有打勾把命令注入到系統,可能沒辦法使用git命令,打開git bash輸入就好

生成文件

直接在git倉庫的目錄底下打下面指令就可以生成了

# linux
git ignore c++ >> .gitignore

# windwos (ps5.0 以前)
git ignore c++ | Out-File -Encoding ASCII .gitignore
  • 一個箭頭表示複寫新檔,兩個箭頭表示增加不會刪除舊檔
  • 多語言就用逗號隔開,可以一次混合成一包 git ignore c++,java

編碼問題

因為編碼的關係,預設 PowerShell 輸出並不是 UTF-8 而是 UTF-16 會導致 git 讀不到而不起作用。PowerShell 6 開始預設輸出就是 UTF-8 了,可以直接用箭頭產生。

查看PS版本 $PSVersionTable

有哪些語言可以用

上面打完就安裝好了,命令會在git的設定檔 .gitconfig 裡面新增一行指令。
這個文件一般安裝在使用者資料夾裡面,打開自己的使用者文件就找到了。

需要什麼語言可以打下面指令,包山包海應有盡有

git ignore list



如何優化指令

是能自己生出來了,可是每次都打這麼長怎麼受的了,這邊介紹一下如何在Win10底下自動生成gitignore文件檔。

首先配置一個起始文件,這個起始文件在powershell啟動的時候會自動執行裡面的內容。
下面的指令如果沒有建立過是空的,會自動生成一個起始文件

# 如果文件不存在自動生成
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }notepad $PROFILE
# 設置權限(預設沒權限可以執行)
Set-ExecutionPolicy AllSigned

然後用記事本打開編輯一下

notepad $PROFILE

第一次開應該是全空的,在裡面補上下面指令後,存檔就完成了

# 創建git的忽略檔
function gitIgnore ($Lang){
    git ignore $Lang | Out-File -Encoding ASCII -NoClobber .gitignore
}
function gitIgnoreOverWeite ($Lang){
    git ignore $Lang | Out-File -Encoding ASCII .gitignore
}
function gitIgnoreAppend ($Lang){
    git ignore $Lang | Out-File -Encoding ASCII -Append .gitignore
}
function gitIgnoreEdit($Editor){
    $ignoreFile = ".gitignore"
    if ($Editor){
        $cmd = $Editor + " " + $ignoreFile
        Invoke-Expression $cmd
    } else {
        notepad $ignoreFile 
    }

}

關閉重新開啟之後執行

cd ~\Desktop
gitIgnore java

這樣就會在桌面建立該文件了,要生成的文件的時候在那個git的資料夾按住shift在按右鍵,選擇在這裡開啟PS視窗,打這行指令就可以生成了

如果要新增兩個以上的語言就用 gitIgnoreAppend 會自動把新的內容寫在檔案結尾,使用 gitIgnoreOverWeite 則會覆蓋掉於本的檔案。

如果要手動編輯檔案則使用 gitIgnoreEdit 這個函式帶一個參數可以輸入自己喜歡的編譯器開啟。



參考

套件參考自:https://docs.gitignore.io/install/command-line

2018年6月15日 星期五

高斯核心矩陣 如何計算 範例程式

高斯核心矩陣 如何計算 範例程式

取自 opencv 函式轉成一般 vector 函式
比較特別的是,他的計算方法如果半徑小於7的話,標準差sigma又是無效設置的話(小於1)就用內定的矩陣,而不再重新計算。
vector<double> getGaussianKernel( int n, double sigma )
{
    const int SMALL_GAUSSIAN_SIZE = 7;
    static const float small_gaussian_tab[][SMALL_GAUSSIAN_SIZE] =
    {
        {1.f},
        {0.25f, 0.5f, 0.25f},
        {0.0625f, 0.25f, 0.375f, 0.25f, 0.0625f},
        {0.03125f, 0.109375f, 0.21875f, 0.28125f, 0.21875f, 0.109375f, 0.03125f}
    };

    const float* fixed_kernel = n % 2 == 1 && n <= SMALL_GAUSSIAN_SIZE && sigma <= 0 ?
        small_gaussian_tab[n>>1] : 0;

    vector<double> kernel(n);
    double* cd = kernel.data();

    double sigmaX = sigma > 0 ? sigma : ((n-1)*0.5 - 1)*0.3 + 0.8;
    double scale2X = -0.5/(sigmaX*sigmaX);
    double sum = 0;

    int i;
    for( i = 0; i < n; i++ )
    {
        double x = i - (n-1)*0.5;
        double t = fixed_kernel ? (double)fixed_kernel[i] : std::exp(scale2X*x*x);
        cd[i] = t;
        sum += cd[i];
    }

    sum = 1./sum;

    for( i = 0; i < n; i++ )
    {
        cd[i] *= sum;
    }

    return kernel;
}
使用範例
// 核心
    vector<double> gau = ::getGaussianKernel(3, 0);
    for (size_t i = 0; i < gau.size(); i++) {
        cout << gau[i] << ", ";
    } cout << endl;

// 驗證
    vector<double> gau = ::getGaussianKernel(9, 1.6);
    cout << "[";
    for (size_t i = 0; i < gau.size(); i++) {
        cout << gau[i] << ", " << endl;
    } cout << "]"<< endl;

    Mat g = cv::getGaussianKernel(9, 1.6);
    cout << g << endl;