# 新爆量 Android
## 系統功能
1. 使用者開啟APP並拍照,魚尺可以放置在畫面任一平面上。
2. 將圖片送到事先預訓練好的AI模型,並進行魚尺位置辨識。
3. 辨識成功後將魚尺所在位置利用方框標示出來,並進行長寬測量。
4. 將圖片中的魚尺長寬與實際大小魚尺比例換算取得比例尺基準。
5. 進行魚長度測量。

## 版本控制
- [quapni_android_quapniruler_old](https://gitlab.com/quapni-outdoor/quapni_android_quapniruler_old) (v1.0.0): 第一版舊相機 + Flask API 二階段辨識
- [quapni_android_QuapniUnet](https://gitlab.com/quapni-outdoor/quapni_android_quapniunet): TFLite 模型離線預測卡片位置,單張圖片。
- [quapni_android_CardDetect](https://gitlab.com/quapni-outdoor/quapni_android_carddetect): TFLite 模型離線預測卡片位置,影像即時辨識。
- [quapni_android_CameraUnet](https://gitlab.com/quapni-outdoor/quapni_android_cameraunet) (v2.2.0): 整合 cameraTest+QuapniUnet,缺少第二階段辨識。
- [quapni_android_OpenCVImage](https://gitlab.com/quapni-outdoor/quapni_android_opencvimage): 整合 QuapniUnet + OpenCV 使用預測 massk 裁切影像
- [quapni_android_quapniruler_online](https://gitlab.com/quapni-outdoor/quapni_android_quapniruler_online) (v2.1.0): 整合 cameraTest 並採用 Python API 進行二階段預測,並取得比例尺。提供魚尺測量。
- [quapni_android_quapniruler_offline](https://gitlab.com/quapni-outdoor/quapni_android_quapniruler_offline) (v2.2.1): 修正相機+剪裁
> 僅有 Quapni 公司帳號有觀看權限
## 版本紀錄
### 🆕 發布測試版新爆量(v1.0.0)
- [APK安裝檔](https://drive.google.com/file/d/1IHxWHB3hsWzhmKPXQ5OSLB7aPdqpnv6c/view?usp=sharing)
<img src="https://i.imgur.com/O5GILKN.gif" width=250>
#### 測試結果
1. 由於相機程式版本太舊,導致目前新款大螢幕手機會有嚴重跑板問題。
2. 相機水平拍攝會自動翻轉螢幕(解決)
3. Layout 某些設備會跑版,以及照片尺寸被拉扯
4. 是否可以有離線預測的功能
5. 是否可以手動對焦
#### 後續評估
1. 相機重構->採用2021最新的cameraX寫法
2. 下一個版本優先處理相機問題,並增加手動對焦功能
---
### 🆕 解決 Camera 相容性問題(v2.1.0)
- [APK安裝檔](https://drive.google.com/file/d/1BpND8VBdnny03LWUUfo2F1dQgFlj53TL/view?usp=sharing)
<img src="https://i.imgur.com/7gAhQBN.gif" width=250>
使用開源相機套件 [JCameraView](https://github.com/LoveBabyForeve/JCameraView)
1. CameraView 匯入下載套件版本
2. cameraTest 自定義 library
#### 測試結果
1. 水平翻轉問題
---
### 🆕 離線辨識魚尺位置(v2.2.0)
- [APK安裝檔](https://drive.google.com/file/d/1mxJWu3py_sVn9IjAfyrEIEEyoNFLCNdo/view?usp=sharing)
<img src="https://i.imgur.com/IGGjYhm.gif" width=250>
#### 第一階段離線辨識
quapni_android_CameraUnet 採用 TensorFlow Unet 網路辨識魚尺位置並回傳位置遮罩。由於第一階段 AI 辨識可能會隨著背景被誤判,因此還會加入第二階段的 QUAPNI 字體辨識更精確的辨識卡片位置。另外支援 GPU 功能,有些高階手機若有GPU APP會要資源運算會更快。目前測試起來速度約693ms使用cpu4個執行緒執行。
#### 測試結果
1. 辨識一切正常
2. 若手機有多顆鏡頭會開啟第三顆廣角(需要解決)
---
### 二階段辨識整合測試(v2.3.0)
- [APK 安裝檔](https://drive.google.com/file/d/1kMm5xbqKf5yV7Lxuh7kSKC3IRtcLRyqF/view?usp=sharing)
- [GitLab: quapni_android_quapniruler_cameracropsift](https://gitlab.com/quapni-outdoor/quapni_android_quapniruler_cameracropsift)
<img src="https://imgur.com/9VWDb0e.gif" width=250>
#### 魚尺二階段辨識(離線版)
此版本使用新版相機拍照,並結合 AI 第一階段剪裁卡片將可能區塊裁切。並送入第二階段進行 QUAPNI 字體辨識。並將辨識到的字體繪製底線,同時計算影像中的比例尺長度。
#### 開發技術
- AI模型
- TensorFlow 2.3
- U-Net: Convolutional Networks for Image Segmentation
- TensorFlow Lite on Android device
- 裝置
- Android 平台
#### 功能
- 允許離線辨識
- 第一階段 AI 預測卡片位置
- 第二階段 QUAPNI 字體辨識
- 取得比例尺
#### 測試結果
1. 強光下會有辨識不到問題
- 執行總共 2351ms
- 載入模型 93ms
- AI 辨識 534ms
- 繪製 mask 315ms (這段上線時可省略)
- 剪裁卡片區域 53ms
- 第二階端辨識 1356ms
---
### 新爆量(離線版) v2.4.0
- [APK安裝檔](https://drive.google.com/file/d/1B_CmW_jrgT61dlnNjxw7h3P7D1q_K_IX/view?usp=sharing)
- [GitLab: quapni_android_quapniruler_offline](https://gitlab.com/quapni-outdoor/quapni_android_quapniruler_offline)
<img src="https://i.imgur.com/1QbvnwN.jpg" width=250>
## 功能
此版本為離線最終穩定版。
- 兩階段辨識(支援離線)
- 新版相機(支援手動對焦)
- 測量物體長度並儲存相片