Introduction
        การเขียนโปรแกรมเพื่อ detect สิ่งของด้วยวิธี haar cascade ต้องมีการ train ข้อมูลเพื่อให้ได้ไฟล์ xml หลังจากนั้นเราจะนำไฟล์ xml ไปใช้ในการ detect ในลำดับต่อไป ซึ่งผมเคยได้นำเสนอการใช้ไฟล์ xml ในการ detect ใบหน้าคน มาแล้วในแล็บที่ 7 และในแล็บนี้ผมจะนำเสนอวิธีสร้างไฟล์ xml ขึ้นมาเอง โดยผมจะ detect  ตุ๊กตา KUMA ครับ

      
Preparing data
     ข้อมูลที่ใช้ในการเทรน แบ่งออกเป็น 2 ส่วน คือ  positive และ negative
- Positive data คือ ภาพที่ประกอบไปด้วยวัตถุที่เราจะ detect โดยทั่วๆ ไปควรจะมีประมาณ 1,000 ภาพ  แต่ในกรณีนี้ผมใช้แค่ 15 รูปครับ


- Negative data คือ ภาพที่ไม่มีส่วนของวัตถุที่จะ detect   เช่นกันครับจำนวนภาพที่ต้องใช้ประมาณ 3,000 ภาพ  เช่น ภาพพื้นหลังของห้อง ภาพถนน สำหรับการ detect  KUMA ผมจะใช้ภาพพื้นหลังภายในห้องครับอย่างเดียวครับ เพราะผมต้องการ detect KUMA แค่ในห้องเท่านั้นครับ 
Create sample
          ก่อนอื่นต้องไปโหลด tool เพื่อช่วยในการสร้าง positive และ negative ก่อนนะครับ เมื่อโหลดมาเรียบร้อยแล้ว แตกไฟล์และก๊อบปี้โฟลเดอร์ดังกล่าวไปไว้ที่ drive D:   download tools
- Create positive sample
-                      +ในขั้นแรกให้เข้าไปที่  tools/temp/positive/rawdata ครับ หลังจากนั้นให้ copy รูป positive ที่เราเตรียมไว้ทั้งหมดมาไว้ที่โฟลเดอร์นี้ครับ 
                + กลับไปที่ tools/temp/positive/  คลิกที่ objectmarker.exe เพื่อใช้มาร์คตำแหน่งของวัตถุที่เราต้องการจะ detect  โดยวิธีใช้คือ ให้เรานำเมาส์ลากเพื่อสร้างกรอบดังภาพ และกด space bar เพื่อยืนยันกรอบนั้น และเมื่อต้องการเปลี่ยนภาพเป็นภาพถัดไปให้กด Enter  ทำเช่นนี้จนครบทุกภาพ เราจะได้ output เป็น textfile ดังภาพ ซึ่งภายใน textfile จะเก็บชื่อไฟล์ จำนวนวัตถุ และตำแหน่งของวัตถุของในภาพนั้นๆ เอาไว้ 
                +คำเตือน โปรดรักษา output (info.txt) ที่ได้เยี่ยงชีวิตนะครับ ฮ่ะๆ เดี๋ยวจะหาว่าไม่เตือน ^_^
      


- Create negative sample
         + กลับไปที่ tools/temp/negative/   ก๊อปปี้รูป negative ทั้งหมดมาใส่ไว้ในนี้นะครับ
            + รันโปรแกรม create_list.bat  และจะได้ output เป็น textfile เช่นกัน โปรดรักษามันไว้ดีๆ เช่นกันครับ

Training
- Create vector file
        + Create vec file command
                    D:\tools\temp\createsamples.exe -info positive/info.txt -vec data/vector.vec -num 15 -w 20 -h 24
                   โดยมีพารามิเตอร์คร่าวๆ ดังนี้ครับ
                    -info ไฟล์ข้อมูลที่ได้จาก create positive sample
                    -vec output
                   -num จำนวน positive sample
                   -w –h ความกว้างและความสูง 
        +  Start -> run ->  D:\tools\temp\createsamples.exe -info positive/info.txt -vec data/vector.vec -num 15  -w 20 -h 24


- Training
          เมื่อเราได้ vec file จากขั้นตอนที่แล้ว ขั้นตอนนี้เราจะมา train ข้อมูลกันครับ โดยใช้คำสั่งด้านล่างนี้ครับ

                     D:\tools\temp\haartraining.exe -data data/cascade -vec data/vector.vec -bg negative/infofile.txt -npos 15 -nneg 20  -nstages 15 -mem 1000 -mode ALL -w 20 -h 24 –nonsym
                  โดยมีพารามิเตอร์คร่าวๆ ดังนี้ครับ
                   -data  output ที่จะได้
                   -vec vec file ที่ได้จากขั้นตอนก่อนหน้า
                   -bg ไฟล์ข้อมูลที่ได้จาก create negative sample
                  -npos จำนวน positive
                  -nneg จำนวน negative
                  -nstages จำนวน stages จำนวน stage จะแปรผันตรงกับเวลาที่ใช้ train
                  -mem ขนาดของ memory ที่กำหนดให้ใช้ในการ train ถ้าเรากำหนดขนาดของ memory มากเวลาที่ใช้เทรน ก็จะน้อยลงด้วย
                 -w-h ความกว้าง และความสูง

- Convert to xml file
         หลังจากใช้เวลาอันแสนนานในการเทรน ขั้นตอนนี้เราจะแปลงข้อมูลที่ได้จากการเทรนมาอยู่ในอยู่ของ xml file เพื่อที่จะนำไฟล์ xml ดังกล่าวไปใช้ในลำดับต่อไป
          + tools/temp/data/cascade/ ก๊อปปี้โฟลเดอร์ทั้งหมดไปไว้ที่ tools/cascade2xml/data
          + tools/temp/data/ ก๊อปปี้ไฟล์ vector.vec ไปไว้ที่ tools/cascade2xml/
          + รัน convert.bat จะได้ xml มาใน้ชื่อ output.xml  นี้แหละครับคือสิ่งที่เราต้องการ



Testing
           - tools/ test_recognition/ ก๊อปปี้ไฟล์ xml ที่เราได้มาไว้ในโฟลเดอร์นี้  และคลิกขวา  edit ที่ start.bat  
                                        --cascade=”dane.xml”  คือชื่อไฟล์ xml
                                       0 คือเป็นการรับ input มาจากกล้อง แต่ถ้าเราต้องการทดสอบกับรูปภาพให้เราเปลี่ยน จากเลข 0 เป็นชื่อรูปภาพแทน
-                  -  รัน start.bat เพื่อทดสอบการ detect KUMA 
     - output



             : http://nayakamitarup.blogspot.com/
  

10 ความคิดเห็น

November 27, 2013 at 5:11 PM

+ Create vec file command คืออะไรหรอครับพี่ผมไม่เข้าใจอ่าครับ รบกวนที

Reply
November 28, 2013 at 1:31 PM

พิจารณา D:\tools\temp\createsamples.exe -info positive/info.txt -vec data/vector.vec -num 15 -w 20 -h 24

D:\tools\temp\createsamples.exe = คือที่อยู่ของโปรแกรม createsamples.exe ครับ
-info = ที่อยู่ของไฟล์ info.txt
-vec = output ที่เราจะได้
-num = จำนวนรูป positive
-w = ความกว้างเฉลี่ยของวัตถุ
-h = ความสูงเฉลี่ยของวัตถุ

Reply
November 28, 2013 at 6:31 PM

พี่ครับ ผมลองทำแล้วมันได้ผลแบบนี้อ่าครับ ไม่รู้จะแก้ยังไงทำมาหลายครั้งแล้วอ่าครับ

http://upic.me/show/48381537

Reply
November 29, 2013 at 10:18 AM

จากรูป จะ detect อะไรหรอครับ? คุณใช้จำนวน Pos และ Neg อย่างละเท่าไหร่อะครับ

Reply
November 29, 2013 at 3:47 PM

จะ Detect หมวกกันน๊อคอ่ะครับ ใช้ Pos 161 ภาพ Neg 7 ภาพอ่ะครับ

Reply
April 10, 2015 at 1:21 PM

ตอน test ภาพขึ้นแต่ไม่ detect เป็นเพราะอะไรคะ

Reply
July 20, 2016 at 1:42 AM

คลิ๊ก objectmarker.exe แล้วไม่ขึ้นอะไรเลย ต้องลงอะไรเสริมหรือป่าวครับ หรือ รัน 64 bit ไม่ได้ต้องทำยังไงครับ

Reply
November 15, 2016 at 4:57 PM

คลิ๊ก objectmarker.exe แล้วไม่ขึ้นอะไรเลย

Reply
October 12, 2017 at 10:58 AM

objectmarker.exe ต้องมีไฟล์ที่เป็น .bmp อยู่ในโฟร์เดอร์ rawdata นะครับ

Reply
January 30, 2018 at 2:35 PM

รบกวนทำเป็น VDO ได้ป่าว

Reply

Post a Comment

Templated by Blogger Items