Гарааны бизнес, технологийн ертөнц, энтрепрёнершип гэсэн үгс сүүлийн үед их таарч байгаа байх. Энэ тухай мэдээлэл дундаас дараах хэдэн мэдээг онцловол,
- Украйны Looksery царай таних, нүүр хувиргах технологийн гарааны компанийг гэрэл зураг хуваалцах Snapchat компани өнгөрсөн онд худалдан авчээ. Уг арилжаа Украины түүхэнд хамгийн том технологийн наймаа болжээ.
- Беларусын Masquerade буюу MSQRD нүүр хувиргадаг хамгийн эрэлттэй аппыг Фэйсбүүк худалдаж авчээ. Минск хотод болсон Hackathon тэмцээнд компьютерийн программист гурван залуусын 48 цагийн дотор аппын анхны загвараа хийж, улмаар хөрөнгө оруулагчдаас 1 сая ам. долларыг татаж авсанаар уг гарааны компаниа эхлүүлсэн байна.
Энэ гарааны компаниудыг тус бүр ~150 сая орчим ам. доллараар авч, гэхдээ гол нь эдгээр шинэлэг, гоё аппуудын цаадах технологийг нь илүү сонирхоё. Технологи, шинжлэх ухаан хоёрыг нэг зоосны хоёр тал гэх нь бий. Тиймээс зоосны сүлдтэй тал буюу компьютерийн шинжлэх ухаан, бүр нарийвчлавал компьютерийн хараа (computer vision, товчоор CV), тэр дундаа нүүр царайг таних (facial recognition) алгоритмуудтай товч танилцая.
Компьютерийн хараа
CV нь математик, алгебр, дүрслэх геометр, оптик физик, магадлалын онол, статистик, загварчлал, хиймэл оюун ухаан, машин сургалт, зураг дүрслэл, программчлал гэсэн олон ШУ-ны мэдлэг ололт дээр суурилдаг бөгөөд тухайн судлаач эрдэмтэдээс эдгээр салбарын чамгүй мэдлэг, ур чадвартай байхыг шаарддаг тул харьцангуй түвэгтэй гэгдэх салбар юм. Гэхдээ их сонирхолтой шүү ;-)
(Зургийг Стэнфордын их сургуулийн “CS131: Computer Vision: Foundations and Applications” хичээлээс авч ашиглав)
Компьютерт бүхий л мэдээлэл, өгөгдөл 2тын тоололын системээр дүрслэгддэг тул бидний харж буй зураг, дүрсүүдийг дан тоонууд хэлбэрээр хардаг, таньдаг гэж ойлгож болно.
(Зургийг “Learning OpenCV Computer Vision in C++ with the OpenCV Library 2nd edition, 2016” номноос авч ашиглав)
Дээрх жишээ зурагт машины дүрслэлийн 10тын тоололын хувилбарыг харуулав. Хүн аливаа бодит юмсыг нүдээр харж, түүний дүрслэл нь тархинд очиж буудагтай адил компьютерт камераар харж, түүний дүрслэл нь тоонуудад хувирч боловсруулагдана. Эндээс харахад компьютерийн хараа (CV) нь байгаль дээрх бодит юмсыг компьютер руу хөрвүүлж, буулгадаг буюу компьютер графикийн урвуу үйлдэл ч гэж ойлгож болно.
(Зургийг Стэнфордын их сургуулийн “CS131: Computer Vision: Foundations and Applications” хичээлээс авч ашиглав)
Компьютерт зураг дүрслэл нь бодит тоон утгаас тогтсон матриц хэлбэртэй байх ба матрицийн нэг элемент бүр нь харгалзан өнгөний тоон утга (pixel)-тай байна. Жишээ нь, хар цагаан өнгөнөөс тогтсон саарал (grayscale) зураг нь 8 бит бүхий цэг (pixel)-үүдээс бүтнэ.
(Зургийг Стэнфордын их сургуулийн “CS131: Computer Vision: Foundations and Applications” хичээлээс авч ашиглав)
Өнгөт зураг нь RGB гэсэн 3н матрицаас тогтох ба тухайн зургийг хэмжээсээр өөрчлөх (scale), эргүүлэх (rotate), тодролыг өөрчлөх (brightness) үйлдлүүд нь матрицуудыг үржүүлэх, нэмэх, бодит тоогоор хуваах зэрэг математикийн үйлдэл болно. Одоо бага зэрэг хүндрүүлье. Зураг гэдэг нь компьютерт матриц хэлбэртэй байдаг гэдгийг мэдсэн, тэгвэл аливаа A матрицийг UΣVT гэсэн 3н матрицийн үржвэрт задлаж болох ба үүнийг Singular Value Decomposion (SVD) гэнэ. U, V – нь эргүүлэх (rotation), Σ – нь хэмжээс өөрчлөх (scaling) матрицууд.
Уг U – матрицийн багануудыг Principal Component гэх бөгөөд (U*Σ) үржвэр матрицын эхний баганыг VT матрицийн эхний мөрөөр үржүүлсэн нь эхний principal component элемент болох ба үүнийг Apartial – эх A матрицийн нэг хуваагдал буюу нэмэгдэхүүн матриц гэнэ. Иймд бүх Apartial матрицуудын нийлбэрт эх A матриц өөрөө гарна.
(Зургийг Стэнфордын их сургуулийн “CS131: Computer Vision: Foundations and Applications” хичээлээс авч ашиглав)
Эдгээр Apartial матрицууд нь эх зургийн тойм бүдүүвчийг хурдан, хялбархан гаргаж ирдэг тул практикт ихээхэн том хэмжээтэй зурагтай ажиллах, зураг боловсруулах алгоритм зэрэг ажиллагааны гол суурь болдог. Үүнийг Principal Component Analysis (PCA) гэнэ. Дээрх жишээ зурагт, нийт 300н principal component -ын зөвхөн эхний 100н утгаас тогтсон матрицаар эх зургийг тоймлон дүрслэж байгааг харуулж байна.
Царайг илрүүлэх, таних
Тэгэхээр зураг, видео дундаас эхлээд хүний царай байгаа хэсгийг олж ирүүлнэ, дараа нь нүд, ам, хамар зэрэг зүйлсийг зөв олох хэрэгтэй. Царайг илрүүлэх олон алгоритм байдаг, тэдгээрээс 2001 онд Paul Viola, Michael Jones нарын боловсруулсан Viola-Jones алгоритмыг жишээ авая.
Энэ нь хүний нүүрний онцлог шинж чанар дээр тулгуурлаж таньдаг, нүдний төв хэсэг нь эргэн тойрны хэсгээс илүү бараан, хамарын дунд хэсэг бусад хэсгээс илүү цайвар өнгөтэй гэх мэтчилэн бараан цайвар цэгүүдийн ялгаатай байгаа хэсгийг тооцоолно. Алгоритмыг дэлгэрэнгүй тайлбарах нь хэт мэргэжлийн тал руу хэлбийх тул ингээд орхиё ;-) Гэхдээ энэ арга нь харьцангуй бага тооцоолол хийж, хурдан хугацаанд нүүрийг олдог боловч нүүр хажуу тийш их эргэсэн, гэрэлтүүлэг муутай үед сайн ажилладаггүй муу талуудтай.
Царайг нэгэнт илрүүлээд байршлыг нь олсон хойно, одоо түүн дээр ажиллах хэрэгтэй. Өөрөөр хэлбэл таны нүүрний өө сэвийг арилгаж, нүд үсний өнгийг өөрчлөх, зомби эсвэл төмөр хүний багтай болгож нэмэлт зураг давхарлаж харуулах гэх мэт үйлдлүүдийг хийхийн тулд нүд, ам, хамар зэргийн байршил, координатыг олно.
Хүний нүүр царайг нийт 68 цэг байршуулан хэмжих (face landmark estimation) алгоритмыг 2014 онд Vahid Kazemi, Josephine Sullivan нар боловсруулсан байна. Жишээ пайтон кодыг эндээс авч ажиллуулж үзэж болно. Ингээд зураг, видеоноос хүний нүүрийг олж, ялгаж авсан хойно одоо шинэлэг юу хийж, яах нь дараачийн өөр асуудал боллоо.
Компьютерийн шинжлэх ухаан, технологийг "зоосны сүлдтэй талаас" нь товчхон сонирхууллаа ;-)
"Engineers turn dreams into reality" by Hayao Miyazaki
nice post!