Home Contact Sitemap

Team Programming Dragon.編程龍

Programming Art、C++、Python、Django、LinuxDev、HCI、Graphics、Web2.0。讓我們成為編程界的朝田龍太郎吧。

Beauty is Our Business

A Birthday Salute to Computer Scientist Edsger W. Dijkstra.

Images to Video

之前有寫過把影片拆成一串 image 的方法,這邊則是反過來,把一串 image 兜成一段影片。

一樣是用 mplayer 系列,以下例子是把目前資料夾中的所有 jpg 都壓起來:

mencoder mf://*.jpg -mf type=jpeg -ovc lavc -oac lavc -o output.avi

注意的是可以用方便不已的 regular expression,所以假設要合第 200 ~ 299 個 frame 可以這樣下指令(假設資料夾下圖檔名如 mplayer 之拆解所預設補至八位數字如 00000001.jpg):

mencoder mf://000002*.jpg -mf type=jpeg -ovc lavc -oac lavc -o output.avi

如果檔名長得比較麻煩,也可以先用 shell script 或 scripting language 自動的寫出一個檔案 list.txt,每行指定一個檔案,然後下:

mencoder mf://@list.jpg -mf type=jpeg -ovc lavc -oac lavc -o output.avi

參考連結:
Encoding from multiple input image files

Tags: , , ,

. 28 Aug 08 | Linux | Comments (0)

半瓶醋的 C++ 教學(第四章):編程環境的選擇

之前在第三章曾經提到,越接近數學的內力不容易隨時間而改變,但作為外功的程式或系統工具則會,那麼,我們該如何儘量讓自己的外功能夠歷久恒新呢?

很直覺的,當然就是選用較不會過時的工具。而工具要能夠在變化萬千的編程界中不被時間所淘汰,固然本身素質要好,另外,我認為最重要的其中一個環節就是,開放。雖然這應該很直覺,不過還是稍加解釋一下好了…

如果今天某工具某 framework 是知名大廠所提倡的,或許在這大廠能夠予以支援的狀況下是還滿不錯用的,但是天有不測風雲啊,再怎麼大的公司總也有收攤的一天…就算沒有收攤好了,也許是公司的政策改變了,要改推另一個工具,那麼這時候無論是開發者的使用順手度,還是市場的接受度(你知道,麻瓜常常都是看哪個廣告多就用哪個,但我們巫師要有巫師的衿持),都難免急轉直下。因為他不開放,沒人搞得懂裡面在幹嘛,所以不會有社群的力量,同理,你也搞不懂,就算你再強想自己硬幹也沒辦法,除非重新寫一個。

甚至不要說收攤或是什麼行銷政策了,光講某M社的 IDE,常常出一個新的版本舊的版本的 code 就不能用了,這種愚蠢的事情我真想不透為什麼有人能夠接受…

Tags: , , , , ,

. 27 Aug 08 | C++, Linux | Comments (0)

Notes on cvQueryFrame

用 cvQueryFrame 要特別注意,連續 call 的話會一直往後面的 frame 跑,而且之前用 pointer 指的話,也會跟著往後跑,用 code 來說明的話:

frame1 = cvQueryFrame() ; // point to the first frame
frame2 = cvQueryFrame() ; // point to the second frame
 

frame1 原本是指向第一個 frame,但又 call 了一次後會跟 frame2 一起指向第二個 frame,若再 call 一次:

frame3 = cvQueryFrame() ; // point to the third frame
 

則 frame[1-3] 都會指向第三個 frame。

所以碰到像 optical flow 之類需要兩個連續 frame 的時候,第二次 call cvQueryFrame 之前,要先用另外一份空間把第一個 frame 備份起來。我正在玩的這份 sample code 是這樣用的:

allocateOnDemand( &frame1_1C, frame_size, IPL_DEPTH_8U, 1 ); // a self-defined routine for memory allocation, mainly cvCreateImage
cvConvertImage(frame, frame1_1C, 0); // convert to the OpenCV preferred format
 

Tags: , ,

. 21 Aug 08 | OpenCV | Comments (0)

用 wget 抓無名單一相簿

雖說也有幹圖王之類的可以用,不過我個人感覺那實在是肥大了點。加上好玩,就用 wget 試了一下。

無名的 page source 寫得相當簡單。首先從中找到類似以下這行的 html code。

src=’http://f7.wretch.yimg.com/jolin/6/1509316192.jpg

就可以得到 server_id, user_id, album_id, photo_id(應該明顯到不需要寫出來吧 :))

用這樣的方法找到該相簿第一張與最後一張的 photo_id,寫出類似以下 shell script,執行,就搞定啦。

for ((i=photo_id_start; i<=photo_id_end; i++))
do
wget http://server_id/user_id/album_id/$i.jpg –referer=“http://www.wretch.cc”
done

基本上 pixnet 也差不多,可以自己試試看。

要注意的是從 photo_id_start 到 photo_id_end 不見得每個 url 都實際存在。但實際測試基本上都滿 OK 的,如果真的隔太遠自己手動調一下也行。我沒有很常抓圖,所以就一直沿用這本質上很暴力的方法,如果有比較好的方法歡迎討論討論。

Tags: , , ,

. 20 Aug 08 | Network | Comments (0)

MPlayer 下使用字幕

用 mplayer 使用中文字幕似乎不是一件太簡便的事情。參考了 Free BSD Chinese HOWTO,但在我的 Ubuntu 7.04 上似乎不 work。
以下指令均不能使用(假設字型放在該路徑、字幕編碼為 utf8):

mplayer -font /font/big5-kai/bkai00mp16/font.desc -sub 1.srt -utf8 1.mkv
mplayer -font /font/big5-kai/bkai00mp16/font.desc -sub 1.srt -unicode 1.mkv

所以只好去抓英文字幕來用…

mplayer 1.mkv -sub 1.eng.srt

很簡單就可以使用

加 subfont 之類的參數可以改動字型大小等等

mplayer 1.mkv -sub 1.eng.srt -subfont-text-scale 3

或是寫在 ~/.mplayer/config 之中也可以

Tags: , , ,

. 11 Aug 08 | Linux | Comments (0)

半瓶醋的 C++ 教學(第三章):程序員的內力與外功

很多人都曾經提出過這樣的比喻:程序員的功力之中,大致上可以分為內力以及外功。

Tags: ,

. 10 Jul 08 | C++ | Comment (1)

SVN 遠端協同作業

最近剛好有同學在問,隨手記一下,如果要將 code 上傳遠端工作站,與隊友協同作業時大概要怎麼做。首先要先登入遠端工作站,在上面開啟這個 project:

ssh batman@workstation
svnadmin create /home/batman/svn/paper_with_robin

再回到本機端 project 之下,將其 import 到遠端:

cd /home/batman/my_paper
svn import . svn+ssh://batman@workstation:/home/batman/svn/paper_with_robin

這樣 robin 就可以用以下指令 下載一份並與你協同作業了。

svn co svn+ssh://robin@workstation:/home/batman/svn/paper_with_robin

Tags: , ,

. 09 Jul 08 | Research | Comments (0)

Paper Writing

Non-native speaker 寫的 paper 常常很難懂。尤其是華人或是印度人寫的 paper,好像怕別人不知道他們數學很好一樣,往往沒頭沒腦的就丟一堆式子出來。

當然作為一篇 technical paper,go to detail 毫無疑問是重要的。但是應該要像 coding 的時候一樣,按照由上而下的層次先把整篇 paper、每個 section、每個 subsection 的 high-level concept 建立起來(如果能用圖就儘量用圖),最後再丟 detail 出來。可讀性最佳的 paper 應該是可以用三種方式閱讀:只看 abstract、以及圖表可以了解整篇 paper 主要的 idea 是什麼;只看文字部分,略過所有數學細節可以掌握演算法的大概;逐字逐式精讀,可以毫不模糊的正確實作出該篇 paper。

然後語感也是個問題,不過這就是非戰之罪了,誰教英文是國際語言。只不過台灣的理工科研究生英文平均水準實在不甚佳(有一大批英文不錯的可能已經先出國了)。實驗室如果夠有錢,投 paper 的時候如果能夠花點錢請 proficient English speaker 修一修,paper 上的機率應該至少可以增加 50% 吧。如果我是 reviewer,對於某些可讀性太差的 paper 真的會很想看都不看直接 reject。

Tags:

. 04 Jul 08 | Research | Comments (0)

rsync 用於遠端上傳與備份

雖然應該不少人知道,rsync 可以用在遠端工作站等等之上(那個 r 本來就是 remote 的意思),不過還是要推廣一下,不管跟 crontab 搭配作備份,或是拿來上傳下載東西都滿好用的。若要用於遠端站台,指令形如下式:

rsync -av –delete -e ssh Test/rsync/ a_user@a_workstation.csie.ntu.edu.tw:~/Test/rsync

站台後接冒號,與 scp 等相同,但與 svn 不同,我自己有時候會不小心忘掉。比較一下,svn 的 remote version 長這樣:

svn co svn+ssh://a_user@a_workstation.csie.ntu.edu.tw/svn/libmatting

-a 這參數似乎是個定番,查 man 查不出個所以然,寫得有些籠統…–delete 的意思是說如果有什麼檔案在 target 有卻沒出現在 source 中的就殺掉,如此可以作到呆呆拖拉法所作不到的真正的完全同步。算是 command line 環境優雅又強大的一個實例。

Tags: , , ,

. 19 Jun 08 | Linux | Comments (0)

Command Line Pizza Ordering Program

在 digg 上看到的,還滿有趣,放上來分享一下。

有 .deb 檔嗎?有的話還滿想裝一下的。 XD

Tags: , , ,

. 14 Jun 08 | Geek | Comments (0)