SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (ModusToolbox)
Loading...
Searching...
No Matches
ผลลัพธ์ registry และการ settle

Functions

bool ai_engine_snapshot (ai_result_t *out)
 คัดลอกผลลัพธ์ล่าสุดที่เผยแพร่ไว้; เป็นแบบ last-writer-wins — ใช้ไม่ได้ภายใน set
bool ai_engine_snapshot_model (uint32_t index, ai_result_t *out)
 ผลตัดสินล่าสุดของโมเดลหนึ่งตัว — เป็นตัวอ่านที่ต้องใช้ภายใน parallel set
uint32_t ai_engine_model_count (void)
 มีโมเดลลงทะเบียนไว้กี่ตัว; ค่านับนำหน้าแถวจริง
const ai_model_desc_tai_engine_model (uint32_t index)
 รายการใน registry คืน NULL หากอยู่นอกช่วง — และคืน NULL สำหรับดัชนีเทียมของ set
bool ai_engine_mic_settling (void)
 เป็น true ตราบใดที่ parallel set ยังเติมหน้าต่างข้อมูลไม่เต็ม; ผลตัดสินจะถูกระงับไว้
uint32_t ai_engine_mic_settle_pct (void)
 ความคืบหน้าของการ settle 0..100; มีความหมายเฉพาะภายใน set เท่านั้น (นอกนั้นได้ 100)

Detailed Description

ฟังก์ชัน 6 ตัว: ตัวอ่านผลลัพธ์ 2 ตัว (พร้อมเงื่อนไขว่าแต่ละตัวใช้ได้เมื่อใด) คู่ฟังก์ชันไล่รายการใน registry และค่าอ่านการ settle 2 ค่าที่ parallel set เปิดให้ใช้

variant ที่ใช้ได้
mtb-mpy และ mtb-only

Function Documentation

◆ ai_engine_snapshot()

bool ai_engine_snapshot ( ai_result_t * out)

คัดลอกผลลัพธ์ล่าสุดที่เผยแพร่ไว้; เป็นแบบ last-writer-wins — ใช้ไม่ได้ภายใน set

Copy the latest result. Returns false if nothing has been published yet.

ข้อกำหนดการเรียกใช้
คัดลอกผลลัพธ์ล่าสุดที่เผยแพร่ไว้; คืน false หากยังไม่มีการเผยแพร่ใด ๆ ฟังก์ชันนี้เป็นแบบ last-writer-wins จึง ใช้ไม่ได้ภายใน parallel set (ชุดโมเดลที่ป้อนข้อมูลขนานกัน) — "a cough detected at 0.94 is overwritten by three 'unlabelled' … The detection is not late, it is gone" (ai_engine.c:1876-1885) โค้ดที่ส่งมอบจริงแตกสาขาจากการที่ ai_engine_active() อยู่ในช่วง [AI_PARALLEL_FIRST, AI_PARALLEL_MIC] และในกรณีนั้นจะใช้ ai_engine_snapshot_model() ทีละสมาชิก; deepcraft_task.c:448-450 บันทึกไว้ว่าการทดสอบนี้เคยเป็น == AI_PARALLEL_MIC จนถึง 2026-08-09 ทำให้ Room Presence และ Intruder Watch ตกลงไปในช่องที่สาขานี้มีไว้เพื่อหลีกเลี่ยงพอดี ให้ย่อผลลัพธ์ด้วย ai_result_top_positive() — ai_result_t ไม่มีฟิลด์ valid/label/confidence (ข้อเท็จจริงเกี่ยวกับ header ที่เข้าใจผิดได้ง่าย)
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ที่มา
ยกมาจาก deepcraft_task.c:469 (MicroPython Q_RESULT) and page_edge_ai.c:1409 (UI) (คอมไพล์รวมอยู่ใน archive สำเร็จรูป ไม่ได้ส่งมอบมาเป็นซอร์ส)

◆ ai_engine_snapshot_model()

bool ai_engine_snapshot_model ( uint32_t index,
ai_result_t * out )

ผลตัดสินล่าสุดของโมเดลหนึ่งตัว — เป็นตัวอ่านที่ต้องใช้ภายใน parallel set

One model's last verdict. Use this, not ai_engine_snapshot(), whenever several models may be publishing: that one reports whoever wrote most recently, so three quiet models can bury a detection before it is read. False if that model has never published.

ข้อกำหนดการเรียกใช้
ผลตัดสินล่าสุดของโมเดลหนึ่งตัว ให้ใช้ฟังก์ชันนี้เมื่ออยู่ใน set การคืน false หมายถึง "โมเดลตัวนี้ไม่เคยเผยแพร่ผลเลย" ซึ่งไม่เหมือนกับ "เงียบอยู่" (สมาชิกที่เคยเผยแพร่ครั้งหนึ่งแล้วเงียบไปยังคืนค่า true พร้อม seq ที่ค้างเก่า; หน้านี้สร้างตัวจับเวลาความเงียบรายแถวขึ้นจากความเก่าของ seq, page_edge_ai.c:728-739) index ต้องเป็นดัชนีใน registry จริง ๆ ห้ามเป็นดัชนีเทียมของ set — ให้เอารายชื่อสมาชิกมาจาก ai_engine_set_members() (set ที่ active อยู่) หรือ ai_engine_set_models() (set ใด ๆ)
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ที่มา
ยกมาจาก page_edge_ai.c:717-723; deepcraft_task.c:455-467 (คอมไพล์รวมอยู่ใน archive สำเร็จรูป ไม่ได้ส่งมอบมาเป็นซอร์ส)

◆ ai_engine_model_count()

uint32_t ai_engine_model_count ( void )

มีโมเดลลงทะเบียนไว้กี่ตัว; ค่านับนำหน้าแถวจริง

ข้อกำหนดการเรียกใช้
มีโมเดลลงทะเบียนไว้กี่ตัว (ทั้งที่คอมไพล์มาและแถวที่ staged เข้ามา) ค่านับนำหน้าแถวจริง: ai_engine_model(i) เมื่อ i < count ยังอาจคืน NULL ได้ (ช่องโหว่ของตัวคลี่หา) — ให้ continue ห้ามยกเลิกการไล่รายการทั้งหมด
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ที่มา
ยกมาจาก page_edge_ai.c:1021-1026 (คอมไพล์รวมอยู่ใน archive สำเร็จรูป ไม่ได้ส่งมอบมาเป็นซอร์ส)

◆ ai_engine_model()

const ai_model_desc_t * ai_engine_model ( uint32_t index)

รายการใน registry คืน NULL หากอยู่นอกช่วง — และคืน NULL สำหรับดัชนีเทียมของ set

Registry entry (NULL if out of range).

ข้อกำหนดการเรียกใช้
รายการใน registry คืน NULL หากอยู่นอกช่วง — และ คืน NULL สำหรับดัชนีเทียมของ set ให้แตกสาขาด้วย idx >= AI_PARALLEL_FIRST ก่อน แล้วไล่สมาชิกของ set นั้นด้วย ai_engine_set_models() ก่อนจะไปแตะ descriptor ใด ๆ descriptor และสตริงที่มันชี้ไปยังคงใช้ได้ตลอดรอบการบูต (slot ไม่ถูกนำกลับมาใช้ซ้ำ) ข้อกำหนดของ registry: class_labels[0] คือคลาสเชิงลบ ส่วนตั้งแต่ 1 ขึ้นไปคือการตรวจพบเชิงบวก
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ที่มา
ยกมาจาก deepcraft_task.c:244-270 (dc_desired_sensor_rate) (คอมไพล์รวมอยู่ใน archive สำเร็จรูป ไม่ได้ส่งมอบมาเป็นซอร์ส)

◆ ai_engine_mic_settling()

bool ai_engine_mic_settling ( void )

เป็น true ตราบใดที่ parallel set ยังเติมหน้าต่างข้อมูลไม่เต็ม; ผลตัดสินจะถูกระงับไว้

True while the parallel set is still filling its windows. Verdicts are withheld until then; show it rather than four silent zero bars.

ข้อกำหนดการเรียกใช้
เป็น true ตราบใดที่ parallel set ยังเติมหน้าต่างข้อมูล (window) ของตัวเองไม่เต็ม; ผลตัดสินจะถูกระงับไว้จนกว่าจะถึงตอนนั้น ให้แสดงความคืบหน้าแทนแถบศูนย์ที่เงียบสี่แถบ — และ ต้องให้บรรทัดสถิติอัปเดตต่อไประหว่างการ settle มิฉะนั้นการที่ NPU หยุดนิ่งอยู่ภายในหน้าต่างข้อมูลจะมองไม่เห็น (page_edge_ai.c:702-705) ค่านี้อิงกับการที่ s_current อยู่ในช่วง [AI_PARALLEL_FIRST, AI_PARALLEL_MIC] (ai_engine.c:1968-1976); นอก set จะได้ false
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ที่มา
ยกมาจาก page_edge_ai.c:685-708 (คอมไพล์รวมอยู่ใน archive สำเร็จรูป ไม่ได้ส่งมอบมาเป็นซอร์ส)

◆ ai_engine_mic_settle_pct()

uint32_t ai_engine_mic_settle_pct ( void )

ความคืบหน้าของการ settle 0..100; มีความหมายเฉพาะภายใน set เท่านั้น (นอกนั้นได้ 100)

Settle progress, 0..100, for a caller that wants to show it moving.

ข้อกำหนดการเรียกใช้
ความคืบหน้าของการ settle 0..100 สำหรับผู้เรียกที่ต้องการแสดงให้เห็นว่ามันขยับ มีความหมายเฉพาะภายใน set เท่านั้น; นอกนั้นคืนค่า 100 (ai_engine.c:1955-1966) หน้านี้เขียนป้ายกำกับเฉพาะเมื่อค่าเปลี่ยนไปเท่านั้น เพื่อเลี่ยงงาน LVGL ที่ซ้ำซ้อน
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ที่มา
ยกมาจาก page_edge_ai.c:691-700 (คอมไพล์รวมอยู่ใน archive สำเร็จรูป ไม่ได้ส่งมอบมาเป็นซอร์ส)