顯示具有 Adobe Alchemy 標籤的文章。 顯示所有文章
顯示具有 Adobe Alchemy 標籤的文章。 顯示所有文章

2012年9月12日 星期三

[教學] 原生OpenCV 編譯C++ 成SWC 庫

研究Augmented Reality 的朋友, 相信對OpenCV (Open Source Computer Vision Library) 有一定認識. 她是由英特爾(Intel) 公司發起並參與開發, 以BSD 許可證授權發行, 可以在商業和研究領域中免費使用. 我們可用於開發實時的圖像處理, 計算機視覺以及模式識別程序.

wouter 編譯的OpenCV SWC 庫, 能透過讀取Cascade XML檔案辨認不同物件

現在為大家介紹如何在MAC OS X 中, 透過Adobe Alchemy (安裝參考) 編譯原生OpenCV:
  1. 我們到bonext 下載已整理的OpenCV 包. (OpenCV2.2.0 版本)
  2. 把bonext 解壓並存於/Library/bonext/ 路徑上.
  3. 在Terminal 中, 分別進入以下五個路徑:
    cd /Library/bonext/src/opencv/calib3d/
    cd /Library/bonext/src/opencv/contrib/
    cd /Library/bonext/src/opencv/core/
    cd /Library/bonext/src/opencv/imgproc/
    cd /Library/bonext/src/opencv/objdetect/

    並在每個路徑請輸入以下指命進行編譯:
    repo_root=/Library/bonext/;
    alc-on; rm -rdf log ; rm -f *.o; mkdir log ; for src in *.cpp ; do g++ -I$repo_root/include -DOSX -c -Wall -O3 -o ${PWD##*/}_`basename $src .cpp`.o $src 2> `basename $src .cpp`.log ; done ; mv -v *.log ./log ; alc-off; for f in ./log/*.log ; do grep 'error' $f ; done | cat | sort -u > ./log/errors.log ; less ./log/errors.log
  4. 若編譯正確, 會在每一個路徑找到多個.o 檔案. 把它們移至/Library/bonext/flash/ 路徑上.
  5. 根據bonext 者作提示, 我們需要刪除core_system.o 檔案.
  6. 最後, 在/Library/bonext/flash/ 路徑, 輸入以下指命編譯成.swc 檔案:
    rm *achacks* *.swc ; alc-on; g++ -swc -Wall -O3 -DOSX -I../include -o camlib.swc *.o camlib.cpp ; alc-off;
我們透過Adobe Alchermy 成功產生swc 元件, 在Flash Builder 設定swc 路徑後, 便可以使用:
package
{
  import flash.display.Sprite;
  import cmodule.camlib.CLibInit;
  
  public class Bonext_WebCam extends Sprite
  {
    private var lib:Object;
    ...
    public function setupCLib():void
    {
      ...
      // <----- create a library instance from swc
      var loader:CLibInit = new CLibInit;
      lib = loader.init();
      ...
    }
    ...
    public function enterFrameHandler(event:Event):void
    {
      ...
      // <----- call a method from swc
      var outPixels:ByteArray = lib.setFramePtr(pixels,pixels.length);
      ...
    }
    ...
  }
}

在bonext 的作者純粹示範呼叫OpenCV 使影像變成灰色. 當然我們可以修改camlib.cpp 檔案, 加入相對的函數給Action Script 調用, 發揮OpenCV 的強大功能. 大家可以 [下載] 範例試試看.

2012年8月30日 星期四

[教學] 安裝Adobe Alchemy 在MAC OS X

Adobe 在2009 年的研究項目中, 曾經被喻為劃時代的Adobe Alchemy, 開發者以C/C++ 編寫核心, 給ActionScript 調用, 達至加速效果. 回到今天運作平台分裂嚴重, 對我們現在Windows, MAC, Android 及iOS 同樣可以分享, 當年這個技術實在意義重大.

Adobe Alchemy 基於LLVM 技術運行

現在為大家說明如何在MAC OS X 環境中, 運用Adobe Alchemy 編譯C/C++ 語言, 包裝給ActionScript 調用.

必須有以下的準備:

安裝步聚:
  1. 把Flash Builder 內的SDK bin 目錄設定為MAC OS X 的PATH 環境變數(PATH Environment Variables)
     - 打開.bash_profile 檔案, 在Terminal 輸入:
          touch ~/.bash_profile; open ~/.bash_profile
     - 在TextEdit 中, 把空白的.bash_profile 檔案更改成:
         (請把Adobe Flash Builder 4.6/4.6.0_AIR3.4 更改成正確路徑)
          PATH="$PATH:/Applications/Adobe Flash Builder 4.6/sdks/4.6.0_AIR3.4/bin"
          export PATH

     - 在TextEdit 中把.bash_profile 檔案儲存(Command+S)
     - 然後在Terminal 輸入:
          source ~/.bash_profile
    - 關閉Terminal (Command+Q)
  2. 測試是否設定正確, 重新開啟Terminal, 然後輸入:
      adt -version
    若步聚正確, 會顯示SDK 版本代號"3.4.0.3010"
  3. 把下載的Alchemy Toolkit Package 解壓存放於/Library/alchemy/
  4. 把游漂移至alchemy 目錄內, 在Terminal 輸入:
      cd /Library/alchemy
  5. 執行alchemy 目錄內的config, 在Terminal 輸入:
      ./config
  6. 在PATH 環境變數加入alchemy 相關資料:
     - 再次打開.bash_profile 檔案, 在Terminal 輸入:
          touch ~/.bash_profile; open ~/.bash_profile
     - 在TextEdit 中, 把.bash_profile 檔案更改成:
         source "/Library/alchemy/alchemy-setup"
         PATH="$PATH:/Applications/Adobe Flash Builder 4.6/sdks/4.6.0_AIR3.4/bin"
         PATH="$PATH:/Library/alchemy/achacks"
         export PATH

     - 在TextEdit 中把.bash_profile 檔案儲存(Command+S)
     - 然後在Terminal 輸入:
          source ~/.bash_profile
     - 關閉Terminal (Command+Q)
  7. 重新開啟Terminal, 分別輸入:
      alc-on

      gcc
    以上兩個指令, 不會出現"command not found" 錯誤訊息, 代表設定完成

範例編譯:

  1. 把游漂移至alchemy/samples/stringecho/ 目錄內, 在Terminal 輸入:
      cd /Library/alchemy/samples/stringecho/
  2. 在Terminal 輸入:
      alc-on; which gcc
    以上指令會顯示出gcc 路徑"/Library/alchemy/achacks/gcc"
  3. 把c 語言編譯成swc 元件, 在Terminal 輸入:
      gcc stringecho.c -O3 -Wall -swc -o stringecho.swc
  4. 若元件正確產生, 在Terminal 會顯示以下訊息: (若發生錯誤, 請看編譯錯誤修正)
    1911.achacks.swf, 259831 bytes written
    frame rate: 60
    frame count: 1
    69 : 4
    72 : 259761
    76 : 33
    1 : 0
    0 : 0
    frame rate: 24
    frame count: 1
    69 : 4
    77 : 506
    64 : 31
    63 : 16
    65 : 4
    9 : 3
    41 : 26
    82 : 471
    1 : 0
    0 : 0
      adding: catalog.xml (deflated 75%)
      adding: library.swf (deflated 70%)

編譯錯誤修正:

修正一
  • 若在編譯時, 出現以下錯誤:
    Array @ARGV missing the @ in argument 1 of shift() at /Library/alchemy/achacks/gcc line 218.
    我們需以在/Library/alchemy/achacks 的gcc 檔案的218 行, 加入"@"字元, 請更改成:
    { $path = shift(@ARGV) }

修正二
  • 若在編譯時, 出現以下錯誤:
    dyld: Library not loaded: /usr/lib/libltdl.3.dylib
      Referenced from: /Library/alchemy/bin/llvm-gcc
      Reason: image not found

    我們需要把游漂移至/usr/lib/ 目錄內, 在Terminal 輸入:
      cd /usr/lib/
    然後再在Terminal 輸入:
      sudo ln -s libltdl.7.dylib libltdl.3.dylib

使用swc 元件:

我們透過Adobe Alchermy 成功產生swc 元件, 在Flash Builder 設定swc 路徑後, 便可以使用:
package
{
  import flash.display.Sprite;
  import cmodule.stringecho.CLibInit;
  
  public class stringecho_mobile extends Sprite
  {
    public function stringecho_mobile()
    {
      var loader:CLibInit = new CLibInit;
      var lib:Object = loader.init();
      trace(lib.echo("foo"));
    }
  }
}

大家若在Windows 環境下安裝Alchemy, 請參考這個連結, 安裝原理與MAC 很相近.

Alchermy 安裝參考:
http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Getting_Started
更改PATH 環境變數參考:
http://hathaway.cc/2008/06/how-to-edit-your-path-environment-variables-on-mac-os-x/
編譯錯誤修正參考:
http://forums.adobe.com/message/3892045

2012年8月22日 星期三

Box2D Flash Alchemy Port 介紹

Box2D 是一個很出名的2D 物理引擎, 有C++, Java, ActionScript 等版本. 我們在開發Adobe AIR 或Flash 程式時, 除了選擇ActionScript 版本, 還可以使用Box2D Flash Alchemy Port 版本. 這是一個經由Adobe Alchemy 編譯的C++ 源生程式庫, 若要求極高計算效能時, 它是一個好選擇.



請按 [觀看] 示範

請按 [觀看] 示範

由於World Construction Kit 是透過傳統Flash IDE 建立物理世界, 在Android 或iOS 渲染速度會很慢. 我們必須使用Stage3D 硬體加速顯示, 利用Starling Framework 等引擎作為顯示框架.

2012年7月24日 星期二

Away3d 與 AwayPhysics

AwayPhysics 是一個高效能的3D 物理引擊. 我們可以配合Away3d 製作出色的遊戲和軟件, 透過Adobe AIR 發佈於多數電腦或移動裝置 (Android / iOS) 中運行.

請按 [觀看] 範例

由於AwayPhysics 是一個由Alchemy 編譯成的SWC 元件, 它可能利用ApplicationDomain.domainMemory 進行域內存操作, 使其運作效能大大提升. 若配合Away3d 一同使用, 我們必須考慮Adobe 較早前宣布的高級功能許可證 (Premium Features License), 這個限制為開發人員帶來一點麻煩.

作者把官方範例改為以Away3d 4.0 Gold 版本, 大家可以 [下載] 範例試試看.