package Ġcom . h hd . my and vide ot est . ar fit _ thread _ proto Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġcom . na ver . vide oc ell tech . logs lo th . Log S lo th Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . channels . consume Each Ċ Ċ class ĠAr fit Pipe Line Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ channel _ main Ġ= ĠChannel < List < Any >>() ĊĊĠĠĠ Ġprivate Ġval Ġ_ t _ calc Ġ= ĠCor outine Scope ( new Single Thread Context (" T _ CAL C ")) ĊĠĠĠ Ġprivate Ġval Ġ_ channel _ calc Ġ= ĠChannel < List < Any >>() ĊĊĠĠĠ Ġprivate Ġval Ġ_ cam Ġ= ĠMy Camera X () ĊĠĠĠ Ġprivate Ġval Ġ_ move Net Ġ= ĠMy Move Net () ĊĠĠĠ Ġprivate Ġval Ġ_ pose Analyzer Ġ= ĠMy Pose Analyzer () ĊĠĠĠ Ġprivate Ġval Ġ_ touch Analyzer Ġ= ĠMy Touch Analyzer () ĊĠĠĠ Ġprivate Ġval Ġ_ renderer Ġ= ĠMy Renderer () ĊĊĠĠĠ Ġprivate Ġvar Ġ_ touch Results : ĠMy Touch Results ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ pose Info : ĠMy Pose Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ land Marks : ĠMy Land Marks ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 4 4 5 8 9 6 6 9 / correct ly - implement ing - wait - and - notify - in - kotlin ĊĠĠĠ Ġ// Ġval Ġ_ lock Ġ= ĠRe entrant Lock () ĊĠĠĠ Ġ// Ġval Ġ_ lock _ condition Ġ= Ġ_ lock . new Condition () ĊĊĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////// // ĊĠĠĠ Ġ// Ġ 1 . ĊĠĠĠ Ġ// ĠíĮĮ ìĿ´ íĶĦ ëĿ¼ ìĿ¸ ìĿĺ Ġì ´Ī ê¸° íĻĶ ĊĠĠĠ Ġ// Ġë©Ķ ìĿ¸ ìĬ¤ ëłĪ ëĵľ ìĿĺ ĠìĨĮ ë¹Ħ ìŀĲ ë£ ¨ íĶĦ , Ġê³Ħ ìĤ° ìĬ¤ ëłĪ ëĵľ ìĿĺ ĠìĨĮ ë¹Ħ ìŀĲ ë£ ¨ íĶĦ ê°Ģ Ġì ´Ī ê¸° íĻĶ ëĲ ¨ . ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Scope (). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ channel _ main . consume Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġit [ 0 ] Ġas Ġ_ Cmd s ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cmd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ Cmd s . OPEN _ CAM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////// // ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġì¹ ´ë © Ķ ëĿ¼ ĠìĹ ´ ê¸° ëĬĶ ĠìĹ¬ ê¸° ( ë© Ķ ìĿ¸ ìĬ¤ ëłĪ ëĵľ ìĿĺ Ġì± Ħ ëĦ Ĳ ĠìĨĮ ë¹Ħ ìŀĲ Ġë £ ¨ íĶĦ ) ĠìĪĺ íĸī ëĲĺ ë¯ Ģë¡ľ Ġìĭľ ê°ģ ìłģ Ġì§ ģ ê´Ģ ìłģìľ¼ë¡ľ ëıĦ ĠìķĮ ê¸° ì ī ½ ê³ł Ġë©Ķ ìĿ¸ ìĬ¤ ëłĪ ëĵľ Ġìĭ¤íĸī ìĿ´ Ġê° ķ ìłľ ëĲ ¨ . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= Ġit [ 1 ] Ġas ĠCanvas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ open Cam ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ Cmd s . CLOSE _ CAM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cam . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ Cmd s . IMG _ REC V Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= Ġit [ 1 ] Ġas ĠCanvas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġit [ 2 ] Ġas ĠMy Image ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ draw ( canvas , Ġimage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ t _ calc . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ channel _ calc . consume Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġit [ 0 ] Ġas Ġ_ Cmd s ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cmd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ Cmd s . IMG _ REC V Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= Ġit [ 1 ] Ġas ĠCanvas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġit [ 2 ] Ġas ĠMy Image ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ calc ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Cam ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////// // ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . ĊĠĠĠĠĠĠĠ Ġ// Ġì¹ ´ë © Ķ ëĿ¼ ĠìĹ ´ ê¸° Ġëªħ ëł ¹ ìĸ´ ĠìłĦ ìĨ ¡ ĊĠĠĠĠĠĠĠ Ġ// Ġì¹ ´ë © Ķ ëĿ¼ ĠìĹ ´ ê¸° ëĬĶ ĠCamera X ìĿĺ Ġìłľ íķľ ìĤ¬ íķ Ń ìĥģ Ġê ¼ Ń Ġë©Ķ ìĿ¸ ìĬ¤ ëłĪ ëĵľ ìĹĲìĦľ ë§Į ĠìĪĺ íĸī íķ´ìķ¼ Ġíķ¨ . ĊĠĠĠĠĠĠĠ Ġ// Ġíķĺ ì§Ģë§Į ĠìĻ ¸ ë¶Ģ ìĿĺ Ġíĺ¸ì¶ľ ìŀĲ ëĬĶ Ġê·¸ ëŁ ° ê± ¸ ĠìķĮ ìĪĺ ĠìĹĨ ìĿĮ . ĊĠĠĠĠĠĠĠ Ġ// Ġê·¸ ëŀĺ ìĦľ ĠìĻ ¸ ë¶Ģ ìĿĺ Ġíĺ¸ì¶ľ ìŀĲ ê°Ģ ĠìķĦ ë¬´ ĠìĬ¤ ëłĪ ëĵľ ìĹĲìĦľ Ġë§ ī Ġíĺ¸ì¶ľ íķ ´ë ı Ħ Ġë¬¸ìłľ ĠìĹĨ ëıĦë¡Ŀ Ġë©Ķ ìĿ¸ ìĬ¤ ëłĪ ëĵľ ìĿĺ Ġì± Ħ ëĦ Ĳ ë¡ľ Ġëªħ ëł ¹ ìĸ´ ìĻĢ ĠìĿ¸ ìŀĲ ëĵ¤ ë§Į ĠìłĦ ìĨ ¡ íķ¨ . ĊĠĠĠĠĠĠĠ Ġ// Ġì± Ħ ëĦ Ĳ ìĹĲ ĠìłĦ ìĨ ¡ íķĺëĬĶ Ġíķ¨ìĪĺ ĠìŀĲ ì² ´ë ı Ħ Ġsuspend ĠìĿ´ë Ŀ¼ ìĦľ ĠìĤ¬ìļ© íķĺê¸° Ġë¶Ī íİ ¸ íķĺ ëĭĪ ĠGlobal Scope . launch ĠìĿ´ìļ© íķ´ìĦľ ĠìĬ¤ ëłĪ ëĵľ í Ĵ Ģ ĠëĤ ´ë ¶ Ģ ìĹĲìĦľ ĠìĬ¤ ëłĪ ëĵľ ĠíķĺëĤĺ Ġìĸ » ìĸ´ ìĦľ Ġë¸ Ķ ë¡ľ í Ĥ ¹ ëıĦ ĠìĹĨ ìľ¼ ë©´ ìĦľ ĠìŀĲ ìĽĲ ëıĦ ĠìķĦ ê » ´ ìĦľ ĠìĪĺ íĸī íķ¨ . ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ channel _ main . send ( listOf (_ Cmd s . OPEN _ CAM , Ġcanvas )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose Cam () Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ channel _ main . send ( listOf (_ Cmd s . CLOSE _ CAM )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ_ calc ( image : ĠMy Image ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ land Marks Ġ= Ġ_ move Net . calc Land Marks ( image ) ĊĠĠĠĠĠĠĠ Ġ_ pose Info Ġ= Ġ_ pose Analyzer . calc Pose Info (_ land Marks !! ) ĊĠĠĠĠĠĠĠ Ġ_ touch Results Ġ= Ġ_ touch Analyzer . calc Touch Results (_ pose Info !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ_ draw ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġimage : ĠMy Image ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ renderer . draw ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ land Marks , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ pose Info , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ touch Results ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ_ open Cam ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ cam . open Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// //////////////////////////////////////////////////////////////////////////// // ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠìĹ¬ ê¸° ê°Ģ Ġì¤ĳ ìļĶ íķ¨ . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠìĿ´ë¯¸ ì§Ģ ĠìĪĺ ìĭł Ġì ½ ľ ë° ± ìĿĢ ĠCamera X ĠëĤ ´ë ¶ Ģ ĠìĬ¤ ëłĪ ëĵľ ìĿ´ ì§Ģë§Į Ġíĺ¸ì¶ľ ìŀĲ ëıĦ ĠíĮĮ ìĿ´ íĶĦ ëĿ¼ ìĿ¸ Ġê°ľë°ľ ìŀĲ ëıĦ ĠìĦľ ë¡ľ Ġì ī ½ ê²Į ĠìķĮ ìĪĺ ĠìĹĨ ëĬĶ Ġìĥģíĥľ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠìĬ¤ ëłĪ ëĵľ Ġë¶Ħ ìĦĿ Ġíķł ĠíķĦìļĶ ëıĦ ĠìĹĨ ìĿ´ , Ġëĭ¤ìĿĮ ĠìļĶ êµ¬ ìĤ¬ íķ Ń ìĿ¸ Ġë¶Ħ ìĦĿ ìŀĳ ìĹħ ëĵ¤ ê³¼ Ġëł Į ëįĶ ë§ģ ìŀĳ ìĹħ ìĿĦ Ġì²ĺë¦¬ íķł ĠìĪĺ ĠìŀĪëĭ¤ . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠìļĶ êµ¬ ìĤ¬ íķ Ń ê³¼ Ġìłľ ìķ½ ìĤ¬ íķ Ń ìĿĢ ĠìķĦëŀĺ ìĻĢ Ġê°Ļ ìĿĮ . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġë¶Ħ ìĦĿ ìŀĳ ìĹħ ìĿĢ ĠìĿ´ë¯¸ ì§Ģ íĶĦ ëłĪ ìŀĦ ìĹĲ ĠìĪ ľ ìĦľ ì¢ ħ ìĨį ëĲĺìĸ´ Ġê°ģ Ġëĭ¨ ê³Ħ ê°Ģ Ġë ģ Ŀ ê¹Įì§Ģ ĠìĪ ľ ì°¨ ìłģìľ¼ë¡ľ Ġì²ĺë¦¬ ëĲĺ ìķ¼ Ġíķĺ ê³ł Ġë©Ķ ìĿ¸ ìĬ¤ ëłĪ ëĵľ ê°Ģ ĠìķĦ ëĭĪ ëĿ¼ ëıĦ Ġìĥģ ê´Ģ ìĹ Ĩ ìĿĮ . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġëł Į ëįĶ ë§ģ ìŀĳ ìĹħ ìĿĢ ĠìĿ´ë¯¸ ì§Ģ íĶĦ ëłĪ ìŀĦ ìĹĲ ĠìĪ ľ ìĦľ ì¢ ħ ìĨį ëĲĺ ì§Ģë§Į Ġëł Į ëįĶ ëŁ¬ Ġíķľ ëĭ¨ ê³Ħ Ġë ¿ Ĳ ìĿ´ ê³ł Ġë©Ķ ìĿ¸ ìĬ¤ ëłĪ ëĵľ ìĹĲìĦľ Ġì²ĺë¦¬ ëĲĺ ìķ¼ Ġíķĺ ê³ł , ĠíĬ¹ íŀĪ Ġë¹ ¨ ë¦¬ Ġì²ĺë¦¬ ëĲĺ ìķ¼ Ġíķ¨ . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġê·¸ ëŁ¬ ë¯ Ģë¡ľ ĠìĿ´ë¯¸ ì§Ģ íĶĦ ëłĪ ìŀĦ ìĿĦ ĠìĪĺ ìĭł íķĺëĬĶ Ġì ¦ ī ìĭľ Ġë©Ķ ìĿ¸ ìĬ¤ ëłĪ ëĵľ ìĹĲ Ġëł Į ëįĶ ë§ģ ìĿĦ Ġëªħ ëł ¹ ìļĶ ì²Ń íķĺê³ł , Ġë ŀ ľ ëĵľ ë§Ī íģ¬ / íı¬ ì¦ Ī ìłķ ë³´ / íĦ° ì¹ĺ ìłķ ë³´ Ġëĵ± Ġë į°ìĿ´ íĥĢ ëĵ¤ ìĿĢ Ġìµľ ìĭł ì º Ĳ ìĭľ ë¥¼ Ġê·¸ ë ĥ ¥ ĠìĤ¬ìļ© íķ¨ . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġê·¸ ë¦¬ ê³ł Ġë¶Ħ ìĦĿ ê³Ħ ìĤ° ìŀĳ ìĹħ ëĵ¤ ìĿĢ ĠìĿ´ë¯¸ ì§Ģ íĶĦ ëłĪ ìŀĦ ĠìĪĺ ìĭł íķĺëĬĶ ĠìĨį ëıĦ ë³´ ëĭ¤ ĠëĬ Ĳ ë¦¬ ëĭĪ ê¹ Ĳ ĠìĿ´ë¯¸ ì§Ģ íĶĦ ëłĪ ìŀĦ ĠìĪĺ ìĭł íķł ë ķĮ ë§ Īëĭ¤ Ġë¶Ħ ìĦĿ ê³Ħ ìĤ° ì ± Ħ ëĦ Ĳ ìĿĦ Ġê³Ħ ìĨį Ġë¹Ħ ìļ° ë©´ ìĦľ Ġë§Ī ì§Ģ ë§ ī Ġíķľ ê°ľ ìĿĺ ĠìļĶ ì²Ń ë§Į ĠìłĦ ëĭ ¬ íķ´ìĦľ Ġë§Ī ì§Ģ ë§ ī ĠìļĶ ì²Ń ë§Į Ġì²ĺë¦¬ íķł ĠìĪĺ ĠìŀĪ ëıĦë¡Ŀ Ġíķ¨ . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ channel _ main . send ( listOf (_ Cmd s . IMG _ REC V , Ġcanvas , Ġimg )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(!_ channel _ calc . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog S lo th . d ("_ channel _ calc . receive () Ġ... ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ channel _ calc . receive () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ channel _ calc . send ( listOf (_ Cmd s . IMG _ REC V , Ġcanvas , Ġimg )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġenum Ġclass Ġ_ Cmd s Ġ{ ĊĠĠĠĠĠĠĠ ĠOPEN _ CAM , ĊĠĠĠĠĠĠĠ ĠCLOSE _ CAM , ĊĠĠĠĠĠĠĠ ĠI MG _ REC V , ĊĠĠĠ Ġ} Ċ }