方法

本筆記本的一切都能單憑這個資料夾重現。本頁列出每一項量測、產生它的程序、以及它被判定的閾值,讓任何一項主張都能被重跑或被推翻。

  1. 1

    盤點

    每個檔案的尺寸、位元組大小、像素模式與 SHA-256,另加一個 64 位元的差分雜湊,用來為整組檔案的視覺相似度排序。

  2. 2

    容器鑑識

    逐一走訪每個 PNG chunk 並驗證其 CRC;逐一解析每個 JPEG marker 區段。chunk 與 marker 的順序即是寫檔者的指紋,而文字、ICC、EXIF、XMP、C2PA 區塊無論存在與否都會被記錄。

  3. 3

    內容量測

    各通道的平均與標準差、亮度直方圖的 Shannon 熵、以邊緣濾波變異數作為細節指標、飽和度、高光與陰影削頂、精確的相異色彩數,以及整幅畫面的自適應色盤壓縮。

  4. 4

    譜系

    每一組有序配對都以「在搜尋比例下把其中一張定位於另一張之內」的方式測試:先在縮小的金字塔上用 FFT 正規化互相關求解,再於原始解析度下裁出預測區域、量測真實殘差以驗證。方向刻意不以尺寸設限 — 因為衍生物往往正是其上游的放大版。

  5. 5

    修圖差異

    能逐像素對齊的配對直接相減。除了改動像素數之外,遮罩會以 32×32 分塊,用以區分「只動了一個物件」(改動堆積在少數區塊)與「重新編碼」(改動稀薄地散佈於各處)。

  6. 6

    語意判讀

    這是獨立的一道,而且是**另一種性質**的主張。每張影像單獨送給視覺模型 —— 沒有檔名、沒有譜系、沒有修圖結果,沒有任何前幾道量測查到的東西 —— 只問它描繪什麼、承襲什麼傳統、對誰說話。正因為判讀是盲的,它與量測層的吻合才算佐證而非回音。它是判斷不是量測,因此在筆記本中以自成一格的樣式呈現,兩者絕不混淆。

生效中的閾值

一個像素算「被改動」的門檻(RGB 通道最大差)12/255
譜系關係成立的最低 PSNR16.0dB
譜系關係成立的最低細節相關係數0.80
標記為「已確認」而非「可能」的相關係數0.90

重現方式

於專案根目錄執行:

npm run analyze      # rewrites content/analysis.json + public/img/*   (~11 min)
npm run semantic     # rewrites content/semantic.json  (needs FSYNC_AIG_RUN_TOKEN)
npm run dev          # read the result at localhost:3000

分析腳本為 scripts/analyze-source.py(僅依賴 Pillow 與 NumPy)。它讀取 source、簡報實際出貨的素材、以及旁邊的 assets/,本身不寫入這三者中的任何檔案。

這套方法無法告訴你的事

  • 單靠對齊無法判定同一畫面兩次重新取樣的先後 — 兩個方向的擬合一樣好。方向是由細節能量(重新取樣永遠不會增加細節)與容器結構推論而來,兩者都陳列在該主張旁邊。

  • 沒有內容憑證,並不能證明一張影像是否由機器生成。它只代表這個檔案對自己的來歷未作任何聲明。

  • JPEG 的品質數字是對 IJG 參考尺標的最近擬合。當擬合誤差偏大,代表編碼器使用了自訂量化表,該數字應理解為「相近的族群」而非某個實際設定值。

  • 比對範圍僅涵蓋三個目錄:原始資料夾、簡報實際出貨的素材、以及旁邊的 assets/ 資料夾。若上游存在於這三者之外,本分析看不見它 — 這也是為什麼「沒有親屬」的檔案只被記為沒有親屬,而不是被斷定為原創。