PHPãšãµãŒããŒç®¡çã®2ã€ã®ããã«äž»ã«è²¢ç®ããŸããã ç§ã¯ããã2ã€ã®åéã®æ¥ç¹ã§ä»äºãããã®ã奜ãã§ãããç§ã®é¢å¿ã®ç¯å²ã¯ãã£ãšåºãã§ãã
å€ãã®éçºè ãšåæ§ã«ãç§ã¯ãã°ãã°ä»ã®äººã®ä»äºã®çµæïŒHabréã®èšäºãgithubã®ã³ãŒããªã©ïŒã䜿çšããã®ã§ãããã«å¿ããŠã³ãã¥ããã£ãšçµæãå ±æã§ããããšãåžžã«å¬ããæã£ãŠããŸãã èšäºãæžãããšã¯ãã³ãã¥ããã£ãžã®åéã®è¿æžã§ããã ãã§ãªããå¿ãåãããã人ã ãèŠã€ããçãåéã®å°é家ããã³ã¡ã³ããåŸãŠããã®åéã®ç¥èãããã«æ·±ããããšãã§ããŸãã
å®éããã®èšäºã¯ãããã®ãã€ã³ãã®1ã€ã«ã€ããŠã§ãã ãã®äžã§ãç§ã¯éå»6ãæéã«ã»ãšãã©ãã¹ãŠã®èªç±æéãéãããããšã説æããŸãã éè·¯ãæž¡ã£ãŠæµ·ã«æ³³ãã«è¡ã£ãç¬éã«å ããŠããã¬ãçªçµãèŠãããã²ãŒã ããããããŸããã
çŸåšããæ©æ¢°åŠç¿ãã¯éåžžã«çºå±ããŠãããHabrãå«ãå€ãã®èšäºãæžãããŠãããã»ãšãã©ãã¹ãŠã®éçºè ãä»äºã®ã¿ã¹ã¯ãããŒã ãããžã§ã¯ãã§ããã䜿çšããŠäœ¿ãå§ããããšæã£ãŠããŸããåžžã«ã¯ãªã¢ã åå¿è åãã®ã»ãšãã©ã®èšäºã«ã¯ã人çã足ããªããã®ãèªãããã®å€ãã®æåŠãè±èªã³ãŒã¹ïŒãããŠç§ãã¡å šå¡ããã·ã¢èªã»ã©å¹æçã«è±èªãåŠã¶ããšãã§ããããã§ã¯ãããŸããïŒããå®äŸ¡ãªããã·ã¢èªã³ãŒã¹ãªã©ããããŸãã
ç¹å®ã®åé¡ã解決ããããã®æ°ããã¢ãããŒãã説æããæ°ããèšäºãå®æçã«è¡šç€ºãããŸãã githubã§ã¯ãèšäºã«èšèŒãããŠããã¢ãããŒãã®å®è£ ãèŠã€ããããšãã§ããŸãã ããäžè¬çã«ã¯ããã°ã©ãã³ã°èšèªãšããŠäœ¿çšãããŸãïŒc / c ++ãpython 2/3ãluaããã³matlabãããã³ãã¬ãŒã ã¯ãŒã¯ãšããŠïŒcaffeãtensorflowãtorchã 誰ããæžããŠãã-誰ãäœãããŠããã ããã°ã©ãã³ã°èšèªãšãã¬ãŒã ã¯ãŒã¯ã®å€§èŠæš¡ãªã»ã°ã¡ã³ãåã«ãããå¿ èŠãªãã®ãèŠã€ããŠãããžã§ã¯ãã«çµ±åããããã»ã¹ãéåžžã«è€éã«ãªããŸãã ãŸããæè¿ãäžåœèªã®ã³ã¡ã³ãä»ãã®å€ãã®ãœãŒã¹ã³ãŒãããããŸãã
opencvã®ãã®æ··ä¹±ããªããšãããŠæžããããã«ãã¡ã€ã³ãã¬ãŒã ã¯ãŒã¯ã§èšç·Žãããã¢ãã«ã䜿çšã§ããdnnã¢ãžã¥ãŒã«ãè¿œå ããŸãã ã ç§ã®åŽã§ã¯ããã®ã¢ãžã¥ãŒã«ãphpãã䜿çšããæ¹æ³ã瀺ããŸãã
How_standardsã¯multipliing.jpgã§ã
ããããæ°é
ãã®ããèªè
ã¯ããã«ãã®åçã«ã€ããŠèãã圌ã¯éšåçã«æ£ããã§ãããã
Jeremy Howard ïŒç¡æã®å®è·µã³ãŒã¹ãã³ãŒããŒåãæ©æ¢°åŠç¿ãã®äœæè ïŒã¯ãæ©æ¢°åŠç¿ã®åŠç¿ãšå®è·µã®éã«å€§ããªéçããããšèããŠããŸãã
ãã¯ãŒãã¯ã 1幎ã®ããã°ã©ãã³ã°çµéšã§æ©æ¢°åŠç¿ã®åŠç¿ãéå§ããã«ã¯ååã ãšèšããŸãã ç§ã¯åœŒã«å®å šã«åæããç§ã®èšäºãæ©æ¢°åŠç¿ã«æ £ããŠããªãPHPéçºè ã®opencvã«åå ããããã®ãããå€ãäžããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãããŸã 圌ãããããè¡ããã©ããããããªãããŸããã¹ãŠã®ãã€ã³ãã説æããããšããç§ã¯æ°æéãè²»ãããã®ã§ã1åãããããªãã£ãã
ããã§ã¯ãããŽä»¥å€ã«äœãããŸãããïŒ
ïŒopencvãçäœã§ç§ã蚎ããªãããšãé¡ã£ãŠããŸãïŒ
SWIGã䜿çšããŠèªåã§php-opencvã¢ãžã¥ãŒã«ãäœæããããšãæ€èšããããã«å€ãã®æéãè²»ãããŸããããäœãéæããŠããŸããã ç§ã¯c / c ++ãç¥ãããphp 7ã®æ¡åŒµæ©èœãæžããªãã£ããšããäºå®ã«ãã£ãŠè€éã«ãªããŸãããæ®å¿µãªããšã«ãphpæ¡åŒµæ©èœã«é¢ããã€ã³ã¿ãŒãããäžã®è³æã®ã»ãšãã©ã¯php 5çšã«æžãããŠããã®ã§ãå°ããã€æ å ±ãåéããèªåã§åé¡ã解決ããªããã°ãªããŸããã§ããã
次ã«ãgithubã®æ¡åŒµã§php-opencvã©ã€ãã©ãªãèŠã€ããŸãããããã¯ãopencvã¡ãœãããåŒã³åºãphp7ã®ã¢ãžã¥ãŒã«ã§ãã ãµã³ãã«ã®ã³ã³ãã€ã«ãã€ã³ã¹ããŒã«ãå®è¡ã«æ°æ¥ããããŸããã ãã®ã¢ãžã¥ãŒã«ã®ããŸããŸãªæ©èœãè©ŠããŠã¿ãŸããããããã€ãã®æ¹æ³ãæ¬ ããŠãããããèªåã§è¿œå ãããã«ãªã¯ãšã¹ããäœæããã©ã€ãã©ãªã®äœæè ãæ¿èªããŸããã ãã®åŸãããã«å€ãã®æ©èœãè¿œå ããŸããã
ããããããã®æç¹ã§èªè ã¯èªåã«è³ªåãããã§ãããïŒ ãªãèè ã¯ãã®ãããªåé¡ããŸã£ããå¿ èŠãšããªãã£ãã®ãããªãpythonãštensorflowã®äœ¿çšãéå§ã§ããªãã£ãã®ãïŒ
çãã 泚æãéå±ããèšãèš³ïŒ
äºå®ãç§ã¯æ©æ¢°åŠç¿ã®å°é家ã§ã¯ãããŸããããã®æ®µéã§ã¯ãç¹å®ã®çã課é¡ã解決ããç¬èªã®ã¢ãããŒããéçºããããšã¯ã§ããŸãããããã¯ç¹èš±äºé
ã§ãã ããšãã°ãåŠäœãæã€äžåœäºº5人ãããããŸããã圌ãã¯mtcnnãéçºããmatlabãšcaffeã§å®è£
ãäœæããŸããã 次ã«ãä»ã®3人ã®äžåœäººããã®ã³ãŒããC ++ãšcaffeãPythonãšmxnetãPythonãšcaffeã«ç§»æ€ããŸããã ããããæ¢ã«æšæž¬ããããã«ãpythonãštensorflowã ããç¥ã£ãŠããããšã¯ããã»ã©é ããããŸããã äžåœèªã®ç°ãªããã¬ãŒã ã¯ãŒã¯ãšã³ã¡ã³ãã䜿çšããŠãç°ãªãèšèªã®ã³ãŒããåžžã«åŠçããå¿
èŠããããŸãã
å¥ã®äŸãšããŠã opencvã®facemarkã䜿çšãããã£ãã®ã§ãããæ®å¿µãªããšã«ãèè ã¯Pythonã§äœæ¥ãããšãã«ãã®ã¢ãžã¥ãŒã«ã®ãµããŒããè¿œå ããŸããã§ããã åæã«ãphpã«ãã§ã€ã¹ããŒã¯ãã€ã³ããŒãè¿œå ããã®ã«1æ©ããããŸããã
ãŸããããã€ãã®æ瀺ã«åŸã£ãŠãopenjsãnodejsã§åäœããããã«ã³ã³ãã€ã«ããããšããŸããããããŸããŸãªãšã©ãŒãçºçããçµæãéæã§ããŸããã§ããã
ã»ãšãã©ã®å Žåããã¹ãŠã®å°é£ã«ããããããããããè¡ãããšã«èå³ããããŸããã
å¥ã®äŸãšããŠã opencvã®facemarkã䜿çšãããã£ãã®ã§ãããæ®å¿µãªããšã«ãèè ã¯Pythonã§äœæ¥ãããšãã«ãã®ã¢ãžã¥ãŒã«ã®ãµããŒããè¿œå ããŸããã§ããã åæã«ãphpã«ãã§ã€ã¹ããŒã¯ãã€ã³ããŒãè¿œå ããã®ã«1æ©ããããŸããã
ãŸããããã€ãã®æ瀺ã«åŸã£ãŠãopenjsãnodejsã§åäœããããã«ã³ã³ãã€ã«ããããšããŸããããããŸããŸãªãšã©ãŒãçºçããçµæãéæã§ããŸããã§ããã
ã»ãšãã©ã®å Žåããã¹ãŠã®å°é£ã«ããããããããããè¡ãããšã«èå³ããããŸããã
äžè¬ã«ããããŸã§ã®ãšãããphpã§opencvã䜿çšããããšã«æºè¶³ããŠããŸãã
ããã¯ãç»åã®èªã¿èŸŒã¿ã®æ§åã§ãã
$image = cv\imread("images/faces.jpg");
æ¯èŒã®ããã«ãPythonã§ã¯æ¬¡ã®ããã«ãªããŸãã
image = cv2.imread("images/faces.jpg")
PHPïŒããã³c ++ïŒã§ç»åãèªã¿åãå Žåãæ å ±ã¯Matãªããžã§ã¯ãïŒãããªãã¯ã¹ïŒã«ä¿åãããŸãã phpã§ã¯ããã®ã¢ããã°ã¯å€æ¬¡å é åã§ãããå€æ¬¡å é åãšã¯ç°ãªãããã®ãªããžã§ã¯ãã§ã¯ããã¹ãŠã®èŠçŽ ãæ°å€ã§é€ç®ãããªã©ãããŸããŸãªè¿ éãªæäœãå¯èœã§ãã pythonã§ã¯ãç»åãèªã¿èŸŒããšãnumpyãªããžã§ã¯ããè¿ãããŸãã
泚æã¬ã¬ã·ãŒïŒ imreadïŒphpãc ++ãããã³pytonïŒãRGB圢åŒã§ã¯ãªãBGRã§ç»åãããŒãããã®ã¯å¶ç¶ã®ããšã§ãã ãã®ãããopencvã®äŸã§ã¯ãå€ææé BGR-> RGBãèŠãããšãã§ãããã®éãåæ§ã§ãã
åçå ã®é¡ãæ€çŽ¢ãã
ç§ãæåã«è©Šããã®ã¯ãã®æ©èœã§ãã Opencvã«ã¯ã CascadeClassifierã¯ã©ã¹ããã ãäºåã«ãã¬ãŒãã³ã°ãããã¢ãã«ãxml圢åŒã§äœ¿çšã§ããŸãã é¡ãèŠã€ããåã«ãç»åãçœé»ã§ç¿»èš³ããããšããå§ãããŸãã
$src = imread("images/faces.jpg"); $gray = cvtColor($src, COLOR_BGR2GRAY); $faceClassifier = new CascadeClassifier(); $faceClassifier->load('models/lbpcascades/lbpcascade_frontalface.xml'); $faceClassifier->detectMultiScale($gray, $faces);
â å®å šãªãµã³ãã«ã³ãŒã
çµæïŒ
äŸãããããããã«ããŸã³ãã®å粧ã®åçã§ãé¡ãèŠã€ããããšã¯åé¡ã§ã¯ãããŸããã ãŸããã¡ã¬ãã¯é¡ãèŠã€ããã®ã劚ããŸããã
åçã«åã£ãŠãã人ã®èªèïŒèªèïŒ
ãããè¡ãããã«ã opencvã«ã¯LBPHFaceRecognizerã¯ã©ã¹ãštrain / predictã¡ãœããããããŸãã
åçã«èª°ãåã£ãŠããããç¥ãããå Žåãæåã«trainã¡ãœããã䜿çšããŠã¢ãã«ããã¬ãŒãã³ã°ããå¿ èŠããããŸãã2ã€ã®ãã©ã¡ãŒã¿ãŒãå¿ èŠã§ããé¡ç»åã®é åãšãããã®ç»åã®æ°å€ããŒã¯ã®é åã§ãã ãã®åŸããã¹ãã€ã¡ãŒãžïŒé¡ïŒã§predictã¡ãœãããåŒã³åºããããã«å¯Ÿå¿ããæ°å€ããŒã¯ãååŸã§ããŸãã
$faceRecognizer = LBPHFaceRecognizer::create(); $faceRecognizer->train($myFaces, $myLabels = [1,1,1,1]); // 4 $faceRecognizer->update($angelinaFaces, $angelinaLabels = [2,2,2,2]); // 4 $label = $faceRecognizer->predict($faceImage, $confidence); // label (1 2) $confidence ()
â å®å šãªãµã³ãã«ã³ãŒã
é¡ã®ã»ããïŒ
çµæïŒ
LBPHFaceRecognizerã䜿ãå§ãããšããå®æããã¢ãã«ãä¿åãããŒããåãã¬ãŒãã³ã°ããæ©èœããããŸããã§ããã å®éãç§ã®æåã®pullrequestã¯ãããã®ã¡ãœãããè¿œå ããŸããïŒwrite / read / updateã
é¡ã®ã¿ã°ä»ã
opencvã䜿ãå§ãããšããç®ã錻ãåãªã©ãç¹ã§ããŒã¯ãããŠããé¡ã®åçãããç®ã«ããŸããã ç§ã¯ãã®å®éšãèªåã§ç¹°ãè¿ãããã£ãã®ã§ãããããã¯Pythonã®opencvããŒãžã§ã³ã§ã¯å®è£ ãããŠããŸããã§ããã FacemarkLBFã®ãµããŒããphpã«è¿œå ãã2çªç®ã®ãã«ãªã¯ãšã¹ããéä¿¡ããã®ã«å€æ¹ããããŸããã ãã¹ãŠãåçŽã«æ©èœããäºåã«èšç·Žãããã¢ãã«ãããŒãããå ¥åã«é¢ã®é åãéä¿¡ããåé¢ã®ãã€ã³ãã®é åãååŸããŸãã
$facemark = FacemarkLBF::create(); $facemark->loadModel('models/opencv-facemark-lbf/lbfmodel.yaml'); $facemark->fit($src, $faces, $landmarks);
â å®å šãªãµã³ãã«ã³ãŒã
çµæïŒ
ãã®äŸãããããããã«ããŸã³ãã®æ§æã¯ãé¡ã®åºæºç¹ã®äœçœ®ãæªåãããå¯èœæ§ããããŸãã ã¡ã¬ããé¡ãéªéããããšããããŸãã ãã€ã©ã€ãã圱é¿ããŸãã ãã®å Žåãå£ã®äžã®ç°ç©ïŒã€ããŽãã¿ãã³ãªã©ïŒãå¹²æžããããšã¯ãããŸããã
æåã®ãã«ã¯ãšã¹ãã®åŸãç§ã¯ã€ã³ã¹ãã¬ãŒã·ã§ã³ãåããopencvã§ä»ã«äœãã§ããããèŠå§ããçŸåšOpenCVã«ãããã£ãŒãã©ãŒãã³ã°ã®èšäºã«åºäŒããŸããã ããããããšãªããç§ã¯php-opencvã«ãã€ã³ã¿ãŒãããäžã§å®å šãªäºååŠç¿æžã¿ã¢ãã«ã䜿çšããæ©èœãè¿œå ããããšã«ããŸããã Caffeã¢ãã«ãããŠã³ããŒãããã®ã¯ããã»ã©é£ãããªãããšãå€æããŸããããåŸã§å€æ¬¡å è¡åã®æäœæ¹æ³ãç¿åŸããã®ã«å€ãã®æéãèŠããŸããããã®ååã¯c ++ã«ãªããopencvã®å éšã調ã¹ã2ã€ç®ã¯Pythonã§ãCaffe / Torchã¢ãã«ãæäœããŸãã/ opencvã䜿çšããªããã³ãœã«ãããŒã
dnnã¢ãžã¥ãŒã«ã䜿çšããŠåçã®é¡ãæ€çŽ¢ãã
ãã®ããã opencvã§ã¯ã readNetFromCaffeé¢æ°ã䜿çšããŠãäºåã«ãã¬ãŒãã³ã°ãããã¢ãã«ãCaffeã«èªã¿èŸŒãããšãã§ããŸãã .prototxtãã¡ã€ã«ãš.caffemodelãã¡ã€ã«ãžã®ãã¹ãšãã2ã€ã®ãã©ã¡ãŒã¿ãŒãå¿ èŠã§ãã prototxtãã¡ã€ã«ã«ã¯ã¢ãã«ã®èª¬æãå«ãŸããcaffemodelã«ã¯ã¢ãã«ã®ãã¬ãŒãã³ã°äžã«èšç®ãããéã¿ãå«ãŸããŸãã
prototxtãã¡ã€ã«ã®å§ãŸãã®äŸã次ã«ç€ºããŸã ã
input: "data" input_shape { dim: 1 dim: 3 dim: 300 dim: 300 }
ãã¡ã€ã«ã®ãã®éšåã¯ã4次å ã®1x3x300x300ãããªãã¯ã¹ãå ¥åããããšäºæ³ãããããšã説æããŠããŸãã ã¢ãã«ã®èª¬æã§ã¯ãéåžžããã®åœ¢åŒã§äºæ³ãããå 容ãèšè¿°ããŸãããã»ãšãã©ã®å Žåãããã¯300x300ãµã€ãºã®RGBã€ã¡ãŒãžïŒ3ãã£ã³ãã«ïŒãå ¥åããããšäºæ³ãããããšãæå³ããŸãã
é¢æ°imreadã䜿çšããŠ300x300 RGBã€ã¡ãŒãžãèªã¿èŸŒããšã300x300x3ãããªãã¯ã¹ãåŸãããŸãã
opencvã§300x300x3ãããªãã¯ã¹ã1x3x300x300ã«ããããã«ã blobFromImageé¢æ°ããããŸãã
ãã®åŸã setInputã¡ãœããã䜿çšããŠãããã¯ãŒã¯å ¥åã«blobãéä¿¡ãã forwardã¡ãœãããåŒã³åºãã ãã§ãå®æããçµæãè¿ãããŸãã
$src = imread("images/faces.jpg"); $net = \CV\DNN\readNetFromCaffe('models/ssd/res10_300x300_ssd_deploy.prototxt', 'models/ssd/res10_300x300_ssd_iter_140000.caffemodel'); $blob = \CV\DNN\blobFromImage($src, $scalefactor = 1.0, $size = new Size(300, 300), $mean = new Scalar(104, 177, 123), $swapRB = true, $crop = false); $net->setInput($blob, ""); $result = $net->forward();
ãã®å Žåãçµæã¯1x1x200x7ãããªãã¯ã¹ãã€ãŸã å7èŠçŽ ã®200é åã 4人ã®åçã§ããããã¯ãŒã¯ã¯200人ã®åè£è ãèŠã€ããŸããã ãããã[ãã $ä¿¡é Œã$ startXã$ startYã$ endXã$ endY]ã®ããã«ãªããŸãã $ä¿¡é ŒèŠçŽ ã¯ããä¿¡é Œãã«è²¬ä»»ããããŸãã äºæž¬ã®ç¢ºçãæåããããšãããšãã°0.75ã 次ã®èŠçŽ ã¯ãé¢ãšé·æ¹åœ¢ã®åº§æšãæ åœããŸãã ãã®äŸã§ã¯ã50ïŒ ãè¶ ããä¿¡é ŒåºŠã§3人ããæ€åºããããæ®ãã®197人ã®åè£è ã®ä¿¡é ŒåºŠã¯15ïŒ æªæºã§ãã
ã¢ãã«ãµã€ãº10 MBã å®å šãªãµã³ãã«ã³ãŒã ã
çµæïŒ
äŸãããããããã«ããã¥ãŒã©ã«ãããã¯ãŒã¯ããé¡ã«ã䜿çšãããšãå¿ ãããè¯ãçµæãåŸããããšã¯éããŸããã 4人ç®ã®äººç©ã¯èŠã€ãããŸããã§ããã4æç®ã®åçãåãåãããããã¯ãŒã¯ã«åå¥ã«éä¿¡ãããšãé¡ãèŠã€ãããŸãã
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã䜿çšããç»è³ªã®æ¹å
ç§ã¯é·ãéwaifu2xã©ã€ãã©ãªã«ã€ããŠèããŠããŸãã ãããã«ããããã€ãºãé€å»ããã¢ã€ã³ã³/åçã®ãµã€ãºã倧ããããããšãã§ããŸãã ã©ã€ãã©ãªèªäœã¯luaã§èšè¿°ãããŠããããã³ãããã®äžã§ã¯ãããŒãã§ãã¬ãŒãã³ã°ãããããã€ãã®ã¢ãã«ïŒã¢ã€ã³ã³ã®æ¡å€§ããã©ããã€ãºã®é€å»ãªã©ïŒã䜿çšããŠããŸãã ã©ã€ãã©ãªã®äœæè ã¯ãããã®ã¢ãã«ãcaffeã«ãšã¯ã¹ããŒãããopencvããã®äœ¿çšãæ¯æŽããŸããã ãã®çµæãã¢ã€ã³ã³ã®è§£å床ãäžããããã«phpã§ãµã³ãã«ãäœæãããŸããã
ã¢ãã«ãµã€ãº2 MBã å®å šãªãµã³ãã«ã³ãŒã ã
ãªãªãžãã«ïŒ
çµæïŒ
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã䜿çšããã«ç»åãæ¡å€§ããïŒ
ç»ååé¡
ImageNetããŒã¿ã»ããã§ãã¬ãŒãã³ã°ãããMobileNetãã¥ãŒã©ã«ãããã¯ãŒã¯ã䜿çšãããšãç»åãåé¡ã§ããŸãã åèšã§1000åã®ã¯ã©ã¹ãå®çŸ©ã§ããŸãããç§ã®æèŠã§ã¯ããã§ååã§ãã
ã¢ãã«ãµã€ãº16 MBã å®å šãªãµã³ãã«ã³ãŒã ã
ãªãªãžãã«ïŒ
çµæïŒ
87ïŒ -ãšãžããç«ã4ïŒ -ãã©ããã©ç«ã2ïŒ -ãã©ç«
Tensorflowãªããžã§ã¯ãæ€åºAPI
COCOããŒã¿ã»ããã§Tensorflowã§ãã¬ãŒãã³ã°ãããMobileNet SSDïŒã·ã³ã°ã«ã·ã§ãããã«ãããã¯ã¹ãã£ãã¯ã¿ãŒïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãç»åãåé¡ã§ããã ãã§ãªãã 182ã®ã¯ã©ã¹ã®ã¿ãç»åãå€å¥ã§ããŸãããé åãè¿ãããšãã§ããŸãã
ã¢ãã«ãµã€ãº19 MBã å®å šãªãµã³ãã«ã³ãŒã ã
ãªãªãžãã«ïŒ
çµæïŒ
æ§æã®åŒ·èª¿è¡šç€ºãšã³ãŒãè£å®
ãŸãã phpdoc.phpãã¡ã€ã«ããªããžããªäŸã«è¿œå ããŸããã 圌ã®ãããã§ãPhpstormã¯é¢æ°ãã¯ã©ã¹ãããã³ãããã®ã¡ãœããã®æ§æãããã³ã³ãŒãè£å®ã匷調ããŠããŸãã ãã®ãã¡ã€ã«ãã³ãŒãã«å«ããå¿ èŠã¯ãããŸããïŒããããªããšããšã©ãŒãçºçããŸãïŒããããžã§ã¯ãã«å ¥ããã ãã§ååã§ãã å人çã«ã¯ãç§ã®ç掻ã楜ã«ãªããŸãã ãã®ãã¡ã€ã«ã¯opencvã®ã»ãšãã©ã®æ©èœã説æããŠããŸããããã¹ãŠã§ã¯ãããŸããã®ã§ããã«ãªã¯ãšã¹ããæè¿ããŸãã
èšçœ®
dnnã¢ãžã¥ãŒã«ã¯ãããŒãžã§ã³3.4ã§ã®ã¿opencvã«ç»å ŽããŸããïŒãã以åã¯opencv-contribã«ãããŸããïŒã
ubuntu 18.04ã§ã¯ãopencvã®ææ°ããŒãžã§ã³ã¯3.2ã§ãã ãœãŒã¹ããopencvããã«ãããã«ã¯çŽ30åããããŸãããã®ãããubuntu 18.04ïŒ17.10ã§åäœããµã€ãº25MBïŒã®ããã±ãŒãžãã³ã³ãã€ã«ããphp 7.2ïŒubuntu 18.04ïŒããã³php 7.1ïŒubuntu 17.10ïŒïŒãµã€ãº100KBïŒã
ppaïŒphp-opencvãç»é²ããŸãããããŸã å¡ãã€ã¶ãããã¹ã¿ãŒããŠãããã ããã±ãŒãžãgithubã«ã¢ããããŒããã以äžã®è¯ããã®ã¯èŠã€ãããŸããã§ããã ãŸããpeclã§ã¢ã«ãŠã³ããäœæãããªã¯ãšã¹ããäœæããŸããããæ°ãæåŸã«å¿çããããŸããã§ããã
ãããã£ãŠãubuntu 18.04ã§ã®ã€ã³ã¹ããŒã«ã¯æ¬¡ã®ããã«ãªããŸãã
apt update && apt install -y wget && \ wget https://raw.githubusercontent.com/php-opencv/php-opencv-packages/master/opencv_3.4_amd64.deb && dpkg -i opencv_3.4_amd64.deb && rm opencv_3.4_amd64.deb && \ wget https://raw.githubusercontent.com/php-opencv/php-opencv-packages/master/php-opencv_7.2-3.4_amd64.deb && dpkg -i php-opencv_7.2-3.4_amd64.deb && rm php-opencv_7.2-3.4_amd64.deb && \ echo "extension=opencv.so" > /etc/php/7.2/cli/conf.d/opencv.ini
ãã®ãªãã·ã§ã³ã䜿çšããã€ã³ã¹ããŒã«ã«ã¯çŽ1åããããŸãã ubuntuã®ãã¹ãŠã®ã€ã³ã¹ããŒã«ãªãã·ã§ã³ ã
ãŸãã168 MBã®dockerã€ã¡ãŒãžãäœæããŸãã ã
äŸã䜿çšãã
ããŠã³ããŒãïŒ
git clone https://github.com/php-opencv/php-opencv-examples.git && cd php-opencv-examples
æã¡äžãïŒ
php detect_face_by_dnn_ssd.php
PS
èå³ã®ãããã¹ãŠã®äººã«ãèšäºã®åŸã«æ祚ã«çããŠãããã次ã®èšäºãèŠéããªãããã«ç»é²ããŠãã ãããã³ã¡ã³ããæžããŠè³ªåãæžããŠãããããã«åæ©ä»ããæ°ããå®éš/èšäºã®ãªãã·ã§ã³ãææ¡ããŠãã ããã
äŒçµ±çã«ãç§ã¯HabrããœãŒã·ã£ã«ãããã¯ãŒã¯ã®å人çãªã¡ãã»ãŒãžãéããŠå©èšãæ¯æŽãããªããšèŠåããŠããŸãã
githubïŒãã·ã¢èªã§å©çšå¯èœïŒã§Issueãäœæããããšã«ããããã€ã§ã質åãããããšãã§ããŸãã
è¬èŸïŒ
githubã§ç°¡åã«åçã§ããdkurt ã
arrybnã®èšäºããã£ãŒãã©ãŒãã³ã°ãçŸåšOpenCVã§ã
åç §ïŒ
â php-opencv-examples-èšäºã®ãã¹ãŠã®äŸ
â php-opencv / php- opencv - dnnã¢ãžã¥ãŒã«ããµããŒãããç§ã®ãã©ãŒã¯
â hihozhou / php-opencv- dnnã¢ãžã¥ãŒã«ããµããŒãããªãå ã®ãªããžããªïŒpullrequestãäœæããŸãããããŸã åãå ¥ããããŠããŸããïŒã
â èšäºã®è±èªãžã®ç¿»èš³ -ã€ã®ãªã¹äººãšã¢ã¡ãªã«äººã¯è±èªã®ééãããã人ã«éåžžã«å¿è匷ããšèããŸãããããã¹ãŠã«ååé ãããããã®ã©ã€ã³ãè¶ããããã«æããŸã:) åãããšãredditã«ãåœãŠã¯ãŸããŸãã