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/

2016年2月28日 星期日

2016/2/27 and 2/28 Blender 學習筆記

1. 用右鍵選取物件
2. 按"a"取消選取或是選取全部
3. 滑鼠中間鍵(mmb)改變視角
4. mmb+Shift : 上下左右平移(或是按住Ctrl or Shift 加滾動mmb)
5. mmb+Ctrl : zoom in/out



6. 下方這個東西可以turn on / off 中間的三軸,箭頭是移動,弧線是旋轉,最後一個是縮放;可以點其中一軸進行調整或直接點中間的圈圈三軸一起調(快捷鍵=> 移動:g  旋轉:r  縮放:s)




7. "n": toggle property panel (可調整location, rotation, scale等等)
8. "t": toggle tool panel
9. 下方可以變更模式



10. 按tab可進入編輯模式(可選取物件的點、線、面);ctrl+tab可選擇點或線或面
11. Shift+S可點開下列畫面
12. 選取pivot
13. X:刪除物件
14. center the cursor and frame-up the scene: Shift + C
15. Numpad上的句點 : frame-up the object
16. 選取物件的點線面後按E可新增點線面
17. Ctrl+ R : loop and cut 
18. Numpad上 1:正面   3:右邊
19. f : make face
20. z : 只顯示框線
21. 關節處至少都需三條線(中間線和兩條邊線)
22.Ctrl + J : joint objects
23. circle select : C
24. expand selection region : Ctrl + Numpad 
25. "U" : unwrap
gizmo : (n.)小玩意
polygon: (n.)多邊形

2016年2月15日 星期一

2016/2/15學習筆記

1.英文方位用法
A is in the east of B (A在B裡,A在B的東部)
ex: Japan is in the east of Asia.

A lies (to the) east of B. (A在B外,且不直接相鄰,A在B東方)
ex: Japan lies (to the) east of China.

A is on the east of B. (A在B外,AB相鄰,A在B東方)
ex: 廣東 is on the south of 湖南.

A is at the east of B. (把方位詞當成一點看待)
ex: There was a big battle at the north of the 遼東半島.

A lies 100 km to the east of B. (A位於B東面100公里處)
=  A lies 100 km east of B.


2.是否
是否開頭用whether不用if
ex: Whether we can stay with my mother is another matter.

介係詞後只用whether
ex: There was a big argument about whether we should move to a new house.

只有whether可接不定詞
ex: I'm not sure whether to go.

主詞補語用whether 不用if
ex: The question is whether the man can be trusted.

同位語用whether不用if
ex: You have to answer my question whether you love him.

資料來源: http://timeboy.pixnet.net/blog/post/25705091-%E3%80%8E%E6%98%AF%E5%90%A6%E3%80%8F(whether,-if)%E7%9A%84%E5%85%A9%E7%A8%AE%E8%8B%B1%E6%96%87%E8%AA%AA%E6%B3%95


2016年2月12日 星期五

2016/2/10學習筆記

1.Google以圖搜圖原理--感知Hash算法
步驟一: 將圖片縮小至8*8的大小(目的: 去除細節,只保留結構、明暗等資訊)
步驟二: 將顏色簡化至64級灰階(也就是所有像素點總共只會有64種顏色)
步驟三: 計算64個像素的平均值
步驟四: 每個像素均與平均值做比較,>=平均值則記為1,小於平均值則記為0。
步驟五: 將上一步的64個0和1組合起來(沒有規定的組合次序,但所有要比較的圖次序都必須相同),所形成的值就是計算出的Hash值,也就是這張圖片的指紋

比較方法: 計算兩張圖的漢明距離(Hamming distance),若距離不超過5則代表這兩張圖片很相似,若大於10,則代表這兩張為不同的圖片。
優點: 簡單快速,不受圖片大小縮放影響
缺點: 圖片內容不可變更,若在圖上加上幾個文字就辨認不出來了
適用: 根據縮圖找出原圖

參考資料: http://hiredwolf.blogspot.tw/2011/07/google_1581.html




2016/2/12學習筆記

1. to this end : 為此;為了這個目的
2.讀論文時常常會在reference裡面看到人名後面有個et al.,意思是...等等(也就是不只一人)
3.影像資料庫檢索
(1)色彩檢索法
     將影像轉換為色彩柱狀圖,斜線區域面積越小,兩張影像相似度越高
     八分樹
     給定(R,G,B) = (53,187,207) = (00110101, 10111011, 11001111)2。因為R€[0,127],G€[128,255],B€[128,255],所以可用011代表這些色彩的範圍,其八分樹可表示成如下圖(直接看變成二進位後的每一位)
      愈上層的節點給予較高的加權,因為表示主色;進行影像檢索時,將待查詢的影像轉換成減縮式的八分樹,再將其和影像資料庫中的各個八分樹取交集,交集越多相似度越高,最後由相似度高低排出檢索結果。

(2)邊紋理檢索法(edge texture)
    先取得輸入影像的邊圖(edge map)
    
   

        針對五種特徵可分別統計出注水柱狀圖、分岔數柱狀圖等等,其柱狀圖的比對方式類似於色彩柱狀圖的比對方式。


4. K-means分群方法


5.改良式K-means方法



資料來源: 整合多搜尋方法之影像資料庫檢索系統(曾逸鴻、黃吉緯,2009)










2016年1月29日 星期五

precision & recall & F score & 簡易SVM介紹(含簡易數學推導)

今日學習內容:

1.precision v.s recall
precision(也叫做positive predictive value) = 搜尋到而且有相關的結果 / 搜尋到的所有結果
recall(也叫做sensitivity) = 搜尋到而且有相關的結果 / 所有有相關的結果(照理說應該都要被搜尋到的結果)

範例:
(1)假設一個場景裡共有九9隻狗,有一個偵測程式偵測到了7隻狗,然而實際上那7隻狗裡面只有4隻真的是狗,另外3隻其實是貓,則 precision = 4/7,而 recall = 4/9
(1)一個搜尋引擎找到了30個頁面,但其中只有20個頁面是真的跟搜尋內容有相關的,而且實際上還有40個相關的頁面沒搜尋到,則 precision = 20/30 = 2/3,而 recall = 20/60 = 1/3

參考資料: 維基百科
這個網站也講得很好:連結


2. F score(F1-score or F-measure)
用來測試測驗的準確度,F score為1的時候最準確,0的時候最不準確
傳統F-measure(or balanced F-score)





參考資料: 維基百科

3. 簡易SVM介紹(含簡易數學推導)

2016/1/29 萬惡的paper阿阿阿阿阿阿阿

學習連結:
1. feature vector
2. what is structured learning --PyStruct