大膽猜想:Labelme的AI多邊形(AI-Polygon)功能是怎麼實現的?
百度一下,有關AI-Polygon的詞條大多是使用教程,卻很少有人挖掘其背後的原理。在開發自己的標註軟件過程中,我設想出一個接近原版的開發邏輯:
1,加一個按鈕(名稱為AI多邊形),點擊開啓AI-Polygon功能,同時關閉其他所有鼠標操作會觸發的功能
2,跳出選項框,供用户選擇模型,用户選擇後選項框關閉,並記錄用户的選擇作為flag
3,用户用左或右鍵點擊畫布,創建一個點,並且根據左或右鍵,設置該點的status值(左為1,右為0)
4,獲取該點座標、flag、status,存到一個字典裏(還可根據軟件用途擴展功能,例如記錄當前圖片名稱等等)
5,調用API,API接收字典,完成模型推理,並返回一個列表,組成是:((點座標),(點座標)……),分割列表得到接下來要畫的圖形邊框上多個點的座標
6,根據API返回點的座標,畫出圖形,圖形繪製邏輯見附錄1
7,若用户繼續點擊畫布,則重複步驟3-6(稱為一個輪迴),並且在再次執行完步驟5之後,先清除上一個輪迴畫出的圖形(注意!在點擊AI多邊形按鈕之前畫布上原有的圖形不要清除),再執行該輪迴的步驟6
8,若用户再次點擊“AI多邊形”按鈕,則結束功能,保留最後一次繪製的圖形
附錄:
1, 圖形繪製流程:
a.監聽鼠標(鼠標按下、移動、釋放等)
b.對象的創建和標籤設置
c.對象的同步(隨圖像縮放和移動)
d.對象的加載和導出
e.對象的編輯支持
f.對象的清除功能
g.對象的特殊功能:如旋轉框(RotatedRect)