จะทดสอบโค้ดประมวลผลภาพได้อย่างไร?


14

ฉันทำงานในการประมวลผลภาพ (ส่วนใหญ่เป็น OCR) และฉันสงสัยว่าฉันควรรวมการทดสอบหน่วยในการพัฒนาของฉันอย่างไร

ฉันใช้การทดสอบหน่วยสำหรับรหัสประเภท "ทั่วไป" มากกว่านี้ แต่เมื่อจัดการกับรหัสการประมวลผลภาพฉันไม่แน่ใจว่าจะจัดการกับมันอย่างไร รหัสชนิดนี้ต้องการข้อมูลอินพุต / เอาท์พุตของภาพเสมอและการเยาะเย้ยสิ่งนี้ไม่ชัดเจน สำหรับตอนนี้ฉันส่วนใหญ่ทำการทดสอบการรวม แต่พวกเขาใช้เวลาสักครู่ในการทำงานและฉันต้องการความคิดเกี่ยวกับวิธีการแบ่งรหัสประเภทนี้เป็นการทดสอบหน่วยเพื่อให้ฉันสามารถเรียกใช้พวกเขาได้เร็วขึ้น

แก้ไข: การวิเคราะห์ตัวละครสามารถผ่านหลายขั้นตอนที่เกี่ยวข้องกับการหมุนหลายครั้งการปรับขนาดและการทำงานของก้าน ขั้นตอนเหล่านี้เปลี่ยนแปลงบ่อยครั้งเมื่ออัลกอริทึมกำลังพัฒนา ดังนั้นอินพุทและเอาท์พุทที่คาดหวังสามารถพัฒนาได้มากในขณะทดสอบ อักขระแต่ละตัวสามารถมีขนาด 100x100 พิกเซลได้ดังนั้นจึงไม่สามารถเข้ารหัสในรหัสหรือทำงานกับข้อมูลที่สร้างขึ้นได้


คุณสามารถร่างตัวอย่างของฟังก์ชันที่คุณมีปัญหาในการสร้างการทดสอบหน่วยได้หรือไม่?
Doc Brown

1
สั้นเกินไปสำหรับคำตอบที่แท้จริงและไม่ใช่การทดสอบหน่วย: เรากำลังประมวลผลข้อมูล (เหมือนใน: ไปถึงตัวอย่างจำนวนมาก - ฉันมักจะไปเกิน 1,000 สำหรับงานการจำแนกประเภทดังกล่าว แต่ขึ้นอยู่กับขนาดตัวอย่างโดยรวมของคุณ ) และเปรียบเทียบผลลัพธ์สุดท้ายกับข้อมูลที่ประมวลผลด้วยมือโดยอัตโนมัติ ฉันได้ตั้งกรอบเล็ก ๆ เพื่อทำสิ่งนี้มันจะเปิดแหล่งที่มาในไม่กี่สัปดาห์ แต่นี่คือคำอธิบาย - คุณสามารถโคลนกระบวนการ: birgitplays.wordpress.com/2012/09/15/ …
Birgit P.

สำหรับตัวอย่างของคุณคุณสามารถทดสอบการหมุนการปรับสเกล ฯลฯ เป็นหน่วยการทดสอบขนาดเล็กได้อย่างง่ายดาย การหมุนภาพที่กำหนด 45 องศาไม่ควรเปลี่ยนแปลงมากนัก นอกจากนี้ยังเป็นการปรับขนาดและการทำงานทางสัณฐานวิทยา การทดสอบบางสิ่งที่ผลลัพธ์ที่คาดการณ์วิวัฒนาการในระหว่างการใช้งานคือยาก คุณสามารถลองวัดคุณภาพและพูดคุณภาพ> = some_quality เพื่อให้แน่ใจว่าคุณภาพของคุณจะไม่ลดระดับลง แต่สิ่งนี้อาจเป็นเรื่องยาก นอกเหนือจากนั้นสิ่งที่คุณทำได้คือมีการทดสอบที่พิสูจน์ว่าคุณมีส่วนที่ไม่จำเป็น ชอบขนาด / หมุน / ฯลฯ
martiert

@ Smartiert: ฉันไม่ได้ทดสอบการหมุนการปรับสเกล ฯลฯ ขณะที่ฉันเรียกสิ่งเหล่านี้จากห้องสมุดที่ 3 ซึ่งฉันเชื่อว่าผ่านการทดสอบเป็นอย่างดี อัลกอริทึม OCR ประกอบด้วยการดำเนินการเหล่านี้จำนวนมาก แต่อย่างที่คุณพูดการทดสอบบางอย่างที่การส่งออกมีวิวัฒนาการยาก บางทีมันอาจจะดีเตือนเราไม่ได้มีทางเลือก แต่ต้องขึ้นอยู่กับการทดสอบการรวม ...
rold2007

@Birgit P .: ทางออกที่น่าสนใจ อย่างที่คุณบอกว่ามันยังคงเป็นการทดสอบการรวมระบบ มีกรอบเหมือนคุณจะช่วยตั้งค่าการทดสอบเหล่านี้ได้เร็วขึ้น แต่พวกเขาจะไม่ทำงานเร็วขึ้น ...
rold2007

คำตอบ:


12

ฉันทำงานกับซอฟต์แวร์การบันทึก / วิเคราะห์ / การสตรีมวิดีโอและเราประสบปัญหาคล้ายกันมาก ด้านล่างเป็นวิธีแก้ปัญหาของเราไม่แน่ใจว่าจะใช้งานได้ในระยะยาวได้อย่างไร แต่ตอนนี้ดูเหมือนจะใช้งานได้แล้ว

บันทึกอิมเมจอินพุต / เอาต์พุตเป็นทรัพยากรในโครงการทดสอบหน่วยของคุณ จากนั้นให้ทำการทดสอบหน่วยตรวจสอบว่าเมื่อได้รับอินพุตเฉพาะแล้วเอาต์พุตเฉพาะนั้นจะถูกสร้างขึ้น

9/10 ครั้งเมื่อคุณ refactor รหัสและเพิ่มฟังก์ชั่นอื่น ๆ คุณจะคาดหวังว่าพฤติกรรมของการจัดการภาพของคุณจะไม่เปลี่ยนแปลงดังนั้นหากการทดสอบหน่วยเริ่มกะทันหันทั้งหมดล้มเหลวอาจเป็นเพราะข้อผิดพลาด

ในทางตรงกันข้ามถ้าคุณทำการเปลี่ยนแปลงในอัลกอริทึมที่เกิดขึ้นจริงที่จะส่งผลให้เกิดความล้มเหลวในการทดสอบหน่วย ในกรณีนี้คุณจะต้องตรวจสอบด้วยตนเอง / เห็นว่าผลลัพธ์นั้นถูกต้องและถ้ามันดูดีจากนั้นอัปเดตแหล่งข้อมูลภาพเพื่อให้การทดสอบหน่วยผ่านอีกครั้ง

ในโครงการของเราเราได้พัฒนาแหล่งวิดีโอ "ปลอม" (หรือเยาะเย้ยหากคุณต้องการ) ซึ่งสามารถป้อนข้อมูลของเราทั้งอินพุตและเอาต์พุต แต่ข้อมูลนั้นไม่ใช่ของปลอม แต่จริงๆแล้วมันถูกจับโดยใช้คลาสการบันทึกข้อมูลผู้ช่วยจากระบบที่ใช้งานเมื่อเราทำการทดสอบด้วยตนเองและตรวจสอบว่าทุกอย่างใช้งานได้


ยอมรับมันตกลงที่จะพึ่งพาไฟล์ที่เป็นรูปธรรมบางอย่างในการทดสอบของคุณเมื่อคุณกำลังทดสอบรูทีนการทำงานกับไฟล์ (คุณเห็นมันมากขึ้นด้วยการทดสอบการรวม)
Kemoda

1
หากคุณเรียกใช้อินพุตบางส่วนผ่านห่วงโซ่การประมวลผลทั้งหมดแล้วตรวจสอบผลลัพธ์คุณจะไม่ได้ทดสอบหน่วย แต่เป็นการทดสอบการรวม
tdammers

@ ผู้ส่งอีเมล: ฉันไม่เคยบอกว่าให้วิ่งผ่านสายโซ่ทั้งหมด เรียกใช้อินพุตบางส่วนผ่านหนึ่ง "หน่วย" ไม่ใช่เชนทั้งหมด และถ้าแน่ใจว่าผลลัพธ์ที่เกิดขึ้นนั้นเป็นอย่างอื่นที่ไม่ใช่ภาพคุณจะต้องมีการบันทึกอินพุตเป็นทรัพยากรรูปภาพ
DXM

@DXM: ฉันเข้าใจโซลูชันของคุณ แต่ฉันคิดว่าเราอาจไม่มีข้อ จำกัด เหมือนกัน ข้อมูลอินพุต / เอาต์พุตของฉันเปลี่ยนแปลงไปมากในขณะที่อัลกอริทึมได้รับการพัฒนา คุณรับมือกับการเปลี่ยนแปลงปกติเหล่านี้ได้อย่างไร ใน OCR ฉันจะมีความถูกต้องมากกว่า 99% ดังนั้นการทดสอบในเพียงไม่กี่ภาพสามารถให้ฉันเป็นความรู้สึกที่ผิดพลาดของการประสบความสำเร็จในขณะที่การทดสอบการรวมอาจบอกฉันในภายหลังว่าที่จริงผมแย่อัลกอริทึม ...
rold2007
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.