Мазмұны:

Жұлдызды компьютерлік көру арқылы тану (OpenCV): 11 қадам (суреттермен)
Жұлдызды компьютерлік көру арқылы тану (OpenCV): 11 қадам (суреттермен)

Бейне: Жұлдызды компьютерлік көру арқылы тану (OpenCV): 11 қадам (суреттермен)

Бейне: Жұлдызды компьютерлік көру арқылы тану (OpenCV): 11 қадам (суреттермен)
Бейне: Басқа тышты деген осы 😡 2024, Қараша
Anonim
Computer Vision (OpenCV) көмегімен жұлдыздарды тану
Computer Vision (OpenCV) көмегімен жұлдыздарды тану

Бұл нұсқаулық сізге суреттегі жұлдызша үлгілерін автоматты түрде анықтау үшін компьютерді көру бағдарламасын қалай құру керектігін түсіндіреді. Бұл әдіс OpenCV (Open Source Computer Vision) кітапханасын пайдаланып, белгілі жұлдыздық үлгілерді тану үшін қолдануға болатын HAAR каскадтарының жиынтығын жасайды. Бұл нұсқаулық жұлдыз үлгісін тану контекстінде болса да, мен сипаттайтын OpenCV процесі басқа қосымшаларға да қолданылуы мүмкін - сондықтан бұл пайдалы болады деп үміттенемін!

Жоба мына бейнеде жинақталған:

Неліктен мен бұл нұсқаулықты жаздым?

  1. Мен әзірлеп жатқан жұлдыздар үлгісін анықтау әдісі, бұл телескопты бағдарлау, суретті автоматты түрде жіктеу, тіпті ашық көздегі жұлдыз сенсоры немесе әуесқой CubeSat болсын, әуесқой астрономияның көптеген жобаларына қолданылуы мүмкін деп ойлаймын.
  2. Мұнда көптеген OpenCV нұсқаулары бар, бірақ мен бастапқыда үйрену өте қиын процесс деп таптым, сондықтан бұл нұсқаулық OpenCV үшін HAAR жіктеуіштерін оқытқысы келетін басқа адамдар үшін жақсы сілтеме болады деп үміттенемін (міндетті емес) астрономия мүмкін!)
  3. Мен өзім дайындалған бағдарламашы емеспін, сондықтан бұл жоба шынымен де менің түсінігімді көтерді. Бұл нұсқаулықты жазу арқылы басқа тәжірибелі өндірушілер осы тұжырымдамамен жұмыс істеуге шабыт алады және GitHub -ке осы беттегі түсініктемелер арқылы үлес қосады деп үміттенемін.
  4. Әуесқой астрономия мен бағдарлау әдістері-менің үлкен қызығушылығым, менің алдыңғы нұсқауымды қараңыз, телескоптар үшін Arduino Star-Finder.

Нұсқаулықтың мұқабасындағы фотосурет мен дизайнға қатысқан 3U CubeSat дизайнымен жасалған. Мен бұл нұсқаулықты суреттеу үшін қолдандым, өйткені компьютерді көру жұлдызын тану жүйесінің бастапқы қолданбасы Raspberry Pi V2 камерасын қолдана отырып, әуесқойлық CubeSats үшін бағдар сенсорына арналған болатын. Менің ойымша, компьютерлік жұлдызды танудың басқа да әлеуетті қосымшалары бар, бірақ менің ойымша, бұл керемет!

Шағын түсіндірме сөздік:

Компьютерлік көру туралы білімді қолдануда мамандандырылған терминдердің шамалы баяулауы байқалады, сондықтан мен мұнда кейбіреулерін анықтаймын:

Каскад - белгілі бір мақсатты объектіні анықтауға үйретілген классификатор.

Fiducial Marker - кескінге визуалды сілтемені қосатын белгі.

HAAR - Хаар тәрізді ерекшеліктер - бұл жіктеуіштерді оқыту үшін қолданылатын кескін ерекшелігі.

OpenCV - Open Source Computer Vision, компьютерлік көру құралдарының кітапханасы.

Stellarium - Ашық астрономия бағдарламасы.

1 -қадам: талаптар

OpenCV - бұл Linux негізіндегі кітапхана, сондықтан оны Windows жүйесінде жақсы пайдалану мүмкін болса да, оны Linux ортасында іске қосу әлдеқайда жеңіл болады (мұны меннен және оны толық жұмыс істеу үшін көп күндерден алыңыз) Windows!). Эксперимент ретінде мен Raspberry Pi 3B+бағдарламасында OpenCV жүктедім және іске қостым, ол сәтті болды, дегенмен жіктеуішті оқыту - бұл жедел жадты қажет ететін процесс, сондықтан егер сіз оны кез келген жылдамдықпен орындағыңыз келсе, Linux виртуалды серверін жалдау ұсынылады. (бұл таңқаларлықтай арзан болуы мүмкін) бірнеше күн/апта/ай ішінде және оны жіктеуішті оқытуды жүргізу үшін арнайы орта ретінде пайдаланыңыз. Сіз Windows компьютерінен серверді Putty сияқты SSH клиентінің көмегімен басқара аласыз. VPS көмегімен каскадтар үйретілгеннен кейін оларды Windows компьютеріне жүктеуге болады, ал Windows ортасында кескінді тану бағдарламасын іске қосу үшін Python қолдануға болады.

Linux виртуалды сервері:

HAAR каскадты оқыту процестерін орындау үшін Linux виртуалды сервері (VPS) қажет. Бастапқыда мен 8 ГБ оперативті жады мен Ubuntu 16.04.6 (LTS) x64 бар серверді жалдадым, кейінірек каскадтарды үйрету жылдамдығын екі есе арттыратын екінші серверді жалдадым, бірақ сізге ең азы қажет

Бағдарламалық қамтамасыз ету:

  • Stellarium - бұл виртуалды планетарий/астрономия, еркін қол жетімді. Ол тестілеу үшін жұлдызша бейнелерін жинау үшін қолданылады.
  • Putty - бұл пәрмен жолы арқылы VPS басқару үшін пайдаланылатын SSH клиенті.
  • WinSCP - бұл Windows компьютерінен файлдарды тасымалдау үшін қолданылады.

2 -қадам: VPS орнату

VPS -ті іске қосу үшін шағын орнату процесі бар. Бірінші рет сізге біраз уақыт кетуі мүмкін, бірақ егер сіз қадамдарды мұқият орындасаңыз, бұл қиын емес. Бұл оқулық мен үшін керемет сілтеме болды, мен сізге осы нұсқаулықпен жұмыс жасау кезінде оқуды ұсынамын. Ол әріптерді орындау үшін қажет линукс командаларының ерекшеліктерін қамтиды.

Шамамен бұл процесс мыналарды қамтиды:

  1. Linux серверін Ubuntu дұрыс нұсқасымен құру.
  2. Серверді жаңарту және жаңарту.
  3. OpenCV орнатылған жұмыс кеңістігінің каталогын құру.
  4. Кейбір негізгі құралдарды, атап айтқанда компиляторды, әр түрлі кітапханаларды және Python байланыстырғыштарын орнату.

Бұл кезеңнен кейін сіз жаттығу процесіне дайындықты бастауға дайынсыз.

3 -қадам: процесс

HAAR каскадтарының көмегімен компьютерді көрудің бүкіл процесі бастапқыда шатастырады, сондықтан бұл қадам логиканы толығырақ сипаттайды:

Негізгі процесс

  1. Қызықты объекті жоқ бірнеше мың кескіннен тұратын теріс кескіндер жиынтығы бар. Бұл VPS -ке жүктелуі керек.
  2. Қызықты объектіні қамтитын бір ғана оң имидж құрылады. Бұл сонымен қатар VPS -ке жүктелуі керек.
  3. Жалғыз оң кескін таңдалған параметрлер жиынтығымен бұрмаланады, бұрмаланады, бұрылады және т.б. Бұл бір кескіннен үлкен оң деректер жиынтығын құрудың жасанды әдісі. (Мысықты сәйкестендіру сияқты басқа да нақты қосымшалар үшін сіз мысықтардың бірнеше мың суретін қолдана аласыз, бірақ егер сізде мұндай үлкен суреттер жиынтығы болмаса, бұл әдіс әрқашан сәйкес келмейді. Бұл жерде жасанды тәсіл қолданылады. тиімдірек болады, бірақ бұл осындай жағдайды қолданудың жалғыз нұсқасы).
  4. Оқыту процесі жүргізіледі, ол кезең -кезеңімен жүреді. Әр кезең кескіндер жиынтығындағы HAAR типті әр түрлі мүмкіндіктерді анықтау үшін каскадты дайындайды. Әр кезеңнің аяқталуына экспоненциалды түрде ұзағырақ уақыт қажет, ал жіктеуіштің тиімділігі әр уақыт сайын артады (сонымен қатар, сіз білетін болсаңыз, артық жаттығуға да болады!).
  5. Бір үйретілген каскад бір мақсатты нысанды іздей алады. Егер сіз бірнеше бірегей объектілерді анықтағыңыз келсе, сізге әрқайсысы үшін дайындалған каскад қажет болады. Бұл жағдайда мен солтүстік аспан жарты шарын қамти алатын жиынтық жасау үшін бірегей жұлдыз паттерлері үшін 50 -ге жуық түрлі каскадты үйреттім.
  6. Ақырында, жиынтықтың әрбір каскадын кіріс кескініне қарсы жүргізетін анықтау бағдарламасы қолданылады. Каскад кіріс суретінен өзінің мақсатты объектісін іздейді.
  7. Егер сәтті болса, мақсатты объект кіріс суретте анықталады.

нб егер спутниктік бағдар контекстінде қолданылса, суретті борттық камера арқылы түсіруге болады. Бұл суреттегі ең жарқын жұлдыздар анықталады және осы позицияларда маркерлер орналасқан. Содан кейін бұл сурет кіріс кескінінде мақсатты объектілердің бар -жоғын тексеретін дайындалған каскадтар жиынтығына ұсынылады. Егер нағыз позитив анықталса, онда белгілі шоқжұлдыздың спутниктік дененің осьтеріне қатысты бұрыштық орналасуы анықталады.

4 -қадам: Негативтер мен позитивтер

Негативтер

Каскадты оқытудың негізгі аспектісі - теріс суреттердің мүмкіндігінше үлкен жиынтығы. Біз мыңдаған, ең дұрысы он мыңдаған бейнелер туралы айтып отырмыз. Олардың нені қамтитыны маңызды емес, мақсат - әр түрлі визуалды ақпарат беру. Classifier Training қалтасында мен құрастырған әр түрлі теріс кескіндер жиынтығы бар. Бастапқыда бұл тек Stellarium -дан алынған жұлдызды дала суреттерінен тұрады, бірақ мен кейінірек рандомизацияланған суреттермен деректер жиынтығын толықтырдым (иә, менің мерекелік фотосуреттерімді қоса). Ондағы ең үлкен деректер жиынтығында 9000 -ға жуық сурет бар, бұл мен әзірге жасаған ең үлкен сурет болды. Мұны пайдалану арқылы сіз өзіңіздің жеке компиляцияңызды сақтайсыз.

Позитивтер

Оң сурет (бұл каскадты тануға үйретілетін мақсатты жұлдыз үлгісі) Stellarium -дегі жұлдыз үлгісінің скриншоты ретінде басталады. Питон бағдарламасы содан кейін суреттегі ең жарқын жұлдыздарды анықтайды және осы жұлдыздардың орналасуына маркерлерді (кейінірек нұсқаулықта түсіндіріледі) жабыстырады. Содан кейін бұл сурет 50x50 пиксельге дейін қысқарады. Бұл аз, бірақ каскадтар үшін қажетті жаттығу уақыты бұл көлем ұлғайған сайын экспоненциалды түрде артады, сондықтан бұл сапа мен уақыт арасындағы жақсы ымыраға келеді.

5 -қадам: жұлдызды бақылау

Жұлдызды бақылау
Жұлдызды бақылау
Жұлдызды бақылау
Жұлдызды бақылау

GitHub репозиторийінің Stellarium сценарийлері қалтасында мен жазған Stellarium бағдарламасын бақылау үшін жазылған үш бағдарлама бар. Оларды пайдалану үшін оларды Stellarium орнату қалтасының сценарийлер қалтасына қойыңыз. Оларды іске қосу үшін сіз сценарийлер терезесін Stellarium мәзірінен немесе Stellarium іске қосылатын және таңдалған бағдарламаны бірден іске қосатын сценарийлер қалтасындағы бағдарламаны екі рет шерту арқылы ашуға болады.

тезис_4 және тезис_5 аспан жарты шарларының сәйкесінше солтүстігі мен оңтүстігінің 2000 -ға жуық суретін түсіреді. Олар жағымсыз кескіндердің мәліметтер базасын құруға, жағымды имиджге қарсы жаттығуға қолданылды. Солтүстік пен оңтүстіктің арасындағы айырмашылық солтүстік жарты шардың жұлдызды үлгілерін аспан жарты шарының оңтүстік суреттер жиынтығына үйрету арқылы теріс деректер жиынтығында мақсатты (оң) жұлдыз үлгісі болмауын қамтамасыз етудің қарапайым әдісі болды. (Егер оң кескін теріс суреттер жиынтығында болса, ол жіктеуіш сапасына әсер етеді).

tezsis_setup сонымен қатар пайдалы - бұл ғарыштан көріністі имитациялау үшін қолданылатын суреттерді - Stellarium -ды суретке түсіру үшін қолайлы етіп орнатады. Ол суретті түсіргіңіз келген сайын қажет нәрсені сақтау үшін мәзірлерді, тор сызықтарын, жапсырмаларды және т. Автоматты түрде жасыру сияқты әрекеттерді жасайды.

6 -қадам: Зымыран адам

Зымыран адам
Зымыран адам

Мен үйреткен алғашқы каскадтар жұлдыздардың қандай да бір өрнегін дұрыс анықтай алмады. Олар өте сенімсіз болды және жалған позитивтерге өте бейім болды. Менің болжауымша, Stellarium-дегі жұлдызды өрістердің суреттері (негізінен қара фонда ақ нүктелер) жіктеуішті сәтті оқыту үшін HAAR типті мүмкіндіктерді қамтитын жеткілікті визуалды ақпаратты қамтымады. Менің ойымша, бұл түн болды, бірақ мен жұлдызды өрістің кескініндегі әрбір жарық жұлдыздың орналасқан жеріне шағын шағын суретті автоматты түрде орналастыру үшін бағдарлама жазу идеясын қолданып көруді шештім.

Элтон

Бұл ақымақтық сынақ болды, бірақ жұлдыздардың әр орналасуына Элтон Джонның кішкентай суретін қосып, жіктеуішті осы оң кескінге үйрету, содан кейін каскадтарды бастапқы кескінге қарсы жүргізу арқылы оны дұрыс табуда әлдеқайда тиімді болды. дұрыс үлгі. Мен бір нәрсеге бейім екенімді білдім!

7 -қадам: сенімді белгілер

Сенімді маркерлер
Сенімді маркерлер

«Элтондар» теорияны дәлелдегенімен, маған толық айналмалы симметриялы маркер қажет болды, сондықтан ол қандай бағытта ұсынылғанына қарамастан жұлдыз үлгісі бірдей болып көрінуі үшін. Мен маркердің көптеген түрлерін сынап көрдім және төменгі оң жақтағы түрдің контрастын қара -ақ сақиналармен тиімді екенін анықтадым. GitHub репо позитивті қалтасында ұсынылған питон бағдарламасы берілген суреттегі ең жарқын жұлдыздардың қалай анықталатынын көрсетеді және бұл белгілер осы позицияларда автоматты түрде қабаттасады. Біз қазір жаттығуға болатын негізгі жұлдыздардың үлгілерін ұсындық.

8 -қадам: каскадтарды пайдалану

Каскадтарды қолдану
Каскадтарды қолдану

Сіз каскадтар жиынтығын үйреткенде, сіз оларды суреттегі объектіні анықтау үшін қалай қолдану керектігін білуіңіз керек!

GitHub -тың Star Identification қалтасын қараңыз, онда сіз cascade_test19.py бағдарламасын таба аласыз. Бұл таңғажайып бағдарлама бағдарлама берілген қалтадан каскадтар жиынтығын алады және олардың барлығын кірістірілген кескінге қарсы жүргізеді және анықтаулар туралы есеп береді. 'DetectMultiScale' функциясы осының өзегі болып табылады және ол анықтау процесін анықтайтын әр түрлі аргументтерді қажет етеді. Оларды өзгерту каскадтық классификатордың жұмысында маңызды болып табылады және бұл туралы толығырақ келесі қадамда білуге болады, онда біз жалған позитивтерді жою жолдарын қарастырамыз.

Мұны спутниктік бағдарлау жүйесінде шектеу қорабының ортасындағы пиксель мәнін анықталған жұлдыз паттерінің Ra/Dec аспан координатына салыстыру арқылы, содан кейін оны кескіннің ортасынан бұрыштық ығысумен салыстыру арқылы қолдануға болады. ось). Осыдан, линзаның бұрмалануы туралы түсінікті қолдана отырып (гномоникалық проекцияға жуықталған) спутниктің бұрышын тек екі оң идентификациядан табуға болады.

9 -қадам: Жалған позитивтер туралы қалай позитивті болу керек

Жалған позитивтер туралы қалай позитивті болу керек
Жалған позитивтер туралы қалай позитивті болу керек
Жалған позитивтер туралы қалай позитивті болу керек
Жалған позитивтер туралы қалай позитивті болу керек

Бұл екі кескін каскадты бірдей суретке қарсы, бірақ әр түрлі параметрлері бар тестілеу нәтижелерін көрсетеді. Әрине, бірінші суретте шынайы сәйкестендіру бар, сонымен қатар жалған позитивтердің үлкен саны бар, ал екінші суретте тек дұрыс сәйкестендіру бар.

GitHub репо -ның Star Identification қалтасындағы cascade_test19.py бағдарламасы нәтижелерді сұрыптау үшін екі әдісті қолданады. Біріншіден, detectMultiScale функциясы табуға болатын Miminum және Maximum нәтиже өлшемін орнатады, бұл ақылға қонымды, себебі терезедегі мақсатты жұлдыз үлгісінің шамамен өлшемі (берілген линза мен үлкейту үшін - менің модельденген Stellarium суреттерім Raspberry Pi V2 камерасы) белгілі. Екіншіден, код ең үлкен шектеу жолағы бар нәтижені таңдайды (алдыңғы шектерде). Тестілеу кезінде бұл нағыз позитив екені анықталды. Үшіншіден, бағдарлама осы идентификаторды нағыз позитив ретінде қарастыру үшін қажет минималды 'levelWeights' (тиімді «сенімділік мәні») орнатады. Бұл әдіс бойынша каскадтар дұрыс нәтижені табуда тиімді болды.

Жұлдызды өрістердегі суреттермен қатар, мен мұны үстелімнің суреттерімен салыстырдым, мысалы, ноутбугымды, шыныаяқтарды анықтауға, жалған позитивтерді жоюға үйрету үшін каскадтарды үйрету. Жоғарыда аталған әдістер барлық жағдайларда жақсы жұмыс істеді.

10 -қадам: талқылау

Талқылау
Талқылау
Талқылау
Талқылау
Талқылау
Талқылау

Жақсартуға арналған аймақтар

Бұл мен үшін күрделі жоба болды және бұл тақырыпты түсінуге түрткі болды. Бұл жобаны осы уақытқа дейін жеткізу үшін бірнеше ай бойы толық уақытты жұмыс қажет болды, бірақ мен оны сізбен бөлісе аламын, бірақ әдістің тиімділігін жақсарту үшін әлі де көп жұмыс істеу керек. Айтуынша, ол белгілі бір шектеулерде жақсы жұмыс істей алады. Мен қай аймақтарға қосымша жұмыс қажет екенін анықтау үшін жұмыс жасадым, алдағы айларда бұл мәселелерді шешуге уақыт бөлемін деп үміттенемін. Олар:

Бұрыш - бұл күрделі аймақ, жіктеуіштердің нәтижелері айналмалы түрде өзгермейтін болуы керек, яғни ол мақсатты жұлдызшаның суретін көрсететін бұрышқа қарамастан, мақсатты жұлдыз үлгісін сенімді түрде анықтауы керек. Кіріс бейнесін бір бағытта қолдана отырып үйретілген каскад бұл кескінді кездейсоқ бағдар бойынша анықтай алмайды, сондықтан кіріс бұрыштары бойынша диапазонды қабылдай алатын каскадтарды жаттықтыру үшін оқу процесіне оң кескін бұрышының дисперсиясын енгізу қажет. Оқытудың каскадты командаларындағы 'maxzangle' параметрі радиан бойынша аргумент қабылдайды, ол берілген оң кескін берілген теріс кескіндерге жабылатын бұрыштың шегін басқарады, сондықтан алынған оң кескіндер жиынтығында бірқатар бағыттар болады. оң имидж. Алайда, бұл максималды бұрыш өскен сайын каскадты қабылдау коэффициенті (жалпы айтқанда, сапа) күрт төмендейді. Менің пікірімше, мен үлкен суреттер спектрін қосқанда да сапалы каскадтық классификаторды құруға болатындығына көз жеткізу үшін пайдаланғаннан гөрі теріс суреттердің едәуір үлкен базасын қолдана отырып каскадтарды үйрету керек.

Тағы бір ықтимал шешім - белгілі бір мақсат үшін бірнеше каскадтарды дайындау, олардың әрқайсысы 360 градусқа толық айналудың белгілі бір бөлігін басқарады. Осылайша әр каскадтың сапасын жоғары деңгейде сақтауға болады, бірақ екінші жағынан бұл әлдеқайда көп каскадтарға әкеледі, сондықтан сәйкестендіру процесі баяу болады.

'DetectMultiScale' функциясының мәні болып табылатын 'levelWeight' параметрі анықталған сенімділікке ұқсас. Осыны зерттей отырып, суреттің бағыты екі жаққа да жоғарылаған сайын оң идентификация сенімділігі күрт төмендейтінін көрсетеді, бұл осал нүкте деген ойды растайды.

Пиксельді орналастыру - бұл екі жұлдыздың жеке пиксельдері айқын көрінуі үшін жұлдызды кескіннің үлкейтілген көрінісін көрсететін келесі екі кескінмен бейнеленген пиксельді орналастыру. Бағдарламада суреттегі ең жарқын жұлдыздарды қоспағанда, барлығын тазалау үшін қолданылатын эрозия процесі бірінші жұлдызды сақтайды, ал екіншісі жарықтығы бірдей болғанына қарамастан, оларды жояды. Мұның себебі - бірінші жұлдыз пиксельде орналасқан, ал екіншісі онша емес. Эрозия функциясы топтың орталық пиксельінің айналасындағы пиксельдердің концентрлі сақиналарын алып тастайды, сондықтан бірінші жұлдыз эрозия функциясынан аман қалады, бірақ екінші жұлдыз кескіннен мүлде жойылады. Сондықтан сенімді белгілер екінші жұлдызға емес, бірінші жұлдызға ғана қойылады. Бұл белгілі бір жұлдызды өрістегі жарқын жұлдыздар маркерлерді алатын сәйкессіздіктерді тудырады (және, демек, үйретілген классификаторлармен салыстырылады) - сондықтан дұрыс позитивті бақылау мүмкін болмайды.

11 -қадам: Соңғы сөз

Соңғы сөз
Соңғы сөз

Менің нұсқаулықты оқығаныңыз үшін рахмет, сіз бұл жобаны қызықты деп таптыңыз деп үміттенемін. Бұл өте қызықты процесс болды, мен тұжырымдамамен жұмыс істей бастағаныма бір жылдан асты, мен осы уақытқа дейінгі нәтижелермен жігерленемін. Мен оқыған әдебиеттерден бұл өте түпнұсқалық тұжырымдама және оны дамыған сайын әуесқой астрономияға немесе одан да көп қосымшаларға қолдануға болады.

Бұл жоба мен үшін оқу қисығы болды, сондықтан бағдарламалау тәжірибесі бар кейбір оқырмандар GitHub беті арқылы жобаны жалғастыруға өз үлестерін қосады деп үміттенемін және біз бұл ашық бастапқы құралды дамытуды жалғастыра аламыз. Мен сіздердің пікірлеріңізді күтемін, бірақ қиын сұрақтарды көп қоймаңыздар!

Space Challenge
Space Challenge
Space Challenge
Space Challenge

Ғарыштық сайыста екінші орын

Ұсынылған: