ã©ã¤ãã©ãªãè±å¯ã§ãã¾ãã¾ãªéçºãè¡ããPythonã§ã¯ãç»åå¦çãç°¡åã«å®ç¾ã§ãã¾ããè¿å¹´ãAIï¼äººå·¥ç¥è½ï¼ã®çºéã«ãã£ã¦Pythonã®äººæ°ãé«ã¾ã£ã¦ãã¾ãããAIã®ç»åå¦çã§å©ç¨ããããã¨ã®å¤ããOpenCVãã¯ãåç¥ã§ãããããOpenCVãå©ç¨ããã°ãé¡èªèã追跡ãªã©ã®ç»åå¦çãé常ã«ç°¡æ½ãªã³ã¼ãã§è¨è¿°ã§ãã¾ãã
ãã®è¨äºã§ã¯ãOpenCVã®æ¦è¦ããã¤ã³ã¹ãã¼ã«æé ãåºæ¬çãªæä½æ¹æ³ã¨ä½µãã¦ãé¡èªèãå®ç¾ããããã®æ¹æ³ã解説ãã¾ãã
ï¼¼æåããåç»ã§å¦ã³ããããªãã¸ï¼
Udemyã§è¬åº§ãæ¢ã ï¼INDEX
OpenCVã¨ã¯ï¼
OpenCVã¯ã¤ã³ãã«ç¤¾ãéçºã»å ¬éãã¦ãããªã¼ãã³ã½ã¼ã¹ã®ã©ã¤ãã©ãªã§ãããã¨ãã¨ã¯Open Source Computer Vision Libraryã¨ããåç§°ã§ãããã2006å¹´ã«OpenCVã¨ãã¦çã¾ãå¤ããã¾ãããOpenCVã¯åç¨å©ç¨ã§ãã£ã¦ãç¡æã§å©ç¨ã§ããç»åå¦çãç»åè§£æãæ©æ¢°å¦ç¿åãã®æ©è½ãéç´ããã¦ãã¾ããä¾ãã°ãç·ãããã¹ããªã©ã®ç»åã®æç»ãã°ã¬ã¼ã¹ã±ã¼ã«åãé¡èªèãæåèªèãç©ä½ã®æ¤åºãªã©ãç°¡æ½ãªã³ã¼ãã§å®ç¾ã§ãã¾ãã
ã¾ããAIã®æ©æ¢°å¦ç¿ã«ãå©ç¨ã§ããç»åèªèç³»ã®AIéçºã§ã¯æ¬ ãããªãåå¨ã¨ãããã§ãããã

OpenCVã¯PythonãJavaãªã©ã§å©ç¨å¯è½
2022å¹´9ææç¹ã§ã®ææ°ãã¼ã¸ã§ã³ã¯ã2022å¹´6æã«å ¬éããã4.6.0ã§ããOpenCVã®4ç³»ã¯ãPythonãJavaãC++ã§å©ç¨ã§ãã¾ããOSãWindowsãMacãLinuxã ãã§ãªããAndroidãiOSã«ã対å¿ãã¦ãããããOpenCVãæ´»ç¨ããã¢ããªéçºãå¯è½ã§ããè¿å¹´ã§ã¯ãAIã«é¢é£ããã©ã¤ãã©ãªã®è±å¯ãããPythonã®äººæ°ãé«ã¾ã£ã¦ãããOpenCVã«ã¯æ©æ¢°å¦ç¿ã®æ©è½ããããããPythonã§å©ç¨ããããã¨ã®å¤ãã©ã¤ãã©ãªã§ãã
OpenCVã®ã¤ã³ã¹ãã¼ã«æé
Pythonã使ã£ã¦OpenCVãã¤ã³ã¹ãã¼ã«ããæé ãç´¹ä»ãã¾ããPythonã¯ã¤ã³ã¹ãã¼ã«æ¸ã¿ã®åæã§é²ãã¾ãã®ã§ãPythonã®ç°å¢æ§ç¯ãã¾ã ã®æ¹ã¯ãPythonã®éçºç°å¢ã¯ã©ãããã°è¯ãï¼çµ±åéçºç°å¢ãã¾ã¨ãã¦è§£èª¬ï¼ããåèã«éçºç°å¢ãç¨æãã¦ãã ããã
- Windowsã®å ´å
Windowsã§ã¯ã³ãã³ãããã³ãããéããæ¬¡ã®ã³ãã³ããå ¥åãã¦OpenCVãã¤ã³ã¹ãã¼ã«ãã¾ãã
ãpip install opencv-pythonã

â»ç»åã¯Anacondaãå©ç¨ããéçºç°å¢ã®ä¾
OpenCVãã¤ã³ã¹ãã¼ã«ããéã«ã¯numpyãå¿ è¦ã§ããã¤ã³ã¹ãã¼ã«ããã¦ããªãå ´åã¯OpenCVã¨ä½µãã¦ã¤ã³ã¹ãã¼ã«ããã¾ããã¤ã³ã¹ãã¼ã«å¾ã¯ãpip listãã³ãã³ãã使ã£ã¦ç¢ºèªããã¨ããã§ãããã
- Macã®å ´å
Macãåæ§ã«ã¿ã¼ããã«ãéãããpip install opencv-pythonãã³ãã³ããå ¥åãã¾ãã

ãªããç°å¢ã«ãã£ã¦å©ç¨ããã³ãã³ããå¤ããå ´åãããã¾ãããåºæ¬çã«ã¯pipã³ãã³ãã使ã£ã¦ã¤ã³ã¹ãã¼ã«ããæ¹æ³ãæãæè»½ã§ãã
ï¼¼æåããåç»ã§å¦ã³ããããªãã¸ï¼
Udemyã§è¬åº§ãæ¢ã ï¼OpenCVãPythonã§ä½¿ã£ã¦ã¿ããï¼åºæ¬æä½ã解説
å®éã«OpenCVãPythonã§ä½¿ãå ´åã®åºæ¬æä½ãè¦ã¦ããã¾ããããPythonã§OpenCVãå©ç¨ããéã«ã¯ããimport cv2ãã¨ãã¦ã¤ã³ãã¼ãããç¶æ ã§é²ãã¾ããããããå ã¯ãããããããããããã«Jupyter Notebookãå©ç¨ãã¦ããã¾ãããã©ã«ãæ§æã¯æ¬¡ã®éããã¹ã¯ãªããåããOpenCV-practiceãã¨ããç»åããimageããã©ã«ãã«æ ¼ç´ãã¦ããç¶æ ã§ãã


ã
ç»åã®èªã¿è¾¼ã¿ã»è¡¨ç¤ºã»ä¿å

ç»åã®èªã¿è¾¼ã¿ã»è¡¨ç¤ºã¯æ¬¡ã®å½ä»¤ã§è¡ãã¾ãã
ãcv2.resize(ç»åã®ãªãã¸ã§ã¯ã, dsize=None, fx=åæ°, fy=åæ°)ã
cv2.imreadã§èªã¿è¾¼ãã ç»åã¯ãimgã夿°ã«æ ¼ç´ããcv2.imreadã«æå®ãã¦è¡¨ç¤ºãããã¨ã§ãç»åã®éãç«ã®ç»åã表示ãããããã«ãªãã¾ããããã®ä»ã«ãã表示ããéã«ã¯æ¬¡ã®å½ä»¤ãä½µãã¦è¦ãã¦ããã¾ãããã
cv2.destroyAllWindowï¼ãã¹ã¦ã®ã¦ã£ã³ãã¦ãç ´æ£
waitKeyã¨destroyAllWindowã¯imshowã¨ã»ããã§å©ç¨ãããã¨ãå¤ãå½ä»¤ã§ãã
ç»åãä¿åããéã¯ããcv2.imwrite(ä¿åå , ç»åã®ãªãã¸ã§ã¯ã)ãã§è¡ãã¾ããå½ä»¤ãå®è¡ããã¨æ¬¡ã®ããã«ç»åãä¿åããã¾ããã

ã
ç»åã®ããªãã³ã°ã»ãªãµã¤ãº

ç»åã®ããªãã³ã°ã¯ã¹ã©ã¤ã¹ã使ã£ã¦ç»åã®ç¯å²ãæå®ãããã¨ã§å®ç¾ã§ãã¾ããç»åã®ä¾ã§ã¯ãé«ããy軸ã®0ï½120ã§æå®ãå¹ ãx軸ã®120ï½250ã§æå®ãã¾ãããå ç¨ã®ç«ç»åã®é¡é¨åã ããããªãã³ã°ããã¦ãããã¨ãåããã§ããããã¾ãããªãµã¤ãºã¯ãcv2.resizeãã§è¡ãã¾ãã大ãã2ã¤ã®æ¹æ³ããããããç¨éã«åããã¦é¸æãã¾ãããã
ãcv2.resize(ç»åã®ãªãã¸ã§ã¯ã, dsize=None, fx=åæ°, fy=åæ°)ã
dsizeãæå®ããã°ãã¯ã»ã«åä½ã§ã®èª¿æ´ãå¯è½ã§ãããfxãfyãæå®ãã¦åæ°ã§èª¿æ´ãããã¨ãå¯è½ã§ããä»åã®ä¾ã§ã¯ãfxã¨fyã0.5ï¼50%ï¼ã¨ãã¦åºåãã¦ãããããç»åã®ãµã¤ãºãååã«ãªã£ã¦ãã¾ãã

ã
ç»åã®ã°ã¬ã¼ã¹ã±ã¼ã«å

ã°ã¬ã¼ã¹ã±ã¼ã«ã¯ã«ã©ã¼ç»åãç½é»ç»åã«å¤æããå¦çã§ããç½ã¨é»ã ãã®2å¤åã¨ã¯ç°ãªããè²ã®æ¿æ·¡ã®ææãåãã¾ããç»åèªèã§ã¯èªèçãé«ããããã«ãä½è¨ãªæ å ±ã忏ããæ¹æ³ã¨ãã¦é »ç¹ã«å©ç¨ããã¾ããOpenCVã§ã¯æ¬¡ã®å½ä»¤ãå®è¡ããã ãã§ç°¡åã«ã°ã¬ã¼ã¹ã±ã¼ã«å¦çãå®äºãã¾ãã
ã
ç»åã®ï¼å¤å

ã°ã¬ã¼ã¹ã±ã¼ã«ã¯å®å ¨ãªç½é»ç»åã§ã¯ããã¾ããã§ãããã2å¤åã«ãã£ã¦ç½ã¨é»ã®2è²ã«å¤æã§ãã¾ãã2å¤åã¯é¡ãç©ä½ãªã©ã®è¼ªéãæç¢ºã«ã§ããç»åå ã®å¯¾è±¡ãããéç«ãããããã«å©ç¨ãããå¦çã§ããOpenCVã§ã¯ãcv2.thresholdãã使ã£ã¦ãããå¤ãè¨å®ããç»ç´ ããããå¤ä»¥ä¸ã§ããã°é»ï¼ã¾ãã¯ç½ï¼ããããå¤ä»¥ä¸ã§ããã°ç½ï¼ã¾ãã¯é»ï¼ã«å¤æãã¾ãã
ä»åã®ä¾ã§ã¯ã2å¤åã®æ¹æ³ã¨ãã¦ãcv2.THRESH_BINARYãã¨ãcv2.THRESH_BINARY_INVãã®2種é¡ãå©ç¨ãã¾ãããcv2.THRESH_BINARYã§ã¯ãç»ç´ ã127以ä¸ãªãé»ããã以å¤ãªãç½ã«å¤æããcv2.THRESH_BINARY_INVã§ã¯å転ãã¾ãã2å¤åããã¾ããããªãå ´åã¯ãä¸éå¤ã»ä¸éå¤ã®ãããå¤ã夿´ãã¦èª¿æ´ãã¦ãã ããã
ã
ç»åã¸ã®æç»ã»è¼ªéãç¸åã

OpenCVã§ã¯åãé·æ¹å½¢ã¨ãã£ãæç»ãç°¡åã«è¡ãªãã¾ããç»åå ã®æ¤åºç®æã«å³å½¢ãæç»ãããªã©ã®ä½¿ãæ¹ãå¯è½ã§ããã¾ãããªãã¸ã§ã¯ããæ¤åºãã¦è¼ªéãç¸åããã¨ãå¯è½ã§ãã®ã§ãããã§ã¯ç°¡åãªå³å½¢ã®æç»ã¨è¼ªéã®ç¸åããè¡ã£ã¦ã¿ã¾ããããã³ã¼ãã®å ¨æã¯æ¬¡ã®ã¨ããã§ãã

ä»åã¯ç°¡åãªå³å½¢ã®æç»ã¨è¼ªéã®ç¸åãã®ããã«ãnumpy.zerosã使ã£ã¦ãã£ã³ãã¹ãæç»ãããã®ä¸ã«å³å½¢ãæç»ãã¦ããã¾ããåãé·æ¹å½¢ã®æç»ã¯æ¬¡ã®å½ä»¤ã§è¡ãã¾ãã
é·æ¹å½¢ã®æç»ï¼cv2.rectangle(ç»åã®ãªãã¸ã§ã¯ã, (æç»éå§y軸,æç»éå§x軸), (æç»çµäºy軸,æç»çµäºx軸), (è²), æ ã®å¤ªã)
è²ï¼ï¼éè²,ç·è²,赤è²ï¼ã§æå®ããæ ã®å¤ªãã¯ãthicknessãã§æå®ãã¦ãã¾ããthicknessã¯-1ã¨ãããã¨ã§å¡ãã¤ã¶ããã仿§ã§ãã
ãã®å¾ãç¸åãå¦çã®ããã«ã°ã¬ã¼ã¹ã±ã¼ã«ã»2å¤åã宿½ããç¸åã対象ã®ãªãã¸ã§ã¯ãã®æ¤åºã«ã¯ãcv2.findContoursããç¸åãå¦çã«ã¯ãcv2.drawContoursãã使ç¨ãã¦ãã¾ãã
æç»ï¼cv2.drawContours(æç»å ã®ç»åãªãã¸ã§ã¯ã, æ¤åºãªã¹ã, ãªã¹ãã¤ã³ããã¯ã¹, (è²), æ ã®å¤ªã)
cv2.findContoursã¯æ¤åºããããã¹ã¦ã®è¼ªéãlistã§è¿ãã¾ããæ³¨æç¹ã¨ãã¦ãOpenCVã§ã¯é»ã®èæ¯ããç½ã®ç©ä½ã®è¼ªéãæ¢ããã¨ãåæã¨ãã¦ããããã2å¤åã®éã«ã¯æ³¨æãã¾ããããæ¤åºãªã¹ãã使ã£ã¦cv2.drawContoursã§æç»ãã¾ããããªã¹ãã¤ã³ããã¯ã¹ã«-1ãæå®ããã¨ãã¹ã¦ã®æ¤åºãªãã¸ã§ã¯ãã対象ã¨ãªãã¾ãã
ç»åã®ãã¹ãã°ã©ã 表示

ç»åãåæãã¦ãã¹ãã°ã©ã ã¨ãã¦è¡¨ç¤ºãããã¨ãå¯è½ã§ãããã¹ãã°ã©ã ã¯åº¦æ°åå¸ã示ãã°ã©ãã§ããããã®ä¾ã§ã¯éè²ã»ç·è²ã»èµ¤è²ã§ããããã®åå¸ã確èªã§ãã¾ãã
OpenCVã§ãã¹ãã°ã©ã ã使ããããã«ã¯ããcv2.calcHistãã使ç¨ãã¾ãã
ãã£ã³ãã«ã¯ã°ã¬ã¼ã¹ã±ã¼ã«ã§ããã°0ãã«ã©ã¼ç»åã®å ´åã¯BGRã®è²ç¸ã«å¯¾å¿ãã0ï½2ãæå®ãã¾ããä»åã¯ãã¹ã¦ã®è²ç¸ããã§ãã¯ãããããforæã§ç¹°ãè¿ãå¦çãã¦ãã¾ãããã¹ãã°ã©ã ã®ãµã¤ãºãã¬ã³ã¸ã¯ãä¸è¬çã«ã¯å ¨ç»ç´ å¤ã対象ã«ãããã[256][0,256]ãæå®ãã¦ããã¾ãããã
ãªãããã®ä¾ã§ã¯åãã©ã¡ã¼ã¿ã«ã©ãã«ï¼images=ãªã©ï¼ãä¸ãã¦ãã¾ãããä¸ããªãã¦ãåé¡ããã¾ããããã¹ãã°ã©ã ã®æç»ã«å¿ è¦ãªãã¼ã¿ã¯ãcv2.calcHistãã§åå¾ããã°ã©ãã®åºåã«ã¯Matplotlibã使ç¨ãã¦ãã¾ãã
Python + OpenCVã§ç°¡åã«é¡èªèãå®ç¾
OpenCVã®åºæ¬æä½ï¼Î±ã§äººç©ç»åã®é¡èªèãè¡ã£ã¦ã¿ã¾ããããä»åã¯æ¬¡ã®ç»åã使ã£ã¦é¡èªèãè¡ãã¾ãã

OpenCVã§ã¯äººç©ã®é¡ãä½ãªã©ãæ¤åºããããã®å¦ç¿ãã¼ã¿ãç¨æããã¦ããããããã¡ããå©ç¨ãã¾ããéçºç°å¢ã«ãã£ã¦ä¿åå ´æã¯ç°ãªãã¾ãããããã©ã«ãã§ã¯ãPythonã¤ã³ã¹ãã¼ã«ãã£ã¬ã¯ããª\Lib\site-packages\cv2\dataãé ä¸ã«ä¿åããã¦ãã¾ãã
ãã¡ã¤ã«ãè¦ã¤ãããªãå ´åã¯ãhaarcascadeãã§æ¤ç´¢ããã¨ããã§ãããã対象ã®ãã©ã«ãé ä¸ã«ã¯ãè¤æ°ã®å¦ç¿ãã¼ã¿ãä¿åããã¦ãã¾ãããä»åã¯ãã®ãªããããhaarcascade_frontalface_alt.xmlããå©ç¨ãã¾ãã

対象ã®ãã¡ã¤ã«ãã³ãã¼ããå®è¡ãã¡ã¤ã«ã®ãã©ã«ãã«ãdataããã©ã«ãã使ãã¦é ä¸ã«ä¿åãã¾ãã

å¦ç¿ãã¼ã¿ãè¦ã¤ãããªãå ´åã«ã¯ãå ¬å¼ãµã¤ãã§å©ç¨ãããã¼ã¸ã§ã³ã®ã½ã¼ã¹ãå ¥æããããããã³ãã¼ãã¦ãããã§ãããã

顿¤åºããããã®ã³ã¼ãã¨ãã¦ã¯ããcv2.CascadeClassifierãã§å¦ç¿ãã¼ã¿ãèªã¿è¾¼ã¿ããdetectMultiScaleãã§æ¤åºããcv2.rectangleãã§é¡ãå²ãããã«ãã¦ãã¾ãã

ãæ¤åºå¨.detectMultiScale(ã°ã¬ã¼ã¹ã±ã¼ã«ã®ãªãã¸ã§ã¯ã, 縮å°é, æä½ãµã¤ãº)ã
detectMultiScaleã§æ¤åºãã精度ãé«ããããã«ãã«ã©ã¼ç»åããã®ã¾ã¾å©ç¨ããã®ã§ã¯ãªã䏿¦ã°ã¬ã¼ã¹ã±ã¼ã«åããç»åãå©ç¨ãã¦ãã¾ããã¾ããæ¤åºçµæã¯ãªã¹ãã¨ãã¦è¿ããããããæ¤åºçµæãªã¹ããforæã§åããªããçå½¢æç»ã§é¡é¨åãå²ã¿ã¾ãã

é¡ãèªèããã¦èµ¤ãæ ã§å²ã¾ãã¾ããã
Udemyã§OpenCVã使ã£ãç»åå¦çããã£ã¨è©³ããå¦ã¼ãï¼
ä»åç´¹ä»ããOpenCVã®æ©è½ã¯ã»ãã®ä¸é¨ã§ããããé«åº¦ãªç»åå¦çãé«ç²¾åº¦ãªç»åèªèãæ©æ¢°å¦ç¿ãªã©OpenCVã使ãã°ãã¾ãã¾ãªç»åå¦çãå®ç¾ã§ãã¾ããä»åã¯åå¿è åãã«åºç¤çãªä½¿ãæ¹ã ãã解説ãã¦ãã¾ãã®ã§ãããã詳ããç¥ãããããé«åº¦ãªä½¿ãæ¹ãå¦ã³ãããã¨ããæ¹ã«ã¯ã次ã®ãããªåç»è¬åº§ãããããã§ãã
ãPythonã§å¦ã¶ãOpenCVã§ã®ç»åå¦çå
¥é
MediaPipeã»OpenCVã»Pythonã§ä½é¨ããç»åèªèæè¡ã®ä¸çãåå¦è
åãã
ç»åå¦çã®åºç¤ï¼ãã£ã«ã¿ãªã³ã°ããã¿ã¼ã³èªèããæ®åéç¨ã¢ãã«ã¾ã§
Udemyã§ã¯åå¿è ããä¸ç´ã»ä¸ç´è åãã¾ã§ãå¹ åºãåç»è¬åº§ãç¨æãã¦ãã¾ããOpenCVã使ãããªãããæ¹ã¯ãUdemyã®åç»è¬åº§ã§å¦ç¿ãã¦ã¿ã¦ã¯ãããã§ããããã
OpenCVã¯ç»åå¦çãç»åè§£æã»æ©æ¢°å¦ç¿åãã®æ©è½ãéç´ããããªã¼ãã³ã½ã¼ã¹ã®ã©ã¤ãã©ãªã§ããPythonã»Javaã»C++ã§å©ç¨ã§ããç»åèªèã®ããã«Pythonã§å©ç¨ããããã¨ãå¤ãã©ã¤ãã©ãªã¨ãããã§ããããOpenCVã使ãã°ãç°¡åãªç»åå¦çãããªãã¸ã§ã¯ãã®èªèãé¡èªèãªã©å¹ åºãé«åº¦ãªç»åå¦çãå®è£ ã§ãã¾ãã誰ã§ãç¡æã§ç°¡åã«å©ç¨ã§ããããããã®è¨äºãåèã«OpenCVã使ã£ã¦ã¿ã¾ãããã










ææ°æ å ±ã»ãã£ã³ãã¼ã³æ å ±çºä¿¡ä¸