10-8 萬物偵測功能範例教學
經過前面幾個章節的洗禮,您已經能熟練地切換各種專用的 AI 模型了。但如果今天您的客戶提出了一個特殊需求:「我想偵測畫面中的『背包』或『水杯』」,而官方剛好沒有提供這些專屬模型時,該怎麼辦呢?
本章節將帶您解鎖 :GenAI 萬物偵測 ( Everything Detection )! 這是一套具備「語意理解」能力的 AI 大腦。它與傳統物件偵測最大的差異在於: 您不需要重新訓練模型,只需要透過 API 傳入一段「文字 ( Text )」,AI 就會自動在畫面中把符合該文字描述的物件給框出來!
學習目標
透過本章節,您將學會:
1. 認識並載入結構更為複雜的 GenAI 模型檔案。
2. 不需更動 UI 介面,直接沿用 10-3 專案架構。
➤ 人形偵測模型可以回顧: 10-3 人形偵測功能範例教學
3. 掌握全新的 Prompt API: QDEEP_SET_OBJECT_DETECT_CUSTOM_SEARCH_TEXT,讓軟體具備零樣本學習的能力。
準備工作
這次的模型包與以往稍微不同,因為它結合了影像與語意辨識,所以檔案會比較多:
1. 將聰泰提供的 GENAI.DETECTION 模型壓縮檔並解壓縮。
2. 您會發現裡面有 4 個關鍵檔案:
• QDEEP.OD.GENAI.DETECTION.CFG
• QDEEP.OD.GENAI.DETECTION.WEIGHTS
• QDEEP.OD.GENAI.DETECTION.TXT.WEIGHTS
• QDEEP.OD.GENAI.DETECTION.BOX.WEIGHTS
3. 請務必將這 4 個檔案「全部」複製,貼到您 Qt 專案的建置輸出目錄下!缺少任何一個,AI 都會無法理解人類的文字。

核心 API 要怎麼改?
這一次,我們的 UI 介面完全不用修改,只要專注在程式碼的「神聖五大 API」中,安插一支全新的API 即可。
• 修改建立偵測器的設定: 在 QDEEP_CREATE_OBJECT_DETECT API 中,模型設定值請改為專屬的 QDEEP_OBJECT_DETECT_CONFIG_MODEL_GENAI_EVERYTHING_DETECTION。
• 認識全新 API : 自訂搜尋文字這支 API 就是我們與 AI 溝通的橋樑!我們必須在程式碼中告訴它「你要找什麼」。
‧ API 名稱 : QDEEP_SET_OBJECT_DETECT_CUSTOM_SEARCH_TEXT
‧ 關鍵參數 pszSearchText : 指定您想要偵測的物件名稱 (英文字串)。例如: "a glasses"、"a cup" 等。
QDEEP_CREATE_OBJECT_DETECT
這是建立 AI 引擎並載入大腦(模型)的最關鍵 API。使用者必須透過此 API 初始化偵測器。

QDEEP_SET_OBJECT_DETECT_CUSTOM_SEARCH_TEXT
QDEEP_OBJECT_DETECT_BOUNDING_BOX 結構體
因為我們是輸入文字讓 AI 自由發揮,AI 引擎不會有固定的分類字典。因此,回傳的結構體中 nClassID 將永遠是 0。


撰寫核心程式碼
請開啟您的 10-3 專案,我們來進行最核心的程式碼修改:
修改模型載入與加入文字提示
在 MainWindow::MainWindow(...) 的建構子 mainwindow.cpp中,找到建立偵測器的程式碼。換上上述提到的參數,並在它下方緊接著呼叫文字搜尋 API,我們這次要給 AI 一個有趣的挑戰——尋找畫面中的「眼鏡 (a glasses)」:

擴充類別名稱
接著前往 on_video_decoder_broadcast_client_callback 回呼函式。 既然 nClassID 永遠是 0,我們直接將陣列的標籤名稱,設定為我們剛剛寫在 API 裡的字串即可:

利用 OpenCV 畫出辨識結果

最終驗證
請按下左下角的「Build and RUN」執行專案:
1. 輸入攝影機網址並點擊 START RECEIVER 取得畫面。
2. 點擊 START DETECTION。您會看到 AI 準確地把畫面中的眼鏡給框了出來!

➤ 溫馨小叮嚀 ( 非常重要 ) : 在您第一次 開啟這支軟體 ( 執行程式 ) 的瞬間,介面可能會需要稍等一下才會顯示出來,請不要緊張!這是因為我們將「載入 AI 模型」的邏輯寫在了程式的建構子內。模型在首次執行時必須進行初始化配置,此時系統正努力將龐大的神經網路權重檔載入到 GPU 中。只要軟體成功開啟(首次載入完成),代表 AI 大腦已經在背景準備就緒!後續當您再次開啟軟體時,就不需要這個初始化的等待時間了!
這看起來跟 10-3 的「人形偵測」一模一樣對吧?但請您現在關閉程式,回到程式碼中進行以下修改:
1. 把 API 裡的字串改成外套: QDEEP_SET_OBJECT_DETECT_CUSTOM_SEARCH_TEXT(..., "a coat");
2. 重新編譯並執行!

您會發現,這個完全沒有經過您重新訓練的模型,竟然立刻改變了尋找的目標,準確地在畫面上框出了外套!
這就是影像 AI 領域最前沿的「 零樣本學習 ( Zero-Shot Learning ) 」技術。您的這套軟體現在已經不再受限於既有的類別字典,只要改一行程式碼,它就能辨識出世上的萬事萬物!