Base on google ZXing opensource project