2016年9月12日 星期一

Ubuntu 14.04莫名的標楷體

之前因為專題關係
想說灌個Win10/Linux雙系統
結果不小心用到windows開不起來
只好姑且就都用Linux了(本來只想拿它來run某些code而已...
但貌似是因為我當初在安裝的時候語言選了English
導致我後來瀏覽器開啟來顯示的字體都是標楷體
看得我超痛苦的
後來在網路上找到別人的解法
http://www.ntex.tw/wordpress/1985.html
一開始的確有用
但後來多點幾個網頁發現某些中文字都會變成莫名的框框無法顯示
而且那樣的方法似乎會導致真的需要用標楷體的時候沒有標楷體可以用
在Google了各式其他的方法後決定下載思源體來用用
載點:https://www.google.com/get/noto/
進去裡面就點那個粉紅色的"DOWNLOAD ALL FONTS"
下載下來解壓縮
解壓縮後的資料夾會叫作Noto-hinted
接著輸入以下指令
sudo cp Noto-hinted /usr/local/share/fonts/ -a
sudo chown root.staff /usr/local/share/fonts/Noto-hinted -R
sudo chmod 644 /usr/local/share/fonts/Noto-hinted/* -R
sudo chmod 755 /usr/local/share/fonts/Noto-hinted
sudo fc-cache -fv
這樣就完成字型安裝了
假如你的壓縮檔解完後不叫Noto-hinted  
那就把上面的指令Noto-hinted的部份換成你解壓縮後的資料夾名稱
其他動作一樣
然後這時候重開Chrome還是會發現一切都沒變
要關機後重開機才會看出效果~~~


終於不是標楷體了超感動阿~~~

2016年9月8日 星期四

Clothing parsing opensourse code 使用

由於專題需要parsing clothes
所以找到了這個opensource的code
http://vision.is.tohoku.ac.jp/~kyamagu/research/clothing_parsing/
不過在使用上遇到不少問題
因此在部落格上紀錄一下

如果只是照他README上面寫的乖乖的只打sbu.make
一開始就會看到一大堆的訊息
然後就會選擇性的只看下面好幾行的
Building with 'g++'.
MEX completed successfully.
看到completed successfully就會自以為一切都沒問題
但其實中間藏了不少error
需要一個一個慢慢解
(訊息很多但還是要面對阿QQ)

首先要先確定matlab的mex用的gcc和g++版本都是4.7.x(或以下)的
就是去/usr/bin下面看有沒有gcc-4.7.x之類的東西存在
但存在不代表它一定會用到(因為有可能同時好幾個版本的gcc存在)
所以建議是直接重新建立soft link
建立soft link的方法可以參考這裡:
http://www.cyberciti.biz/faq/creating-soft-link-or-symbolic-link/
總之就是先rm gcc和rm g++(記得要sudo)
然後sudo ln -s gcc-4.7.x gcc (g++方法一樣)
這樣就把gcc/g++的版本更新了


上述完成後編譯時還是會遇到不少問題
出現的error大致上長這樣
[svmpredict.mexa64] Error 255
然後說什麼CC#g++ not found之類的
要解決這個問題就是去/ib/+libsvm和/lib/+liblinear下面兩個的MAKEFILE裡面把
MEX_OPTION = CC\#$(CXX) CXX\#$(CXX) CFLAGS\#"$(CFLAGS)" CXXFLAGS\#"$(CFLAGS)"
改成
MEX_OPTION = CC=$(CXX) CXX=$(CXX) CFLAGS="$(CFLAGS)" CXXFLAGS="$(CFLAGS)"
就好了
參考:http://stackoverflow.com/questions/24599491/installing-liblinear-on-matlab-r2014a

還沒結束
接著還會遇到
/usr/bin/ld: cannot find -lboost_program_options-mt
collect2: ld returned 1 exit status
make: *** [tests/testdai] Error 1
這時請進到/lib/libdai裡的Makefile.LINUX

BOOSTLIBS_PO=-lboost_program_options-mt
改成
BOOSTLIBS_PO=-lboost_program_options
問題就解決了
參考:https://groups.google.com/forum/#!topic/libdai/rEGQLzvkJ2U

不過這次它就又會再出現
CXX#g++ not found
make: *** [+libdai/dai.mexa64] Error 255
這樣的error
同樣在Makefile.LINUX裡面

MEXFLAGS:=CXX\#g++ CXXFLAGS\#'$(CCFLAGS)'
改成
MEXFLAGS:=CXX=g++ CXXFLAGS='$(CCFLAGS)'
問題消失~~~

然後換新問題
/usr/bin/ld: cannot find -lboost_unit_test_framework-mt
make: *** [tests/unit/var_test] Error 1
一樣把-mt刪掉就好了


大功告成~~~~終於阿~~~


然後要注意的是他的README似乎不是很準
有些上面說的function都不能用...
測試之後沒問題的作法大概就是

Parsing: (跑一張圖還滿久的)
im = imread('myphoto.jpg');
parser = sbu.ClothParser.default_parser;
photo = parser.parse(im,{'t-shirt','pants','shoes'}); % specific parsing

Display:
photo.segmentation.show_superpixels;
photo.segmentation.show;                        % Plain parse
photo.segmentation.show('image', photo.image);  % Overlaid parsing

% Adding a color bar in the plot
clothings = sbu.Fashionista.clothings;
photo.segmentation.show('image', photo.image, 'labels', clothings);

然後要看pose的話可以用
photo.pose.show;                         % Plain pose in xy coord
photo.pose.show('image', photo.image);   % Pose overlaid on an image
出來結果長這樣(pose的):

阿parsing結果長這樣:
他旁邊那個圖示條跟文字好像沒有很對到
但順序一樣就是了

其實結果沒有到想像中那麼好
但大致上也正確了

以上。

2016年7月9日 星期六

何謂spatial extent?

The spatial extent of a data resource is a bounding box (defined by four Latitude/Longitude coordinates) and is the smallest rectangular shape which totally encloses all of the referenced data.


資料來源: https://eip.ceh.ac.uk/catalogue/help/editing/metadataauthorguide/008spatialExtent

2016年7月6日 星期三

CIELAB color

CIE Lab是什麼?

CIE Lab顏色空間分為L、a、b三個通道,此顏色空間較RGB顏色空間更接近人類眼睛對色彩的描述。

  • L描述亮度值,範圍值介於0~100
  • a描述綠色至紫紅色,範圍介於-500~500
  • b描述藍色至黃色,範圍介於-200~200





資料來源: http://ccw1986.blogspot.tw/2014/04/colorcie-labcie-lab.html

2016年4月3日 星期日

github學習筆記

1.集中式版本控管 v.s. 分散式版本控管
集中式版本控管 : 專案所有版本的檔案都存在單一伺服器上,開發者畚箕端只會儲存最新版本的歷史紀錄,因此若想提交(commit)新版本、查詢各版本差異或修改歷史紀錄都需要透過網路連上伺服器才能執行。
好處: 可限制開啟目錄的權限
壞處: 對網路依賴度高

分散式版本控管 : 遠端儲存庫和每一個開發者本機端儲存庫上各有一份完整的歷史檔案,遠端儲存庫只是提供一個供多人同步專案資料用的共享版本,開發者不須透過網路便能提交新版本的程式碼到本機端儲存庫,等到需要將本機端儲存庫的資料同步到遠端儲存庫時才需要用到網路

2. 減少空間
git會為專案資料建立快照(snapshot),若是專案內沒有變更的檔案就不會多儲存一份來佔用磁碟空間,而只是增加了一筆這個檔案的對應連結,開發者開以新版本存取這個檔案時,實際上還是開啟先前的舊版檔案而非新副本

3. git 工作流程

step1 : 建立開發專案=>建立目錄(Working Directory)及儲存庫(Repository)
Working Directory: 開發專案所有的檔案都儲存在這個目錄下,執行與專案相關的git指令也都是在工作目錄下執行
Repository:下達建立儲存庫的指令(git init)後會在工作目錄下建立一個.git資料目錄,用來儲存所有版本變更所需資訊,G在.git目錄下會建立一個名稱為index的索引檔案,用來記錄專案所有檔案的處理狀態(ex: committed:已提交;modified:已修改;staged:在已修改檔案中標記出要做為提交到下一版本用的已暫存)

step2 : 在專案目錄下新增或修改檔案

step3 : 告一個段落時提交一個專案新版本到Git本地端儲存庫
將需要提交的檔案標記為staged,then commit
若要使用GitHub來和其他人共享專案則需要以下指令:
(1)push:將本地端儲存庫的特定版本專案推到遠端儲存庫上整併
(2)pull:從遠端儲存庫將新版程式碼取回本地端儲存庫
(3)checkout:從本地端儲存庫放入工作目錄中


4.branch and merge
對Git而言開發的專案版本並無master(主幹與branch(分支)的差別,每個分支都是等價關係,是開發者自行來對各分支做命名,一般習慣將穩定版本稱為主幹,其他開發中的版本則稱作分支
指令:
branch:建立分支,可以將某個歷史版本複製一份,獨立成為另一個新的分支版本
merge:將兩個不同的分支版本合併到其中一個分支上

5.分版指令
clone: 把專案在遠端儲存庫上的所有內容複製到本地,建立起本機儲存庫及工作目錄
fork:把別人專案的遠端儲存庫內容複製一份到自己的遠端儲存庫
[範例] 看到有興趣的她專案可以執行fork指令,把別人專案的遠端儲存庫複製到自己的遠端儲存庫,再執行clone,把自己遠端儲存庫的整個專案的所有內容(包括各版本)複製到本機端儲存庫

6.同步指令
push:將自己目前本機端儲存庫的相關檔案上傳到遠端儲存庫
pull:把遠端儲存庫的最新版本下載至自己的本機端,並將遠端分支合併到本地分支
<比較> pull並不像clone會下載完整專案各版本內容
pull request:主動要求第三方開發者納入自己開發的程式,將本地端儲存庫上的程式碼整併到對方的儲存庫上
[範例] A成員可透過pull request要求B成員將A成員修改後的程式碼併入B成員的開發專案中

7. git bash 指令
git touch XXX :若沒有XXX這個檔案則會創一個出來,若有則是更改timestamp
git add XXX: 將XXX列為staged狀態  
git add . : 把所有剛剛修改過或新增加的檔案加進stage狀態
git commit : 把staged的檔案都commit
git commit -m "message": 把staged的檔案都commit,"message"為給這次commit的訊息

資料來源: http://www.ithome.com.tw/news/95283
http://gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/

另外可參考:
https://ihower.tw/git/basic.html
http://rubyist.marsz.tw/blog/2012-01-17/git-reset-and-revert-to-rollback-commit/
https://ihower.tw/git/remote.html

2016年3月31日 星期四

學習筆記 [body detection using opencv入門2]

1. pixels值都增加 => 整張相片變白
    pixels值都乘以某個倍數 => 相片對比變大
2. Mat 包含兩個parts:
(1) matrix header: matrix information =>size : constant
(ex:
 the size of the matrix, the method used for storing, at which address is the matrix stored, and so on)
(2) 
a pointer to the matrix containing the pixel values =>size : varied

key point : (1) assign and copy => only header

ABC實際上指到同一個matrix,所以其中一個更動到matrix就會影響到其他人

                 (2) 要複製matrix本身 => clone() or copyTo()
FGA彼此互不影響(指到各自的matrix)
hue : 色調
saturation : 飽和
value / luminance : 明視度

2016年3月22日 星期二

2016/3/22學習筆記 [body detection using opencv入門]

1.feature descriptor : The intent of a feature descriptor is to generalize the object in such a way that the same object (in this case a person) produces as close as possible to the same feature descriptor when viewed under different conditions.

2.HOG(Histograms of Oriented Gradients) person detector 較簡單,因為使用的是global feature而不是一堆local feature的集合(一個人可以用single feature vector就可表示,而不是用many feature vectors representing smaller parts of the person)

3. gradient vector: 針對每個像素a,將像素a左邊的像素b和右邊的像素c相減(要b-c或c-b都可,但整張圖所有像素減的方向要一致),得到x;y方向同理得到y,(x,y)可用來算tan值(角度)和大小(平方相加開根號),由此可得到一個向量
原教學: 
https://chrisjmccormick.wordpress.com/2013/05/07/gradient-vectors/     (英文,不過講解超清楚!!!)
gradient vector用途: (1)edge detection (2)feature extraction(可避免掉lighting對影像造成的影響) 

資料來源: https://chrisjmccormick.wordpress.com/2013/05/09/hog-person-detector-tutorial/