VoTT 利用VoTT標圖後產生的.json檔案讓python執行目標自動追蹤 === [TOC] ## 1.文件版本 ```gherkin= version = v0.0.1 若是目前版本的code與此文件差異過大,請回到以下release程式版本進行閱讀: NTUT_VoTT_2020_10_13_v0.0.1 ``` ![](https://i.imgur.com/SsKnUq7.png) ```gherkin= 注意若本地端程式有改請先使用git stash存下來 $ git reset --hard d78f7b001dcc174287c2fe5d0a73d036735ccf0c 還原程式,直接從遠端sync $ git pull --rebase 或 $ repo sync . 若是有數個專案資料夾都有修改,直接到專案上層 $ repo sync ``` ## 2.架構圖 ```gherkin= 依據架構圖,可分為兩大區塊 (1) 使用者使用VoTT標示工具後 VoTT會產生***-asset.json 和 for_python_path.log (2) 手動執行python vott_tracker.py 會追蹤目標1秒,並將追蹤後的資訊寫回VoTT存放josn位置 ``` ![](https://i.imgur.com/SQsLVW7.png) ## 3. vott 產生 for_python_path.log 讓python使用 ### (1) 利用log 抓取所需路徑 以下為內容範例,其做用是讀取影片相關路徑 file:VoTT/Drone_Project/Drone_Source/001/Drone_001.mp4#t=163.2,83bd1e1009a806d8e4f71e4c14db4604-asset.json 最後會取得下面三個路徑 ```gherkin= video_path: 讓python載入影片並使用opencv的tracker進行追蹤 ex: VoTT/Drone_Project/Drone_Source/001/Drone_001.mp4 target_path: python產生的json檔案存回的路徑 ex: VoTT/Drone_Project/Drone_Target/001/ json_file_path: 利用讀取VoTT產生的json檔案內容,來獲取位置、影片時間等相關資訊 ex: VoTT/Drone_Project/Drone_Target/001/83bd1e1009a806d8e4f71e4c14db4604-asset.json ``` ### (2) 讀取程式片段 注意以下的target_path(for_python_path.log path)必須固定在此位置 當執行python vott_tracker.py後 會到read_file_name_path(target_path) 函式去獲得"(1) 內容說明"的三個路徑 最後將處理好的路徑回傳 ![](https://i.imgur.com/R1X2p1m.png) 這邊必須注意,若是source與target不在同一層位置,並且各自下層的名稱不同,則會導致錯誤 ```gherkin= source path ex: VoTT/Drone_Project/Drone_Source/001 target path ex: VoTT/Drone_Project/Drone_Target/001 ``` ![](https://i.imgur.com/aBlDANO.png) ## 4. python 架構(尚未完成) vott_tracker.py 一共使用4個class如下 ```gherkin= read_vott_id_json as RVIJ : 讀取json檔案使用 write_vott_id_json as WVIJ : 寫入新的json檔案使用 cv_tracker as CVTR : OpenCV 追蹤器的使用與影片處理 log as PYM : 顯示並儲存log ``` 以下是各自的初始化程式片段 ![](https://i.imgur.com/gjCp42y.png) ## 讀取json(尚未完成) ## opencv追蹤器 目前使用的是CSRT測試過最穩定的演算法,若要變更可由下列帶入演算法 ![](https://i.imgur.com/om2FSNq.png) 追蹤器對應表,在cv_tracker.py內 ![](https://i.imgur.com/jT2MLpN.png) ## 影片不同fps,讀取bounding box處理方法 ### (1) 策略圖 目前的策略解說如下圖,即便來源影片與VoTT讀取時設定的fps不相同,也能取得最接近的bbox 下圖是python讀取影片過後得出為29fps,這樣與VoTT設定的fps不相同,但採用取分佈在29張裡對應的14張位置作法(注意取的張數必須從標示後開始算起)即可解決問題 ![](https://i.imgur.com/dSmiaw2.png) ### (2) 簡化程式片段 從簡化過的小程式片段觀察,以下為程式路徑 ```gherkin= VoTT/CVTRK/UBU18/doc_and_testcode/fix_bbox_shift_issue/ python strategy2_test.py ``` ![](https://i.imgur.com/uDDMrs8.png) 擷取出來的間隔區段與對應張數 ![](https://i.imgur.com/mkx25IC.png) ### (2) 實際程式片段 其實就是照搬簡化程式片段,也是使用迴圈數目符合哪個區段,則取出frame的bounding box ![](https://i.imgur.com/7dYxZy8.png) ## 寫回json(尚未完成) ### (1) 結構圖 此處為了不影響讀取frame的時間,將寫回json的部份都另開thread處理 ### (2) 程式片段 處理資料,準備要開啟thread ![](https://i.imgur.com/YUSBQnw.png) thread class ![](https://i.imgur.com/Vn2pFpE.png) ## log位置 若是有正確執行追蹤流程,結束後會在下列位址找到儲存的log VoTT/CVTRK/UBU18/log/log.txt ###### tags: `study`