{
  "schemaVersion": "1.0",
  "version": "2026-09-12",
  "canonical": "https://aiinfra.tw/guides/heat-sink-ai-inspection/",
  "scope": "公開案例拆解與編輯選型方法；不是本站實測、設備採購清單或驗收認證。",
  "evidenceType": "editorial_selection_and_unmeasured_template",
  "sources": [
    {
      "id": "case",
      "label": "研華：台灣散熱片工廠歷史案例（2020-03-16）",
      "url": "https://www.advantech.com/en-au/resources/case-study/deploying-ai-inspection-for-heat-sink-factory",
      "kind": "supplier_case",
      "publishedAt": "2020-03-16",
      "checkedAt": "2026-09-12"
    },
    {
      "id": "lighting",
      "label": "Cognex：機器視覺照明與濾鏡",
      "url": "https://www.cognex.cn/en/tools-and-resources/resource-center/machine-vision/the-importance-of-lighting",
      "kind": "official_method",
      "publishedAt": null,
      "checkedAt": "2026-09-12"
    },
    {
      "id": "vision",
      "label": "Cognex：規則式視覺與 AI 視覺的分工",
      "url": "https://www.cognex.cn/en/tools-and-resources/resource-center/machine-vision/rule-based-vs-ai-powered-machine-vision",
      "kind": "official_method",
      "publishedAt": null,
      "checkedAt": "2026-09-12"
    },
    {
      "id": "trigger",
      "label": "Basler：影像觸發與機型限制",
      "url": "https://docs.baslerweb.com/triggered-image-acquisition",
      "kind": "official_documentation",
      "publishedAt": null,
      "checkedAt": "2026-09-12"
    },
    {
      "id": "timing",
      "label": "Basler：曝光、讀出與傳輸時序",
      "url": "https://docs.baslerweb.com/acquisition-timing-information",
      "kind": "official_documentation",
      "publishedAt": null,
      "checkedAt": "2026-09-12"
    },
    {
      "id": "camera",
      "label": "NVIDIA：Jetson CSI／USB 相機入門",
      "url": "https://developer.nvidia.com/embedded/learn/tutorials/first-picture-csi-usb-camera",
      "kind": "official_tutorial",
      "publishedAt": null,
      "checkedAt": "2026-09-12"
    },
    {
      "id": "method",
      "label": "本站：選型與驗收方法、假設及推導",
      "url": "https://aiinfra.tw/guides/heat-sink-ai-inspection/",
      "kind": "editorial_method",
      "publishedAt": "2026-09-12",
      "checkedAt": "2026-09-12"
    }
  ],
  "selection": [
    {
      "id": "defect",
      "layer": "1. 缺陷與取樣",
      "question": "什麼算不良？最小瑕疵多大？",
      "decision": "先限一種零件、一個表面與可判定的缺陷；尺寸量測和外觀分類分開，先留人工判定基線。",
      "proof": "樣本編號、缺陷類型／尺寸、人工標註規則、批次；同一件的不同照片不得跨訓練與驗收集。",
      "sources": [
        "vision",
        "method"
      ]
    },
    {
      "id": "light",
      "layer": "2. 光源與鏡頭",
      "question": "刮痕與正常反光能否穩定分開？",
      "decision": "在固定距離與治具下比較低角度暗場、漫射等成像候選；先改善可見度，再談模型或 GPU。沒有通吃金屬表面的光法。",
      "proof": "同一件良品／瑕疵品在不同姿態的原圖；保存光源角度、亮度、鏡頭、工作距離、曝光與環境光。",
      "sources": [
        "lighting",
        "method"
      ]
    },
    {
      "id": "sampling",
      "layer": "3. 相機解析度",
      "question": "視野內最小瑕疵占幾個像素？",
      "decision": "由視野與最小特徵反推水平取樣，再實拍確認對比、焦深與邊緣清晰度；像素數不是辨識成功率。",
      "proof": "視野 mm、最小特徵 mm、影像寬高、鏡頭與失焦邊界；標出裁切／縮圖後模型真正收到的像素。",
      "sources": [
        "method"
      ]
    },
    {
      "id": "exposure",
      "layer": "4. 曝光與觸發",
      "question": "移動時拖影？零件與影像對得上？",
      "decision": "由速度與允許拖影估曝光上限；依指定相機確認硬體觸發能力。全域快門也不能消除曝光期間的移動。",
      "proof": "速度、曝光、觸發／收圖計數、時間戳、零件 ID；分開曝光開始延遲、讀出、傳輸與處理。",
      "sources": [
        "trigger",
        "timing",
        "method"
      ]
    },
    {
      "id": "interface",
      "layer": "5. 介面與頻寬",
      "question": "多相機同時拍，主機是否接得住？",
      "decision": "依寬高、傳輸位元格式、幀率與相機數估原始 payload；再查實際 USB／GigE／擷取卡與共享上行，不把接頭相同當 SDK 相容。",
      "proof": "相機型號、SDK、CPU 架構、OS、驅動、線長、封包／掉幀與同時擷取紀錄；Jetson 入門範例不等於工業相機認證。",
      "sources": [
        "camera",
        "timing",
        "method"
      ]
    },
    {
      "id": "compute",
      "layer": "6. Edge 運算",
      "question": "瓶頸真的是 AI 推論嗎？",
      "decision": "先量既有 CPU／規則式方法與小模型基線，再比較 x86＋GPU 或 Jetson。保留相機 SDK 相容性、記憶體及全流程延遲證據，不只比 TOPS。",
      "proof": "擷取、前處理、推論、後處理、紀錄的分段 trace；完整節拍、p95 與超時筆數，模型／runtime／功耗模式版本。",
      "sources": [
        "vision",
        "camera",
        "method"
      ]
    },
    {
      "id": "control",
      "layer": "7. 控制與複判",
      "question": "不確定、逾時或斷線時怎麼處理？",
      "decision": "先做只記錄、不驅動設備的影子測試；每件輸出 OK、NG 或待複判。正式接控制器前，另定交握與獨立安全責任。",
      "proof": "零件 ID、結果、模型版本、時限、待複判去向；AI 不直接取代急停、安全 PLC、護欄或設備風險評估。",
      "sources": [
        "method"
      ]
    },
    {
      "id": "operations",
      "layer": "8. 儲存與維運",
      "question": "留多少影像？長時間運行仍穩定嗎？",
      "decision": "分開全量原圖、NG／待複判留存與抽樣良品；確認 SSD 寫入、保留期、散熱、環境及可回復版本。",
      "proof": "每班資料量、壓縮方法、刪除規則、溫度／降頻／掉幀、斷電後紀錄完整性及回復演練。",
      "sources": [
        "method"
      ]
    }
  ],
  "hypotheticalExample": {
    "evidenceType": "hypothetical_calculation_not_measurement",
    "inputs": {
      "fovWidthMm": 120,
      "minFeatureMm": 0.2,
      "pixelsPerFeature": 4,
      "widthPx": 2400,
      "heightPx": 2000,
      "bitsPerPixel": 8,
      "framesPerSecond": 10,
      "cameras": 2,
      "speedMmPerSecond": 200,
      "maxBlurPx": 1,
      "retentionHours": 8
    },
    "assumptions": [
      "所有輸入都是教學假設，與研華歷史案例沒有數值對應。",
      "4 px／特徵及 1 px 拖影是示範假設，不是通用驗收門檻。",
      "速度沿影像水平視野方向，固定比例；未含透視、震動、畸變與焦深。",
      "兩台相同 8-bit 單色相機，10 fps 持續傳原圖；不是每秒 10 件的產線承諾。",
      "MB／TB 採十進位；不含協定、重傳、封裝、檔案與保留空間，未假設壓縮。"
    ],
    "results": {
      "minWidthPx": 2400,
      "mmPerPixel": 0.05,
      "maxExposureMs": 0.25,
      "payloadMBps": 96,
      "rawStorageTB": 2.7648
    }
  },
  "acceptance": [
    {
      "id": "run_scope",
      "label": "批次與適用範圍",
      "unit": "text",
      "definition": "記錄 run ID、零件料號／批次、檢查面、環境及時間窗。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "defect_rule",
      "label": "良／不良判定規則",
      "unit": "text",
      "definition": "每類缺陷的尺寸／位置與人工標註規則；保留未知標籤，不強制補成良品。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "dataset_split",
      "label": "資料切分",
      "unit": "text",
      "definition": "訓練、調參及留出驗收集分開；同一零件全部視角歸同一集，按批次檢查資料洩漏。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "version_bundle",
      "label": "固定版本",
      "unit": "text",
      "definition": "相機／鏡頭／光源／曝光／SDK／OS／模型／前後處理／判定門檻；結果需能對回原圖。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "submitted_parts",
      "label": "送檢零件總數",
      "unit": "件",
      "definition": "每個唯一零件 ID 計一次，不把多視角或重拍算成新件。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "output_ok",
      "label": "輸出 OK",
      "unit": "件",
      "definition": "全部送檢件中最終自動判為 OK 的件數，不代表真實良品。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "output_ng",
      "label": "輸出 NG",
      "unit": "件",
      "definition": "全部送檢件中最終自動判為 NG 的件數，不代表真實不良。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "output_review",
      "label": "待複判／無結果",
      "unit": "件",
      "definition": "全部送檢件中不確定、缺圖、逾時而未判定的件數；必須明列，不能刪掉。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "output_reconciliation",
      "label": "件數對帳",
      "unit": "text",
      "definition": "送檢總數 = 輸出 OK + 輸出 NG + 待複判；三者互斥，人工複判結果另欄保留。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "labeled_ng",
      "label": "已標註真實 NG",
      "unit": "件",
      "definition": "驗收集內真實不良件數；與全部送檢件數分開，不含未知標籤。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "ng_to_ok",
      "label": "漏放數",
      "unit": "件",
      "definition": "真實 NG 卻自動輸出 OK 的件數；待複判不算 OK，也不能從分母消失。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "false_accept_rate",
      "label": "漏放率",
      "unit": "%",
      "definition": "漏放數 / 已標註真實 NG × 100%；分母為 0 或未知就不可得，不填 0%。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "labeled_ok",
      "label": "已標註真實 OK",
      "unit": "件",
      "definition": "驗收集內真實良品件數；不含未知標籤。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "ok_to_ng",
      "label": "誤剔數",
      "unit": "件",
      "definition": "真實 OK 卻自動輸出 NG 的件數；與人工複判後淘汰分開。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "false_reject_rate",
      "label": "誤剔率",
      "unit": "%",
      "definition": "誤剔數 / 已標註真實 OK × 100%；分母為 0 或未知就不可得。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "review_rate",
      "label": "待複判率",
      "unit": "%",
      "definition": "待複判／無結果件數 / 全部送檢件數 × 100%；不能靠把所有件轉人工來宣稱系統有效。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "capture_counts",
      "label": "觸發與收圖對帳",
      "unit": "text",
      "definition": "各相機分別記預期觸發、收到影格、缺圖／重複圖；影格數不可直接除以零件數。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "deadline",
      "label": "結果時限",
      "unit": "ms",
      "definition": "定義從哪個可追蹤起點至何種終點，時鐘一致；由工序需求訂門檻，不由最快推論反推。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "deadline_misses",
      "label": "超時／期限內無結果",
      "unit": "件",
      "definition": "全部送檢件中超過結果時限或期限內沒有結果的件數；分母包含無結果。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "deadline_miss_rate",
      "label": "超時率",
      "unit": "%",
      "definition": "超時／期限內無結果件數 / 全部送檢件數 × 100%；可與待複判重疊，不相加為總失敗率。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "latency_p95",
      "label": "完成件全流程 p95",
      "unit": "ms",
      "definition": "只對有效完整 trace 計算，另報有效件數及超時／缺失數；不是單純模型推論 p95。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "retention",
      "label": "留存與寫入",
      "unit": "text",
      "definition": "原圖／判定／版本／時間戳保留期、每班實際寫入量、NG 與抽樣良品策略及容量餘裕。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "stability",
      "label": "長時間穩定度",
      "unit": "text",
      "definition": "指定環境與測試時長下的溫度、降頻、掉幀、斷線、錯誤與回復時間，不以開機成功代替。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    },
    {
      "id": "handoff",
      "label": "交接與安全責任",
      "unit": "text",
      "definition": "影子測試結論、人工複判 owner、控制交握與故障處置的另行審查；範本不核准設備動作。",
      "target": null,
      "observed": null,
      "evidence": null,
      "status": "unmeasured"
    }
  ],
  "interpretation": "門檻、實測值與證據欄留 null；尚未測試不是 0，也不是 PASS。本站未提供真實工廠量測。"
}
