# TensorFlow.js
###### tags: `TensorFlow.js`
### Sample Code [link](https://drive.google.com/file/d/1E95N-YtT6bQIVED1pm5rz2610g79nobV/view?usp=sharing)
### 1: TensorFlow.js 簡介
TensorFlow.js 是 TensorFlow 的 JavaScript 版本,支持 GPU 硬體加速,可以執行在 Node.js 或瀏覽器環境中。不但支援完全基於 JavaScript 從頭開發、訓練和部署模型,也可以用來運行已有的 Python 版 TensorFlow 模型,或者基於現有的模型進行繼續訓練。在 Node.js 環境中,如果有 CUDA 環境支援,或者在瀏覽器環境中,有 WebGL 環境支援,那麼 TensorFlow.js 可以使用硬體進行加速。
TensorFlow.js 可以讓我們直接在瀏覽器中載入 TensorFlow,讓用戶立即透過自己的 CPU/GPU 資源進行我們所需要的機器學習運算,更靈活地進行 AI 應用的開發。
瀏覽器中進行機器學習,相對比與伺服器端來講,將擁有以下四大優勢:
- 不需要安裝軟體或驅動程式(打開瀏覽器即可使用)
- 可以透過瀏覽器進行更加方便的人機互動
- 可以透過手機瀏覽器,呼叫手機硬體的各種感測器(如:GPS、電子羅盤、加速度傳感器、相機等
- 用戶的資料不需要上傳到伺服器,在本機端即可完成所需操作
### 2: TensorFlow.js環境配置
在瀏覽器中載入 TensorFlow.js ,最方便的方法是在 HTML 中直接引用 TensorFlow.js 發布的 NPM 包中已經打包安裝好的 JavaScript 程式碼。
`<!-- TensorFlow.js Core -->`
`<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"></script>`
伺服器端使用 JavaScript ,首先需要按照 NodeJS.org 官網的說明,完成安裝最新版本的 Node.js 。然後,完成以下四個步驟即可完成配置:
(1).確認 Node.js 版本(v10 或更新的版本)
```javascript
$ node --version
v 10.5.0
$ npm --version
6.4.1
```
(2).建立 TensorFlow.js 項目目錄
```javascript
$ mkdir tfjs
$ cd tfjs
```
(3).安裝 TensorFlow.js
```javascript
# 初始化項目管理文件 package.json
$ npm init -y
# 安裝 tfjs 函式庫,純 JavaScript 版本
$ npm install @tensorflow/tfjs
# 安裝 tfjs-node 函式庫,C Binding 版本
$ npm install @tensorflow/tfjs-node
# 安裝 tfjs-node-gpu 函式庫,支援 CUDA GPU 加速
$ npm install @tensorflow/tfjs-node-gpu
```
(4).確認 Node.js 和 TensorFlow.js 工作正常
```javascript
$ node
> require('@tensorflow/tfjs').version
{
'tfjs-core': '1.3.1',
'tfjs-data': '1.3.1',
'tfjs-layers': '1.3.1',
'tfjs-converter': '1.3.1',
tfjs: '1.3.1'
}
```
如果你看到了上面的==tfjs-core==, ==tfjs-data==, ==tfjs-layers== 和 ==tfjs-converter== 的輸出資訊,那麼就說明環境配置沒有問題了。
### 3: TensorFlow.js 模型部署
於瀏覽器加載AI模型。一般 TensorFlow 的模型,會被存儲為 SavedModel 格式。這也是 Google 目前推薦的模型保存最佳方式。SavedModel 格式可以通過 tensorflowjs-converter 轉換器轉換為可以直接被 TensorFlow.js 載入的格式,在 JavaScript 語言中進行使用。
- 安裝 ==tensorflowjs_converter==
```javascript
$ pip install tensorflowjs
tensorflowjs_converter 的使用細節,可以透過--help參數查看程式指令:
$ tensorflowjs_converter --help
```
- 轉換 SavedModel
```javascript
tensorflowjs_converter --input_format=keras model_path/model.h5 save_path/tfjs_target
tensorflowjs_converter --input_format=keras PoseNet_yolo_tiny_v2_ep312_config.h5 PoseNetV2_tiny
tensorflowjs_converter --input_format=keras python/rakuten_yolo_tiny_ep499_config.h5 python/rakuten_tiny
```
- 轉換完成後的模型,轉換成兩文件
==model.json==:模型架構
==group1-shard*of*==:模型參數
### 4: 於瀏覽器上使用AI模型進行任務
查看sample code,包含detection以及classification的sample範例,利用vscode搭配http-server,再透過ngrok來轉https網址以提供任何硬體使用。
- https://marketplace.visualstudio.com/items?itemName=philnash.ngrok-for-vscode
### 參考資料
- https://www.youtube.com/watch?v=EoYfa6mYOG4
- https://deeplizard.com/learn/video/HEQDRWMK6yY
- https://tf.wiki/zh_hant/deployment/javascript.html