{"id":7208,"date":"2019-06-01T11:34:03","date_gmt":"2019-06-01T02:34:03","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=7208"},"modified":"2020-05-28T10:24:32","modified_gmt":"2020-05-28T01:24:32","slug":"python%ea%b3%bc-opencv-55-haar-cascades%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%96%bc%ea%b5%b4-%ea%b2%80%ec%b6%9c","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=7208","title":{"rendered":"Python\uacfc OpenCV \u2013 55 : Haar Cascades\ub97c \uc774\uc6a9\ud55c \uc5bc\uad74 \uac80\ucd9c"},"content":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_objdetect\/py_face_detection\/py_face_detection.html \uc785\ub2c8\ub2e4.<\/p>\n<p>Haar \ud2b9\uc9d5\uae30\ubc18 \ub2e4\ub2e8\uacc4 \ubd84\ub958\uc790(Feature-based Cascade Classifiers)\ub97c \uc774\uc6a9\ud55c \ubb3c\uccb4 \uac80\ucd9c\uc740 Paul Viola\uc640 Michael Jones\uc774 2001\ub144\uc5d0 \ubc1c\ud45c\ud55c \ub17c\ubb38, \u201cRapid Object Detection using a Boosted Cascade of Simple Features\u201d\uc5d0\uc11c \uc81c\uc548\ub41c \ud6a8\uacfc\uc801\uc778 \ubb3c\uccb4 \uac80\ucd9c \ubc29\ubc95\uc785\ub2c8\ub2e4. \uc774\ub294 \uac80\ucd9c\ud560 \ub300\uc0c1\uc774 \ub418\ub294 \ubb3c\uccb4\uac00 \uc788\ub294 \uc774\ubbf8\uc9c0\uc640 \uc5c6\ub294 \uc774\ubbf8\uc9c0(\uac01\uac01\uc744 Positive Image\uc640 Negative Image\ub77c\uace0 \ud568)\uc744 \ucd5c\ub300\ud55c \ub9ce\uc774 \ud65c\uc6a9\ud574\uc11c \ub2e4\ub2e8\uacc4 \ud568\uc218\ub97c \ud6c8\ub828\uc2dc\ud0a4\ub294 \uae30\uacc4\ud559\uc2b5 \ubc29\uc2dd\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uae00\uc5d0\uc11c\ub294 \uac80\ucd9c\ud560 \ub300\uc0c1\uc744 \uc5bc\uad74\ub85c \uc2dc\ud5d8\ud574 \ubd05\ub2c8\ub2e4. \ucc98\uc74c\uc5d0, \uc774 \uc54c\uace0\ub9ac\uc998\uc740 \ubd84\ub958\uc790(Classifier)\ub97c \ud6c8\ub828\uc2dc\ud0a4\uae30 \uc704\ud574 \ub9e4\uc6b0 \ub9ce\uc740 \ud6c8\ub828\uc6a9 \uc774\ubbf8\uc9c0\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc774 \uc774\ubbf8\uc9c0\ub294 \uc55e\uc11c \uc5b8\uae09\ud55c Positive\uc640 Negative \uc774\ubbf8\uc9c0\uc785\ub2c8\ub2e4. \ub2e4\uc74c \ub2e8\uacc4\ub294 \ud2b9\uc9d5\ub4e4(Features)\ub97c \ucd94\ucd9c\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574, \uc544\ub798 \uadf8\ub9bc\uc5d0\uc11c\uc758 Haar \ud2b9\uc9d5\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc774\ub294 \ub9c8\uce58 \ucee8\ubcfc\ub8e8\uc158 \ucee4\ub110(Convolutional Kernel)\uacfc \uac19\uc2b5\ub2c8\ub2e4. \uac01 \ud2b9\uc9d5\uc740 \ud558\uc580\uc0c9 \uc0ac\uac01\ud615\uc5d0\uc11c\uc758 \ud53d\uc140\uac12\uc758 \ud569\uc744 \uac80\uc815\uc0c9 \uc0ac\uac01\ud615 \uc601\uc5ed\uc758 \ud53d\uc140\uac12\uc758 \ud569\uc5d0\uc11c \ube80 \uac12\uc785\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/06\/HaarFeatures.png\" alt=\"\" width=\"426\" height=\"302\" class=\"aligncenter size-full wp-image-7212\" \/><\/p>\n<p>\ub9ce\uc740 \ud2b9\uc9d5\uc744 \uacc4\uc0b0\ud558\uae30 \uc704\ud574 \uc774\ubbf8\uc9c0\uc5d0 \uc801\uc6a9\ud560 \uac01 \ucee4\ub110\uc5d0 \ub300\ud55c \ubaa8\ub4e0 \uac00\ub2a5\ud55c \ud06c\uae30\uc640 \uc704\uce58\ub97c \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4. \uc5bc\ub9c8\ub098 \ub9ce\uc740 \uacc4\uc0b0\uc774 \ud544\uc694\ud560\uae4c\uc694? 24&#215;24 \ud06c\uae30\uc758 \uc774\ubbf8\uc9c0\ub9cc \ud574\ub3c4 160000\uac1c \uc774\uc0c1\uc758 \ud2b9\uc9d5 \uacb0\uacfc\uac12\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uac01 \ud2b9\uc9d5\uc744 \uacc4\uc0b0\ud558\uae30 \uc704\ud574\uc11c, \ud558\uc580\uc0c9 \uc601\uc5ed\uacfc \uac80\uc815\uc0c9 \uc601\uc5ed\uc758 \ud53d\uc140\uc758 \ud569\uc744 \uc5bb\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574, \ub17c\ubb38\uc5d0\uc11c\ub294 \uc778\ud14c\uadf8\ub784(Integral) \uc774\ubbf8\uc9c0\ub97c \uc5b8\uae09\ud569\ub2c8\ub2e4. \uc774 \uc774\ubbf8\uc9c0\ub294 \ud53d\uc140\uc758 \ud569\uc758 \uacc4\uc0b0\uc744 \ub2e8\uc21c\ud654 \uc2dc\ucf1c \uc90d\ub2c8\ub2e4. \uc774\ub294 \uc54c\uace0\ub9ac\uc998 \uc18d\ub3c4\ub97c \ub9e4\uc6b0 \ube60\ub974\uac8c \uac1c\uc120\uc2dc\ucf1c \uc90d\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7ec\ub098 \uc774\ub807\uac8c \uacc4\uc0b0\ub41c \ubaa8\ub4e0 \ud2b9\uc9d5\ub4e4 \uc911 \ub300\ubd80\ubd84\uc774 \uc801\ud569\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc608\ub97c\ub4e4\uc5b4, \uc544\ub798\uc758 \uc774\ubbf8\uc9c0\ub97c \ubd05\uc2dc\ub2e4. \uccab\ubc88\uc9f8 \uc120\ud0dd\ub41c \ud2b9\uc9d5\uc740 \ub208 \uc601\uc5ed\uc774 \ucf54\ub098 \ubea8 \uc601\uc5ed\ubcf4\ub2e4 \uc790\uc8fc \uc5b4\ub461\ub2e4\ub77c\ub294 \uc810\uc5d0 \uc8fc\ubaa9\ud569\ub2c8\ub2e4. \ub450\ubc88\uc9f8 \uc120\ud0dd\ub41c \ud2b9\uc9d5\uc740 \ub208\uc774 \ubbf8\uac04\ubcf4\ub2e4 \uc5b4\ub461\ub2e4\ub294 \uac83\uc5d0 \uc8fc\ubaa9\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \ubea8\uc774\ub098 \ub2e4\ub978 \uacf3\uc5d0 \uc801\uc6a9\ub41c \ub3d9\uc77c\ud55c \uc774\ubbf8\uc9c0\ub294 \ubd80\uc801\uc808\ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c 160000\uac1c \uc774\uc0c1\uc758 \ud2b9\uc9d5 \uc911 \ucd5c\uace0\uc758 \ud2b9\uc9d5\uc744 \uc5b4\ub5bb\uac8c \uc120\ud0dd\ud574\uc57c \ud560 \uac83\uc778\uac00\uac00 \ubb38\uc81c\uc785\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub97c Adaboost\uac00 \ud574\uacb0\ud574 \ub0c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/06\/haar.png\" alt=\"\" width=\"334\" height=\"203\" class=\"aligncenter size-full wp-image-7214\" \/><\/p>\n<p>\uc774\ub97c \uc704\ud574\uc11c, \ubaa8\ub4e0 \ud6c8\ub828 \uc774\ubbf8\uc9c0\ub4e4\uc5d0 \ub300\ud574 \uac01\uac01\uc758 \ubaa8\ub4e0 \ud2b9\uc9d5\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uac01 \ud2b9\uc9d5\uc5d0 \ub300\ud574, \uc774\ubbf8\uc9c0 \uc0c1\uc5d0 \uc5bc\uad74\uc774 \uc788\ub294\uc9c0 \uc5c6\ub294\uc9c0(\uc989 positive \ub610\ub294 negative \uc778\uc9c0)\ub97c \ubd84\ub958\ub420 \ucd5c\uace0\uc758 \uc784\uacc4\uac12\uc744 \ucc3e\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uba85\ubc31\ud558\uac8c, \uc5ec\uae30\uc5d0\ub294 \uc624\ub958\uc640 \uc798\ubabb\ub41c \ubd84\ub958\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4. \ucd5c\uc18c\ud55c\uc758 \uc5d0\ub7ec\uc728\ub85c \ud2b9\uc9d5\uc744 \uc120\ud0dd\ud558\ub294\ub370, \uc774\ub294 \uc5bc\uad74 \uc774\ubbf8\uc9c0\uc778\uc9c0, \uc5bc\uad74\uc774 \uc544\ub2cc \uc774\ubbf8\uc9c0\uc778\uc9c0\ub97c \uc544\uc8fc \uc798 \ubd84\ub958\ud55c\ub2e4\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. (\uc774\ub7f0 \ucc98\ub9ac\ub294 \ub9d0\ucc98\ub7fc \uac04\ub2e8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uac01 \uc774\ubbf8\uc9c0\ub294 \uc2dc\uc791\ubd80\ud130 \ub3d9\uc77c\ud55c \uac00\uc911\uce58\uac00 \uc8fc\uc5b4\uc9d1\ub2c8\ub2e4. \uac01\uac01\uc758 \ubd84\ub958 \ud6c4\uc5d0, \uc798\ubabb \ubd84\ub958\ub41c \uc774\ubbf8\uc9c0\uc758 \uac00\uc911\uce58\ub294 \uc99d\uac00\ud569\ub2c8\ub2e4. \uadf8\ub7ec\uba74 \ub2e4\uc2dc \uac19\uc740 \uc808\ucc28\uac00 \uc218\ud589\ub429\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \uc5d0\ub7ec\uc728\uc774 \uc5bb\uc5b4\uc9c0\uac70\ub098 \uc6d0\ud558\ub294 \uac1c\uc218\uc758 \ud2b9\uc9d5\uc810\uc774 \ubc1c\uacac\ub429\ub2c8\ub2e4.)<\/p>\n<p>\ucd5c\uc885 \ubd84\ub958\uc790\ub294 \uc774\ub7ec\ud55c \uc57d\ud55c \ubd84\ub958\uc790 \ub4e4\uc758 \uac00\uc911\uce58 \ud569\uc785\ub2c8\ub2e4. \uc57d\ud558\ub2e4\uace0 \ud558\ub294 \uc774\uc720\ub294 \ubd84\ub958\uc790 \ud558\ub098\ub9cc\uc73c\ub85c \uc774\ubbf8\uc9c0\ub97c \ubd84\ub958\ud558\uc9c0 \ubabb\ud558\uace0 \ubd84\ub958\uc790\ub4e4\uc774 \ubaa8\uc5ec\uc57c\ub9cc \uc81c\ub300\ub85c \uc774\ubbf8\uc9c0\ub97c \ubd84\ub958\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \ub17c\ubb38\uc5d0\uc11c\ub294 200\uac1c\uc758 \ud2b9\uc9d5\ub9cc\uc73c\ub85c\ub3c4 90%\uc758 \uc815\ud655\ub3c4\ub97c \uc81c\uacf5\ud55c\ub2e4\uace0 \ud569\ub2c8\ub2e4. \ucd5c\uc885\uc801\uc73c\ub85c \uc57d 6000\uac1c\uc758 \ud2b9\uc9d5\uc810\uc774 \ub3c4\ucd9c\ub429\ub2c8\ub2e4. (160000\uac1c \uc774\uc0c1\uc758 \ud2b9\uc9d5\uc810\uc774 6000\uac1c\uc758 \ud2b9\uc9d5\uc810\uc73c\ub85c \uc904\uc5c8\ub2e4\ub294 \uac83\uc740 \uc5c4\uccad\ub09c \uc774\ub4dd\uc785\ub2c8\ub2e4.)<\/p>\n<p>\uc774\uc81c \uc774\ubbf8\uc9c0\ub97c \ucde8\ud569\ub2c8\ub2e4. \uac01 24&#215;24 \ud06c\uae30\uc758 \uc708\ub3c4\uc6b0\ub97c \uc7a1\uc2b5\ub2c8\ub2e4. 6000\uac1c\uc758 \ud2b9\uc9d5\uc744 \uc774\ubbf8\uc9c0\uc5d0 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc5bc\uad74\uc774 \uc788\ub294\uc9c0 \uc5c6\ub294\uc9c0 \uac80\uc0ac\ud569\ub2c8\ub2e4. \uadf8\ub7f0\ub370, \uc774 \ubc29\uc2dd\uc740 \uc2dc\uac04 \uc18c\ubaa8\ub3c4 \ub9ce\uace0 \ube44\ud6a8\uc728\uc801\uc785\ub2c8\ub2e4. \ub17c\ubb38\uc758 \uc800\uc790\ub294 \uc774\ub97c \uc704\ud574 \uc88b\uc740 \ud574\uacb0\ucc45\uc744 \uc81c\uc2dc\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\ubbf8\uc9c0\uc5d0\uc11c, \uc774\ubbf8\uc9c0 \uc601\uc5ed\uc758 \ub300\ubd80\ubd84\uc740 \uc5bc\uad74\uc774 \uc544\ub2cc \uc601\uc5ed\uc785\ub2c8\ub2e4. \uc774 \uc0dd\uac01\uc740 \uc708\ub3c4\uc6b0\uac00 \uc5bc\uad74 \uc601\uc5ed\uc774 \uc544\ub2cc\uc9c0\ub97c \uac80\uc0ac\ud558\ub294 \uac04\ub2e8\ud55c \ubc29\ubc95\uc774 \ub429\ub2c8\ub2e4. \ub9cc\uc57d \uc5bc\uad74 \uc601\uc5ed\uc774 \uc544\ub2c8\ub77c\uba74, \uc774\ub97c \ub2e8\ubc88\uc5d0 \ubc84\ub9bd\ub2c8\ub2e4. \ub2e4\uc2dc \uc218\ud589\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 \uc5bc\uad74\uc774 \uc788\ub294 \uacf3\uc758 \uc601\uc5ed\uc5d0 \ucd08\uc810\uc744 \ub9de\ucda5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub97c \uc704\ud574 \ub17c\ubb38\uc758 \uc800\uc790\ub4e4\uc740 \ub2e4\ub2e8\uacc4 \ubd84\ub958\uc790(Cascade of Classifiers)\uc758 \uac1c\ub150\uc744 \uc18c\uac1c\ud569\ub2c8\ub2e4. \uc708\ub3c4\uc6b0\uc5d0 \ub300\ud55c 6000\uac1c\uc758 \ubaa8\ub4e0 \ud2b9\uc9d5\uc744 \uc801\uc6a9\ud558\ub294 \ub300\uc2e0, \ubd84\ub958\uc790\uc758 \ub2e4\ub978 \ub2e8\uacc4\ub85c \ud2b9\uc9d5\uc744 \ubb36\uace0 \ud558\ub098\uc529 \ud558\ub098\uc529 \uc801\uc6a9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. (\ubcf4\ud1b5 \ucc98\uc74c \uba87\uba87 \ub2e8\uacc4\ub294 \ub9e4\uc6b0 \uc801\uc740 \uc218\uc758 \ud2b9\uc9d5\uc744 \uac16\uc2b5\ub2c8\ub2e4.) \ub9cc\uc57d \uc708\ub3c4\uc6b0\uac00 \uccab\ubc88\uc9f8 \ub2e8\uacc4\uc5d0\uc11c \uc2e4\ud328\ud558\uba74 \ubc84\ub9bd\ub2c8\ub2e4. \ub098\uba38\uc9c0 \ud2b9\uc9d5\ub4e4\uc740 \ub354 \uc774\uc0c1 \uace0\ub824\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \ud1b5\uacfc\ub418\uba74 \ud2b9\uc9d5\uc758 \ub450\ubc88\uc9f8 \ub2e8\uacc4\ub97c \uc815\uc6a9\ud558\uace0 \uc774\ub97c \uacc4\uc18d \ubc18\ubcf5\ud569\ub2c8\ub2e4. \ubaa8\ub4e0 \ub2e8\uacc4\ub97c \ud1b5\uacfc\ud55c \uc708\ub3c4\uc6b0\uac00 \uc5bc\uad74 \uc601\uc5ed\uc774 \ub429\ub2c8\ub2e4!!<\/p>\n<p>\uc774\uc81c \uc774 Haar Cascades \uc54c\uace0\ub9ac\uc998\uc744 \uad6c\ud604\ud55c OpenCV\uc758 \ud568\uc218\ub97c \uc774\uc6a9\ud574 \uc5bc\uad74\uc744 \uac80\ucd9c\ud574 \ubcf4\ub294 \ucf54\ub4dc\ub97c \uc0b4\ud3b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>OpenCV\ub294 \ud2b8\ub808\uc774\ub108\uc640 \uac80\ucd9c\uc790 \ubaa8\ub4dc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \ucc28\ub7c9\uc774\ub098 \ube44\ud589\uae30\uc640 \uac19\uc740 \ubb3c\uccb4 \uac80\ucd9c\uc744 \uc704\ud55c \uc790\uc2e0\ub9cc\uc758 \ud6c8\ub828\uc774 \ud544\uc694\ud558\ub2e4\uba74 OpneCV\ub97c \uc774\uc6a9\ud574 \ud6c8\ub828\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. (\ucc38\uc870 : https:\/\/docs.opencv.org\/2.4\/doc\/user_guide\/ug_traincascade.html)<\/p>\n<p>\uc774 \uae00\uc5d0\uc11c\ub294 \uac80\ucd9c\uc5d0 \ub300\ud574\uc11c\ub9cc \uc124\uba85\ud569\ub2c8\ub2e4. OpenCV\uc5d0\uc11c\ub294 \uc774\ubbf8 \uc5bc\uad74, \ub208 \ub4f1\uc5d0 \ub300\ud55c \ubbf8\ub9ac \ud6c8\ub828\ub41c \ub370\uc774\ud130\ub97c XML \ud30c\uc77c \ud615\uc2dd\uc73c\ub85c \uc81c\uacf5\ud569\ub2c8\ub2e4. \ubc14\ub85c \uc774 XML \ubd84\ub958\uc790 \ud30c\uc77c\uc744 \ub85c\ub4dc \ud558\ub294 \uac83\uc774 \uc2dc\uc791\uc785\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ubd84\ub958\ud560 \uc774\ubbf8\uc9c0\ub97c Grayscale\ub85c \ub85c\ub4dc\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport numpy as np\r\nimport cv2\r\nfrom matplotlib import pyplot as plt\r\n\r\nface_cascade = cv2.CascadeClassifier('.\/data\/haar\/haarcascade_frontface.xml')\r\neye_cascade = cv2.CascadeClassifier('.\/data\/haar\/haarcascade_eye.xml')\r\n\r\nimg = cv2.imread('.\/data\/haar\/img.jpg')\r\ngray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\r\n<\/pre>\n<p>\ub2e4\uc74c\uc740 \uc785\ub825 \uc774\ubbf8\uc9c0\uc5d0\uc11c \uc5bc\uad74\uc744 \uac80\ucd9c\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ub9cc\uc57d \uc5bc\uad74\uc744 \ubc1c\uacac\ud558\uba74, \ubc1c\uacac\ud55c \uc5bc\uad74\uc5d0 \ub300\ud55c \uc704\uce58\ub97c Rect(x,y,w,h) \ud615\ud0dc\ub85c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc704\uce58\ub97c \uc5bb\uc5c8\ub2e4\uba74, \uc5bc\uad74\uc5d0 \ub300\ud55c ROI\ub97c \ub9cc\ub4e4\uace0, \uc774 \uc548\uc5d0\uc11c \ub208\uc744 \uac80\ucd9c\ud569\ub2c8\ub2e4. (\ub208\uc740 \uc5bc\uad74 \uc548\uc5d0 \uc788\uc73c\ub2c8\uae4c\uc694!)<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nfaces = face_cascade.detectMultiScale(gray, 1.3, 5)\r\n\r\nfor (x,y,w,h) in faces:\r\n    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)\r\n    roi_gray = gray[y:y+h, x:x+w]\r\n    roi_color = img[y:y+h, x:x+w]\r\n    eyes = eye_cascade.detectMultiScale(roi_gray)\r\n    for (ex,ey,ew,eh) in eyes:\r\n        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)\r\n\r\ncv2.imshow('img',img)\r\ncv2.waitKey(0)\r\ncv2.destroyAllWindows()\r\n<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/06\/face_detecting.png\" alt=\"\" width=\"657\" height=\"469\" class=\"aligncenter size-full wp-image-7216\" \/><\/p>\n<p>\uc544\uc774\uc5b8\ub9e8\uc758 \uc5bc\uad74\uacfc \ucea1\ud2f4\uc544\uba54\ub9ac\uce74\uc758 \uc5bc\uad74\uc740 \uac80\ucd9c\ub418\uc9c0 \ubabb\ud588\ub294\ub370, \uc774\ub294 \ud6c8\ub828 \ub370\uc774\ud130\uac00 \uc815\uba74\uc5d0\uc11c \ubcf8 \uc5bc\uad74\uc5d0 \ub300\ud55c \uc774\ubbf8\uc9c0\ub4e4\ub85c \ub9cc\ub4e4\uc5b4\uc84c\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_objdetect\/py_face_detection\/py_face_detection.html \uc785\ub2c8\ub2e4. Haar \ud2b9\uc9d5\uae30\ubc18 \ub2e4\ub2e8\uacc4 \ubd84\ub958\uc790(Feature-based Cascade Classifiers)\ub97c \uc774\uc6a9\ud55c \ubb3c\uccb4 \uac80\ucd9c\uc740 Paul Viola\uc640 Michael Jones\uc774 2001\ub144\uc5d0 \ubc1c\ud45c\ud55c \ub17c\ubb38, \u201cRapid Object Detection using a Boosted Cascade of Simple Features\u201d\uc5d0\uc11c \uc81c\uc548\ub41c \ud6a8\uacfc\uc801\uc778 \ubb3c\uccb4 \uac80\ucd9c \ubc29\ubc95\uc785\ub2c8\ub2e4. \uc774\ub294 \uac80\ucd9c\ud560 \ub300\uc0c1\uc774 \ub418\ub294 \ubb3c\uccb4\uac00 \uc788\ub294 \uc774\ubbf8\uc9c0\uc640 \uc5c6\ub294 \uc774\ubbf8\uc9c0(\uac01\uac01\uc744 Positive Image\uc640 Negative Image\ub77c\uace0 \ud568)\uc744 \ucd5c\ub300\ud55c \ub9ce\uc774 \ud65c\uc6a9\ud574\uc11c \ub2e4\ub2e8\uacc4 \ud568\uc218\ub97c &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=7208\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Python\uacfc OpenCV \u2013 55 : Haar Cascades\ub97c \uc774\uc6a9\ud55c \uc5bc\uad74 \uac80\ucd9c&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[130,131],"tags":[],"class_list":["post-7208","post","type-post","status-publish","format-standard","hentry","category-opencv","category-python"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/7208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7208"}],"version-history":[{"count":8,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/7208\/revisions"}],"predecessor-version":[{"id":9400,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/7208\/revisions\/9400"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7208"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}