# ชุดโจทย์ผู้เรียนก่อน v0 · C01-D เปลี่ยนชุดกล้อง

`task_id=C01-D` · `packet_version=p5-prep-5` · 14 ตุลาคม 2026 · PK-Research · CC BY 4.0

กิจกรรมนี้ใช้เครื่องของผู้ร่วมกับโปรแกรมคำนวณสังเคราะห์ `p4-toy-1`; ไม่มีการต่อกล้อง โดรน การบิน หรือการยืนยันการตรวจพบจริง. ผู้ร่วมขอช่วย พัก หรือหยุดได้ และต้องมีสิทธิ์ใช้เครื่องก่อนเริ่ม. หากรันไม่ได้ ให้บันทึกอุปสรรคและคง `actual=NOT_RUN` ไม่ยืมผลรันของผู้เขียน

**รหัสผู้ร่วม:** ______ · **Python รุ่น:** ______ · **ชิ้นงาน:** D-v0 → D-v1

## ก่อนลงมือ

1. หา C01 จาก [หน้าภาพรวม](https://drone.pk-research.work/knowledge/drone-applications/) แล้วบอกจุดที่ติดขัดก่อนรับคำชี้. อธิบายด้วยคำตนเองว่า expected, actual, source hash และการคืนฐานต่างกันอย่างไร
2. แจ้งชื่อหน้า/ไฟล์หากเคยเห็นผลรันผู้เขียนหรือได้รับคำใบ้ก่อน D-v0. การอ่าน `expected.csv` **เป็นข้อกำหนดที่อนุญาตให้ดูได้ก่อนรัน**; สิ่งที่ต้องไม่คัดลอกเป็น actual คือผลของผู้อื่น
3. ดาวน์โหลด [calculator.py](https://drone.pk-research.work/downloads/drone-applications/cases/lab/calculator.py), [fixture.json](https://drone.pk-research.work/downloads/drone-applications/cases/lab/fixture.json) และ [expected.csv](https://drone.pk-research.work/downloads/drone-applications/cases/lab/expected.csv) ไว้ในโฟลเดอร์งานของตน เก็บต้นฉบับที่ไม่แก้และทำสำเนาแยกสำหรับ mutation. ใช้ Python 3.9+ standard library; โปรแกรมไม่ต้องเชื่อมเครือข่ายระหว่างรัน

## ข้อกำหนดที่ใช้กับ C01

กรณี CAM01–CAM05 ใช้กล้องตัวเลขแต่ง. ความหนาแน่นตัวอย่าง = `target_mm / gsd_mm_per_px`; การเก็บข้อมูล = `image_count × bytes_per_image`. ผ่านเกณฑ์ตัวเลขเฉพาะเมื่อ samples ≥ `min_samples` และ bytes ≤ `capacity_bytes` โดยต้องตรวจ unknown/null แยกจากศูนย์. ผล `numeric_fit` ไม่ยืนยันรายละเอียดตำหนิ คุณภาพภาพ ความเข้ากันได้ของกล้อง หรือความพร้อมติดตั้งและบิน

ให้เขียนข้อคาดหวังจาก `expected.csv` **ก่อนรัน** สำหรับ CAM01–CAM05 และอธิบายว่าการเปลี่ยน CAM01 → CAM02 → CAM03 กระทบ sampling กับ storage อย่างไร. ตรวจ input/output ของโปรแกรมและค่าที่หาย; เลือกสำเนา fixture อย่างน้อยหนึ่งกรณีผิดเพื่อดูการปฏิเสธ แต่ไม่เปลี่ยนไฟล์ต้นฉบับหรือ expected.csv ให้ตรงกับผลผิด

## ส่ง D-v0 จากงานของตน

| หลักฐาน | บันทึกก่อนรัน / ผลจริงหลังรัน |
|---|---|
| รุ่นและ SHA-256 ของ script / fixture / expected |  |
| คำสั่ง เวลา Python version และ exit code |  |
| expected CAM01–CAM05 พร้อมเหตุผล |  |
| actual CAM01–CAM05 พร้อมที่เก็บ raw output/hash |  |
| discrepancy หรือกรณีข้อมูลไม่รู้/ผิด |  |
| การรันซ้ำ input เดิมสองครั้งและการเทียบผล |  |
| การคืนสำเนา baseline ตรวจ hash และรันอีกครั้ง |  |
| สิ่งที่เห็นจากผลผู้เขียน/คำใบ้ก่อน v0 หรือ `ไม่มี` |  |

บันทึก contract ที่เปลี่ยนของ CAM01–CAM03: ผู้รับต้องการอะไร, interface/หน่วย/ข้อมูลใดเปลี่ยน, ขอบการคำนวณและการตรวจฮาร์ดแวร์ที่ยัง `NOT_RUN`. ถ้ากรณีผิดถูกปฏิเสธ ให้เก็บคำสั่ง exit code และ stderr ของตนเอง; การปฏิเสธไม่ใช่ผล `numeric_fit`. สำหรับผลจากเครื่องผู้เรียนให้ระบุ `actual`; สำหรับผลจากไฟล์ expected ให้ระบุ `expected` เสมอ

## หลังได้รับข้อทัก

เก็บ D-v0, diff ของสำเนาที่แก้, คำทักและเหตุแก้ แล้วทำ D-v1/retest โดยอ้าง source/input hash ใหม่และผลจริงของตน. ระบุวิธีย้อนคืนและข้อค้างที่ผู้ตรวจต้องทวน. ผู้ตรวจใช้ `APP-C01-D-K01`, `APP-C01-D-S01`, `APP-C01-D-E01` และ `APP-C01-D-C01` กับ requirements/rubric ฉบับที่เก็บไว้; ไม่ให้ผ่าน S จากการอ่านผลผู้เขียนหรือการคัด expected

**ขอบการใช้:** ชุดนี้ไม่แนบผล host หรือ test plan ที่มีตัวเลขผลครบ. เอกสารเหล่านั้นยังเป็นสาธารณะและต้องบันทึกหากเปิดก่อน v0. ผลผู้เรียนยัง `NOT_RUN`; ไม่มีผลอุปกรณ์หรือสนาม
