2016年9月30日 星期五

[Linux]SSD架設

(01) 架設環境
Ubuntu v16.04 LTS
caffe v1.0.0-rc3
cuDNN v5.1.5
cuda v8.0
cuda patch v8.0

(02) 下載Caffe_SSD
$ git clone https://github.com/weiliu89/caffe.git caffe_SSD
$ cd ~/caffe_SSD
$ git checkout ssd

(03) 修改caffe的Makefile.config
$ cd ~/caffe_SSD
$ cp Makefile.config.example Makefile.config
$ sudo gedit Makefile.config

a. 啟用CUDNN,去掉"#"
USE_CUDNN := 1

b. 啟用GPU,將CPU_ONLY開頭加上"#"
# CPU_ONLY := 1

c. 搜尋lib位置
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s libhdf5_serial.so.8.0.2 libhdf5.so

$ sudo ln -s libhdf5_serial_hl.so.8.0.2 libhdf5_hl.so

(04) 編譯Caffe_SSD
$ cd ~/caffe_SSD
$ mkdir build
$ cd build
$ cmake -D CUDA_USE_STATIC_CUDA_RUNTIME=OFF -D OpenCV_DIR=/usr/local/share/OpenCV ..
$ make all -j8
$ make install -j8
$ make pytest -j8
$ make pycaffe -j8
$ make runtest -j8

(05) 下載VggNet放在~/caffe_SSD/models/VGGNet/
https://gist.github.com/weiliu89/2ed6e13bfd5b57cf81d6

(06) 下載VOC2007和VOC2012的資料
$ cd
$ mkdir data
$ cd ~/data
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
$ tar -xvf VOCtrainval_11-May-2012.tar
$ tar -xvf VOCtrainval_06-Nov-2007.tar
$ tar -xvf VOCtest_06-Nov-2007.tar

(07) 設置環境變數
$ sudo gedit /etc/profile

在/etc/profile 最底下添加
export PYTHONPATH=$PYTHONPATH:$HOME/caffe_SSD/python

$ source /etc/profile
$ sudo reboot


(08) 創建LMDB檔案
$ cd ~/caffe_SSD
$ ./data/VOC0712/create_list.sh

$ ./data/VOC0712/create_data.sh

(09) 訓練與測試

$ sudo gedit ~/caffe_SSD/examples/ssd/ssd_pascal.py
修改gpus = "0,1,2,3"這一行,來決定使用的gpu數量
$ cd ~/caffe_SSD
$ python examples/ssd/ssd_pascal.py
如果出現cudasuccess(2vs0)問題,則說明顯示卡計算量有線,再次打開caffe/examples/ssd/ssd_pascal.py修改batch_size = 32這一行
$ python examples/ssd/score_ssd_pascal.py
$ python examples/ssd/ssd_pascal_webcam.py

2016年9月9日 星期五

[Linux]Digits架設

(01) 架設環境
Ubuntu v16.04 LTS
Qt v5.7.0
OpenCV v2.4.13
caffe v0.15.13
cuDNN v5.1
cuda v8.0
digits v4.1


下載區:http://goo.gl/lp7VCN


(02) 安裝相關套件
$ sudo apt-get install build-essential libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler curl git cmake

(03) 安裝cuda
https://developer.nvidia.com/cuda-downloads

$ chmod 755 Cuda_v8.0.44.run
$ sudo ./Cuda_v8.0.44.run --override

Enter CUDA Samples Location [ default is /home/kinghorn ]: /usr/local/cuda

(04) 設置環境變數
$ sudo gedit /etc/profile.d/cuda.sh

在/etc/profile.d/cuda.sh最底下添加
export PATH=$PATH:/usr/local/cuda/bin
export CUDADIR=/usr/local/cuda
export GLPATH=/usr/lib

(05) 添加lib路徑
$ sudo gedit /etc/ld.so.conf.d/cuda.conf

在/etc/ld.so.conf.d/cuda.conf最底下添加
/usr/local/cuda/lib64

$ sudo ldconfig

(06) 安裝cuda sample
$ cd /usr/local/cuda/samples
$ sudo make all -j4

(07) 測試cuda
$ cd /usr/local/cuda/samples/bin/x86_64/linux/release
$ ./deviceQuery

(08) 安裝cuDNN
https://developer.nvidia.com/rdp/cudnn-download

移動到lib64下
$ sudo cp lib* /usr/local/cuda/lib64/
移動到include下
$ sudo cp cudnn.h /usr/local/cuda/include/

(09) 更新連結
$ cd /usr/local/cuda/lib64/
$ sudo ln -sf libcudnn.so.5.1.5 libcudnn.so.5
$ sudo ln -sf libcudnn.so.5 libcudnn.so
$ sudo ldconfig -v
$ sudo reboot

(10) 安裝Atlas
$ sudo apt-get install libatlas-base-dev

(11) 安裝Qt Creator
http://www.qt.io/download-open-source/


$ sudo apt-get --reinstall install libgl1-mesa-dev

(12) 安裝Torch(選擇安裝)

$ git clone https://github.com/torch/distro.git ~/torch --recursive
$ cd ~/torch
$ bash install-deps
$ ./install.sh
$ source ~/.bashrc
$ sudo gedit /etc/profile

在/etc/profile 最底下添加
export TORCHPATH=${HOME}/torch/install

$ source /etc/profile

(13) 安裝相關套件
$ sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libgtkglext1-dev libgtkgl2.0-dev libeigen3-dev

(14) 下載OpenCV安裝檔案
http://opencv.org/
下載完後,將目錄移至到檔案所在位置(我自己是放在家目錄下),並解壓縮。
用終端機進入資料夾中。

(15) 安裝OpenCV
$ mkdir build
$ cd ./build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make -j8
$ sudo make install
$ sudo ldconfig

(16) 測試OpenCV
新增c++檔

.pro內容

QT       += core
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test
TEMPLATE = app
SOURCES += main.cpp
HEADERS  +=
FORMS    +=
INCLUDEPATH += /usr/local/include \
                /usr/local/include/opencv \
                /usr/local/include/opencv2
LIBS += /usr/local/lib/libopencv_highgui.so \
        /usr/local/lib/libopencv_core.so    \
        /usr/local/lib/libopencv_imgproc.so \

.cpp內容

#include <QCoreApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    namedWindow( "src", WINDOW_AUTOSIZE );
    Mat src1 = imread( "lena.jpg" );
    while(1)
    {
        imshow( "src", src1 );
        char c =  waitKey(30);
        if( 27==c )
            return 0;
    }
}

在放入一張lena.jpg即可完成。

(17) 安裝Caffe需要的Python包
$ sudo apt-get install -y python-numpy python-scipy python-matplotlib cython
$ sudo apt-get install -y python-sklearn python-skimage python-h5py python-protobuf python-leveldb
$ sudo apt-get install -y python-networkx python-nose python-pandas python-gflags ipython protobuf-c-compiler
$ sudo apt-get install -y protobuf-compiler python-pip python-sympy ipython-notebook libyaml-cpp-dev

(18) 下載環境依賴項
$ sudo apt-get install libgflags-dev libgoogle-glog-dev libopencv-dev libleveldb-dev libsnappy-dev liblmdb-dev libhdf5-serial-dev libprotobuf-dev protobuf-compiler libatlas-base-dev python-dev python-pip python-numpy gfortran libboost-all-dev graphviz gunicorn python-pydot

(19) 下載caffe
$ git clone https://github.com/NVIDIA/caffe.git caffe

(20) 修改caffe的Makefile.config
$ cd ~/caffe
$ cp Makefile.config.example Makefile.config
$ sudo gedit Makefile.config

a. 啟用CUDNN,去掉"#"
USE_CUDNN := 1

b. 啟用GPU,將CPU_ONLY開頭加上"#"
# CPU_ONLY := 1

c. 搜尋lib位置
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s libhdf5_serial.so.8.0.2 libhdf5.so
$ sudo ln -s libhdf5_serial_hl.so.8.0.2 libhdf5_hl.so

(21) 開始編譯
$ cd ~/caffe
$ mkdir build
$ cd build
$ cmake -D CUDA_USE_STATIC_CUDA_RUNTIME=OFF -D OpenCV_DIR=/usr/local/share/OpenCV ..
$ make all -j4
$ make test -j4
$ make runtest -j4
$ make pycaffe

(22) 測試Caffe
$ cd ~/caffe
$ sudo bash ./data/mnist/get_mnist.sh
$ sudo bash ./examples/mnist/create_mnist.sh
$ sudo bash ./examples/mnist/train_lenet.sh | tee res.out
$ sudo gedit /etc/profile

在/etc/profile 最底下添加
export CAFFE_HOME=${HOME}/caffe

$ source /etc/profile
$ sudo reboot

(23) 安裝Digits
$ git clone https://github.com/NVIDIA/DIGITS.git digits
$ cd ~/digits
$ for req in $(cat requirements.txt); do sudo pip install $req; done
$ chmod +x ./digits-devserver

(24) 配置Digits
$ python -m digits.config.edit --verbose
$ ./digits-devserver

2016年7月8日 星期五

[Linux]PPTP架設

(01) 架設環境
Ubuntu v16.04

(02) No-IP架設
註冊No-IP
http://www.noip.com/

下載No-IP Client
http://www.noip.com/download?page=linux

安裝No-IP
$ cd noip
$ sudo make
$ sudo make install
$ sudo nano /etc/rc.local

# 加入底下這一行:
/usr/local/bin/noip2

(03) PPTP架設
$ sudo -s
# sudo apt-get install pptpd network-manager-pptp network-manager-vpnc
# sudo nano /etc/pptpd.conf

# 加入底下這一行:
localip 192.168.0.103
remoteip 192.168.0.200-250

# sudo nano /etc/ppp/pptpd-options

# 加入底下這一行:
ms-dns 8.8.8.8
ms-dns 168.95.1.1

# sudo nano /etc/ppp/chap-secrets

# 加入底下這一行:
name pptpd password *

# /etc/init.d/pptpd restart
# sudo nano /etc/sysctl.conf

# 底下註解拿掉:
net.ipv4.ip_forward=1

# sudo sysctl -p
# sudo nano /etc/rc.local

# 加入底下這兩行:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
/etc/init.d/pptpd restart

# sudo reboot

2015年6月2日 星期二

[Microsoft Visual Basic 2013 Express]執行Cmd指令

開發環境:Microsoft Visual Basic 2013 Express
原理  :用Cmd來做到從外部執行指令並取得傳回值


Public Function Cmd(ByVal Command As String) As String
      Dim process As New System.Diagnostics.Process()
      process.StartInfo.FileName = "cmd.exe"
      process.StartInfo.UseShellExecute = False
      process.StartInfo.RedirectStandardInput = True
      process.StartInfo.RedirectStandardOutput = True
      process.StartInfo.RedirectStandardError = True
      process.StartInfo.CreateNoWindow = True
      process.Start()
      process.StandardInput.WriteLine(Command)
      process.StandardInput.WriteLine("exit")
      Dim Result As String = process.StandardOutput.ReadToEnd()
      process.Close()
      Return Result
End Function
 
現在,我要用程式找IP:
Dim result As String
result = Cmd(“ipconfig")
Debug.Print(result)
這樣會印出所有Cmd上面的內容。

[Microsoft Visual Basic 2010 Express]背景音樂

開發環境:Microsoft Visual Basic 2010 Express
原理  :利用Windows Media Player的dll檔(wmp.dll),讓在VB2010可以使Windows
                    Media Player的功能。


Imports WMPLib

Public Class Form1

    Public wmp As New WindowsMediaPlayer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        wmp.URL = System.Windows.Forms.Application.StartupPath & "\Angel Beats!PV6使用曲 ロック風アレンジ Reloaded.mp3"

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        wmp.close()

    End Sub

End Class



windows media player 控件的常用屬性及方法
屬性/方法 說明
URL:String; 
指定媒體位置,本機或網絡地址
uiMode:String; 
播放器界面模式,可為Full, Mini, None, Invisible
playState:integer; 
播放狀態,1=停止,2=暫停,3=播放,6=正在緩衝,9=正在連接,10= 準備就緒
enableContextMenu:Boolean; 
啟用/禁用右鍵菜單
fullScreen:boolean; 
是否全屏顯示
[Ctlcontrols] wmp.controls 
播放器基本控製
Ctlcontrols.play; 
播放
Ctlcontrols.pause; 
暫停
Ctlcontrols.stop; 
停止
Ctlcontrols.currentPosition:double; 
當前進度
Ctlcontrols.currentPositionString:string; 
當前進度,字符串格式。如“00:23”
Ctlcontrols.fastForward; 
快進
Ctlcontrols.fastReverse; 
快退
Ctlcontrols.next; 
下一曲
Ctlcontrols.previous; 
上一曲
[settings] wmp.settings 
播放器基本設置
settings.volume:integer; 
音量,0-100
settings.autoStart:Boolean; 
是否自動播放
settings.mute:Boolean; 
是否靜音
settings.playCount:integer; 
播放次數
[currentMedia] wmp.currentMedia 
當前媒體屬性
currentMedia.duration:double; 
媒體總長度
currentMedia.durationString:string; 
媒體總長度,字符串格式。如“03:24”
currentMedia.getItemInfo(const string);
取當前媒體信息"Title"=媒體標題,"Author"=藝術家,"Copyright"=版權信息,"Description"= 媒體內容描述,"Duration"=持續時間(秒),"FileSize"=文件大小,"FileType"=文件類型,"sourceURL"=原始 地址
currentMedia.setItemInfo(const string); 
通過屬性名設置媒體信息
currentMedia.name:string; 
同 currentMedia.getItemInfo("Title")
[currentPlaylist] wmp.currentPlaylist //
當前播放列表屬性
currentPlaylist.count:integer; 
當前播放列表所包含媒體數
currentPlaylist.Item[integer]; 
獲取或設置指定項目媒體信息,其子屬性同wmp.currentMedia再使用currentMedia.duration

特別要注意 Player 需要Ctlcontrols.play()
才能取值
特別注意的是player可能檔案載入或是串流載入
可能未準備好而造成取得的值是0
我的解決方式是透過timer在一定時間(interval=3000)後再取值

[Microsoft Visual Basic 2010 Express]發送郵件

開發環境:Microsoft Visual Basic 2010 Express
原        理:利用Google,達到發送郵件的目的


Imports System.Net.Mail

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        Dim messase As String

        messase = TextBox1.Text

        messase = messase.Replace(vbCrLf, "<br>")

        Dim mailmsg As New System.Net.Mail.MailMessage()

        mailmsg.From = New MailAddress("") '寄件人的信箱@gmail.com

        mailmsg.To.Add("") '收件人的信箱@gmail.com

        mailmsg.Subject = "" '信主旨

        mailmsg.IsBodyHtml = True

        mailmsg.Body = messase '信件內容

        mailmsg.Priority = MailPriority.Normal

        Dim client As New System.Net.Mail.SmtpClient()



        client.UseDefaultCredentials = False

        client.Credentials = New System.Net.NetworkCredential("", "") '寄件人的信箱@gmail.com '寄件人的信箱密碼

        client.Port = "587" '587,25(smtp port)

        client.Host = "smtp.gmail.com" '需知道smtp位置

        client.EnableSsl = True '是否SSL加密

        Dim userstate As Object = mailmsg

        client.Send(mailmsg)

    End Sub

End Class

[Microsoft Visual Basic 2010 Express]登入網頁

開發環境:Microsoft Visual Basic 2010 Express
原        理:利用查詢HTML處理元件,達到登入網頁的目的


Public Class Form1

    Public Sub loading() '等待網頁讀取完成
        Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
        Loop
    End Sub

    Public Sub insertText(ByRef element As String, ByRef str As String, ByRef result As String) '輸入欄位
        Try
            WebBrowser1.Document.Body.All(element).InnerText = str
        Catch
            MsgBox(result)
        End Try
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        WebBrowser1.Navigate("http://tw.yahoo.com/")
        loading()

        '輸入帳號
        insertText(TextBox1.Text, TextBox3.Text, "")
        '輸入密碼
        insertText(TextBox2.Text, TextBox5.Text, "")
        Try
            WebBrowser1.Document.GetElementById(TextBox4.Text).DomElement.click()
        Catch
            MsgBox("Error:找不到登入按鈕")
            MsgBox("您已經登入")
            Exit Sub
        End Try

    End Sub
End Class