Სარჩევი:
- ნაბიჯი 1: გაღრმავება: როგორ შეიძლება ობიექტის მოძრაობის გამოვლენა გამოსახულების ნაკადში?
- ნაბიჯი 2: ბინარიზაცია
- ნაბიჯი 3: გაფართოება
- ნაბიჯი 4: კონტურების ძებნა (და მისი ცენტროიდები)
- ნაბიჯი 5: ცენტორიდის მოძრაობა და ობიექტების დათვლა
ვიდეო: ჟოლო Pi ობიექტების დათვლა: 5 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
კომპიუტერული ხედვა, უდავოდ, არის ფანტასტიკური რამ! ამის გამოყენებით, კომპიუტერი იძენს შესაძლებლობას "დაინახოს" და უკეთ შეიგრძნოს გარემო, რაც იძლევა კომპლექსური, სასარგებლო და მაგარი პროგრამების განვითარების საშუალებას. პროგრამები, როგორიცაა სახის ამოცნობა და ამოცნობა, ობიექტების თვალყურის დევნება და ობიექტების გამოვლენა სულ უფრო მეტად გვხვდება ჩვენს ყოველდღიურ საქმიანობაში, კომპიუტერული ხედვის მიღწევების წყალობით.
იმის გათვალისწინებით, თუ რამდენად მოწინავე და ხელმისაწვდომია კომპიუტერული ხედვის ჩარჩოები და ინსტრუმენტები, ამ სტატიაში აღწერილი პროგრამა კარგად ჯდება: მარტივი ჟოლოს PI და უფასო და ღია კოდის კომპიუტერული ხედვის ჩარჩოს სახელწოდებით OpenCV მოძრაობის ობიექტების დასათვლელად, უფრო ზუსტად რამდენად ობიექტები შედიან და გამოდიან გარკვეული მონიტორინგის ზონაში.
ნაბიჯი 1: გაღრმავება: როგორ შეიძლება ობიექტის მოძრაობის გამოვლენა გამოსახულების ნაკადში?
ახლა დროა გაღრმავდეთ სურათის დამუშავების საკითხებში:
როგორ მივიღოთ ვებკამერის ნაკადიანი სურათები და დავადგინოთ, რომ რაღაც იქ გადავიდა
იგი შედგება ხუთი ნაბიჯისგან:
ნაბიჯი 1: მონიშნეთ ობიექტი მოძრაობაში
როგორც კლასიკურ ფიზიკაში განისაზღვრება, მითითება აუცილებელია იმის დასადგენად, რომ რაღაც მოძრაობს ან ის დგას. აქ, იმის დასადგენად, არის თუ არა რაღაც გადატანილი, ეს თითქმის იგივეა: ვებკამერის თითოეული ნაკადის გადაღებული ჩარჩო შეედრება საცნობარო ჩარჩოს. თუ რამე განსხვავებულია, რაღაც გადავიდა. მარტივია როგორც ჟღერს.
ეს საცნობარო ჩარჩო უნდა იყოს გადაღებული ყველაზე სრულყოფილ პირობებში (მაგალითად, არაფერი მოძრაობს). სურათის დამუშავების სამყაროში, ეს შედარება გადაღებულ ჩარჩოსა და საცნობარო ჩარჩოს შორის შედგება ტექნიკაში, რომელსაც ეწოდება ფონის გამოკლება. ფონის სუბტრაცია შედგება სიტყვასიტყვით გამოკლება პიქსელ-პიქსელ ფერთა ინფორმაციას გადაღებული ჩარჩოდან და საცნობარო ჩარჩოდან. ამრიგად, ამ მიღწევის შედეგად მიღებული სურათი ხაზს უსვამს / აჩვენებს უფრო დეტალურად მხოლოდ იმას, რაც განსხვავდება ამ ორ ჩარჩოს შორის (ან რა გადაადგილდა / მიიღო მოძრაობა) და ყველაფერი დანარჩენი შავი იქნება (ნაცრისფერზე ნულის მნიშვნელობის ფერი -მასშტაბური პიქსელი). მნიშვნელოვანია: ვებკამერის სურათის განათების პირობები და ხარისხი (გადაღებული სენსორების ხარისხის გამო) შეიძლება ოდნავ განსხვავდებოდეს ჩარჩოდან ჩარჩოში. ეს გულისხმობს, რომ "თანაბარი ნაწილები" საცნობარო ჩარჩოდან და სხვა ჩარჩოებიდან არ იქნება მთლად შავი ფონის გამოკლების შემდეგ. ამ ქცევის მიუხედავად, ამ პროექტში სურათის დამუშავების შემდგომ ნაბიჯებს სერიოზული შედეგები არ მოჰყვება.
სურათის დამუშავების დროის შესამცირებლად, ფონის სუბტრატირების გაკეთებამდე, გადაღებული ჩარჩო და საცნობარო ჩარჩო გარდაიქმნება ნაცრისფერი მასშტაბის გამოსახულებაზე. Მაგრამ რატომ? ეს არის გამოთვლითი ეფექტურობის საკითხი: სურათს, რომელიც წარმოადგენს მრავალ ფერს (ფერადი სურათი) აქვს სამი ინფორმაცია თითო პიქსელზე: წითელი, ლურჯი და მწვანე ფერის კომპონენტები (ძველი, მაგრამ ოქროს RGB სტანდარტი). ასე რომ, მათემატიკურად, თითოეული პიქსელი შეიძლება განისაზღვროს, როგორც სამი მნიშვნელობის მასივი, თითოეული წარმოადგენს ფერის კომპონენტს. ამრიგად, მისი გაფართოება მთელ სურათზე, საბოლოო სურათი იქნება რეალურად გამოსახულების სამი კომპონენტის ნაზავი: წითელი, ლურჯი და მწვანე გამოსახულების კომპონენტები.
მის დასამუშავებლად, ბევრი შრომაა საჭირო! თუმცა, ნაცრისფერი მასშტაბის სურათებში, თითოეულ პიქსელს აქვს მხოლოდ ერთი ფერის ინფორმაცია. ამრიგად, ფერადი სურათის დამუშავება სამჯერ უფრო ნელია, ვიდრე ნაცრისფერი მასშტაბის გამოსახულების შემთხვევაში (მინიმუმ სამჯერ, იმისდა მიხედვით, თუ რა ტექნიკასთან არის დაკავშირებული). და კიდევ უფრო მეტიც: ზოგიერთი მიზნისთვის (როგორც ეს პროექტი), ყველა ფერის დამუშავება არ არის აუცილებელი ან საერთოდ მნიშვნელოვანი. აქედან გამომდინარე, ჩვენ მივედით დასკვნამდე: ნაცრისფერი მასშტაბის სურათების გამოყენება რეკომენდირებულია სურათების დამუშავების მიზნით. ფონის სუბტრაციის შემდეგ აუცილებელია გაუსული დაბინდვის ფილტრის გამოყენება.
გაუსის დაბინდვის ფილტრი, რომელიც გამოიყენება ფონზე გამოკლებულ სურათზე, არბილებს მოძრავი აღმოჩენილი ობიექტის ყველა კონტურს. რა თქმა უნდა, ეს იქნება დამხმარე სურათის დამუშავების შემდგომ ნაბიჯებში.
ნაბიჯი 2: ბინარიზაცია
სურათის დამუშავების უმეტეს შემთხვევაში, ბინარიზაცია თითქმის სავალდებულო ნაბიჯია გამოსახულების ობიექტების / მახასიათებლების მონიშვნის შემდეგ. მიზეზი: ორობითი გამოსახულებით, პიქსელის თითოეულ ფერს შეუძლია მიიღოს მხოლოდ ორი მნიშვნელობა: 0x00 (შავი) ან 0xFF (თეთრი). ეს მნიშვნელოვნად უწყობს ხელს სურათის დამუშავებას, რათა მოითხოვოს კიდევ უფრო ნაკლები "გამომთვლელი ძალა", რათა შემდგომ ნაბიჯებში გამოიყენოს გამოსახულების დამუშავების ტექნიკა. ბინარიზაცია შეიძლება გაკეთდეს ნაცრისფერი მასშტაბის გამოსახულების თითოეული პიქსელის ფერის შედარება გარკვეულ ზღურბლთან. თუ პიქსელის ფერის მნიშვნელობა ზღურბლზე მეტია, ეს პიქსელის ფერი მიიღებს თეთრ მნიშვნელობას (0xFF), ხოლო თუ პიქსელის ფერის მნიშვნელობა ზღურბლზე დაბალია, ეს პიქსელის ფერი მიიღებს შავ მნიშვნელობას (0x00). სამწუხაროდ, ბარიერის ღირებულების არჩევანი არც ისე ადვილი გასაკეთებელია. ეს დამოკიდებულია გარემო ფაქტორებზე, როგორიცაა განათების პირობები. ბარიერის ღირებულების არასწორმა არჩევანმა შეიძლება გააფუჭოს ყველა ნაბიჯი შემდგომი. ამრიგად, მე მკაცრად გირჩევთ, ხელით შეცვალოთ პროექტში ბარიერი თქვენს საქმეზე, ნებისმიერი შემდგომი მოქმედების წინ. ამ ზღურბლის მნიშვნელობამ უნდა უზრუნველყოს მოძრავი ობიექტის ორობითი გამოსახულება. ჩემს შემთხვევაში, ბარიერის ადეკვატური არჩევანის შემდეგ, მიიღება ის, რასაც ხედავთ ფიგურაში 5.
სურათი 5 - ორობითი გამოსახულება
ნაბიჯი 3: გაფართოება
აქამდე შესაძლებელი იყო მოძრავი ობიექტების გამოვლენა, მონიშნვა და ბინარიზაცია, რაც იწვევს მოძრავი ობიექტის საკმაოდ მკაფიო გამოსახულებას (= ობიექტის საკმაოდ მკაფიო გამოსახულება გამოსახულების დამუშავების მიზნით). ობიექტის დათვლისთვის მზადება თითქმის დასრულებულია. "თითქმის" აქ ნიშნავს, რომ გადაადგილებამდე უნდა მოხდეს მცირედი კორექტირება. ამ მომენტში, არსებობს რეალური შანსი იმისა, რომ არსებობდეს „ხვრელები“ობიექტებში (პიქსელების შავი მასები თეთრად მონიშნულ ობიექტში). ეს ხვრელები შეიძლება იყოს ნებისმიერი, განათების განსაკუთრებული პირობებიდან დაწყებული ობიექტის ფორმის გარკვეულ ნაწილებამდე. მას შემდეგ, რაც ხვრელებს შეუძლიათ "წარმოქმნან" ყალბი საგნები რეალურ ობიექტებში (დამოკიდებულია იმაზე, თუ რამდენად დიდია და სად მდებარეობს), სურათზე ხვრელების არსებობის შედეგები შეიძლება კატასტროფული იყოს ობიექტების დათვლისთვის. ამ ხვრელების აღმოსაფხვრელად გამოიყენება გამოსახულების დამუშავების ტექნიკა, სახელწოდებით Dilate. გამოიყენეთ ეს და ხვრელები გაქრება.
ნაბიჯი 4: კონტურების ძებნა (და მისი ცენტროიდები)
ამ ეტაპზე, ჩვენ გვაქვს მონიშნული ობიექტები, არანაირი ხვრელი შიგნით და მზად ვართ შემდგომისთვის: კონტურების (და მისი ცენტროიდების) ძიება. OpenCV– ში არის რესურსები ავტომატური კონტურების გამოსავლენად, მაგრამ გამოვლენილი კონტურები გონივრულად უნდა იყოს შერჩეული (მხოლოდ რეალური ობიექტის ან ობიექტების არჩევისთვის). ასე რომ, კონტურების გამოვლენის კრიტერიუმი არის ობიექტის ფართობი, რომელიც იზომება პიქსელებში². თუ კონტურს აქვს უფრო მეტი ფართობი ვიდრე ლიმიტი (კონფიგურირებულია პროგრამულ უზრუნველყოფაში), ამიტომ ის უნდა ჩაითვალოს დასათვლელად ნამდვილ ობიექტად. ამ ტერიტორიის ლიმიტის/კრიტერიუმების არჩევანი ძალიან მნიშვნელოვანია და ცუდი არჩევანი აქ ნიშნავს არასწორ დათვლას. თქვენ უნდა სცადოთ ზოგიერთი ტერიტორიის ღირებულების ლიმიტების ღირებულებები და შეამოწმოთ რა უფრო შეესაბამება თქვენს გამოყენებას. არ ინერვიულოთ, ეს ლიმიტი არც ისე რთულია იპოვოთ / მორგებული. სურათის ყველა ობიექტის არჩევის შემდეგ, შემდეგი ნაბიჯი არის მასზე ოთხკუთხედის დახატვა (ეს ხელახლა უნდა შეიცავდეს მთელ აღმოჩენილ ობიექტს მის შიგნით). და ამ ოთხკუთხედის ცენტრი არის…. ობიექტი ცენტროიდი! თქვენ ალბათ ფიქრობთ "რა არის დიდი საქმე ამ ცენტროიდთან?", არა? აქ არის თქვენი პასუხი: არ აქვს მნიშვნელობა რამდენად დიდია ან როგორია ობიექტის ფორმა, მისი მოძრაობა იგივეა, რაც ცენტროიდზე. სხვა სიტყვებით რომ ვთქვათ: ეს მარტივი წერტილი, რომელსაც ცენტროიდი ეწოდება, წარმოადგენს ობიექტის მთელ მოძრაობას. ეს ახლა ხდის დათვლას ძალიან მარტივს, არა? იხილეთ სურათი ქვემოთ (სურათი 6), სადაც ობიექტის ცენტროიდი წარმოდგენილია შავი წერტილის სახით.
ნაბიჯი 5: ცენტორიდის მოძრაობა და ობიექტების დათვლა
გრანდიოზული ფინალი: შეადარეთ ობიექტის ცენტროიდული კოორდინატები შესასვლელთან და გასასვლელებთან და გამოიყენეთ აღწერილი ალგორითმი, რომელიც აღწერილია ადრე. და იქნება მოძრავი ობიექტების დათვლა!
საბოლოო შედეგი როგორც ნაჩვენებია ამ პოსტის დასაწყისში, აქ არის პროექტი მოქმედებაში:
გირჩევთ:
Arduino– ს დათვლა W/ დასვენების ღილაკი: 4 ნაბიჯი
Arduino Count Down W/ Rest Button: ეს ინსტრუქცია გასწავლით თუ როგორ უნდა შექმნათ ათვლის ტაიმერი 4 ციფრიანი 7-სეგმენტიანი ეკრანის გამოყენებით, რომლის გადატვირთვაც შესაძლებელია ღილაკით. მე მივიღე იდეა ამის გაკეთება, რადგან კლასში 1 ციფრიანი 7-სეგმენტიანი ჩვენების შექმნისას მინდოდა რაღაცის შექმნა
დათვლა 0 -დან 9999 -მდე 8051 -ით 7 სეგმენტის ჩვენება: 5 ნაბიჯი
დათვლა 0 -დან 9999 -მდე 8051 -ით 7 სეგმენტის ჩვენების გამოყენებით: გამარჯობა ყველას, ამ გაკვეთილში ჩვენ გეტყვით, თუ როგორ უნდა დაითვალოთ 0 -დან 9999 -მდე ოთხი 7 სეგმენტის ჩვენების გამოყენებით მხოლოდ ერთი პორტისა და 4 ციფრული ქინძისთავის გამოყენებით
საპენსიო საათი / დათვლა / Dn საათი: 4 ნაბიჯი (სურათებით)
საპენსიო საათი / დათვლა / Dn საათი: უჯრაში მქონდა რამოდენიმე ამ 8x8 LED dot-matrix ჩვენება და ვფიქრობდი რა გამეკეთებინა მათთან. სხვა ინსტრუქციებით შთაგონებული, მე მივიღე იდეა ავაშენო დათვლის/ზევით ჩვენება მომავალ თარიღამდე/დროზე დასათვლელად და თუ მიზნობრივი დროა
ჟოლო ჟოლო Pi (12 თავი) (სურათებით)
შესავალი ჟოლოს (უთავო) ჟოლოში: ბოლოს და ბოლოს! გამოიყენეთ თქვენი Raspberry Pi ისე, რომ არ დახარჯოთ ის, რაც სამუდამოდ აკავშირებს გარე პერიფერიულ მოწყობილობებს და გაუმკლავდებით საკაბელო სისულელეს: დააკონფიგურირეთ თქვენი Pi, რომ იყოს უთავო! (არა საშინელი) მაგრამ ეს განსაკუთრებით გამოსადეგია მათთვის, ვინც ასწავლის
ბინარულში დათვლა და გათანაბრება: 6 ნაბიჯი
ორობაში დათვლა და გათანაბრება: მიეცი ინსტრუქციის ზოგადი აღწერა ეს არის ჩემი მეორე ორობითი ინსტრუქცია. ეს შედის ორობითი ფორმით გაკეთებულ მათემატიკურ განტოლებებში. ნაწილი 1 გვიჩვენებს, თუ როგორ უნდა დავთვალოთ ორობითი თქვენი ხელებით, ხოლო ნაწილი 2 გიჩვენებთ წერილობით. მხოლოდ გვერდითი შენიშვნა, რაც