ÕâÆªÎÄÕÂÖ÷Òª½²½âÏÂĿǰÊÐÃæÉϱȽÏÐÂÓ±µÄÌØÐ§Ö±²¥£¬±ÈÈçFaceu¼¤ÃȵÈÈí¼þµÄ¾ßÌåʵÏÖÔÀí¡£

ÈçÉÏͼËùʾ£¬ÒªÊµÏÖÌØÐ§Ö±²¥ÖÁÉÙÐèҪʵÏÖÕâÎå¸öÄ£¿é£ºÏà»ú²É¼¯¡¢É豸Ô˶¯·½Ïò¼ì²â¡¢ÈËÁ³Ê¶±ð¹¦ÄÜ¡¢±¾µØÔ¤ÀÀ»æÖÆÒÔ¼°±àÂë·¢ËÍ¡£ÏÂÃæÎÒÃǾÍÖð¸ö½éÉÜÏÂÔÚAndroid¶ËÕâ¸öÎå¸ö¹¦ÄܵĴóÖÂʵÏÖÔÀí¡£
Camera²É¼¯ ÏëÕý³£µÄ¿´µ½ÉãÏñÍ·Ëù²É¼¯µÄͼÏñ£¿Ö»ÐèÒª¸øCameraÖ¸¶¨Ò»¸öSurfaceView£¬¾ßÌåÀ´½²ÊǸøÏà»úÉèÖÃÒ»¸ö»²¼£¨SurfaceHolder£©¼´Í¨¹ýCamera
setPreviewDisplay·½·¨£¬¾Í¿ÉÒÔÁË¡£ÕâÊÇÓÉÓÚAndroidµÄϵͳAPI¶ÔCamera½øÐÐÁ˺ܺõķâ×°£¬Ê¹µÃÎÒÃÇ¿ÉÒԷdz£¿ìËٵĿª·¢Ò»¸öÏà»úÓ¦Óá£
µ«ÔÚÌØÐ§Ö±²¥ÖУ¬ÎÒÃÇÐèÒª¶ÔÏà»ú²É¼¯µÄͼÏñ½øÐд¦Àí£¬±ÈÈçÃÀÑÕ»òÊÇÌùÉÏÍöú¶ä¡¢ÑÀ³ÝµÈµÀ¾ßͼƬ¡£È»ºó½«´¦Àí¹ýµÄͼÏñÏÔʾµ½ÆÁÄ»ÉÏʵʱ½øÐйۿ´¡£ÕâʱºòÈÃϵͳ°ïÎÒÃÇ»æÖÆÏà»úͼÏñÏÔÈ»¾Í²»ºÏÊÊÁË¡£
SurfaceTexture

ÕâÊÇAndroid APIÎĵµÖйØÓÚSurfaceTextureµÄÃèÊö£¬´ÓÖÐÎÒÃÇ¿ÉÒÔ¿´µ½SurfaceTexture¿ÉÒÔ´úÌæSurfaceHolderÀ´½ÓÊÜCamera²É¼¯µÄÊý¾ÝÁ÷ͬʱ²»ÏÔʾµ½ÆÁÄ»ÉÏ¡£Óɴ˿ɼûҪʵÏÖÌØÐ§Ö±²¥Ê×ÏÈÐèÒª½«Camera²É¼¯µÄSurfaceHolderÄ£Ê½Ìæ»»ÎªSurfaceTextureģʽ¡£
·½Ïò¼ì²â ÔÚ´¦ÀíÏà»úÔ¤ÀÀʱ£¬AndroidϵͳΪÁ˱£Ö¤Óû§ÎÞÂÛÔõôÐýתÊÖ»ú¶¼ÄÜ¿´µ½¡°ÕýÈ·¡±µÄÔ¤ÀÀ»Ã棨Õâ¸ö¡°ÕýÈ·¡±ÊÇÖ¸ÏÔʾÔÚUIÔ¤ÀÀ½çÃæµÄ»ÃæÓëÄãÈËÑÛ¿´µ½µÄÑÛǰµÄ»ÃæÊÇÒ»Öµģ©£¬ÏµÍ³µ×²ã»á¸ù¾Ýµ±Ç°ÊÖ»úÆÁÄ»µÄ·½Ïò¶ÔͼÏñSensor²É¼¯µ½µÄÊý¾Ý½øÐÐÁËÐýת´¦Àí£¬È»ºó²ÅË͸øÏÔʾϵͳ½øÐÐÏÔʾ¡£Òò´ËÔÚ²ÉÓÃSurfaceHolderģʽÏÂÓÉÓÚϵͳµ×²ã°ïÎÒÃǽøÐÐÁË·½ÏòÉϵĴ¦Àí£¬Òò´ËÎÒÃÇ¿´µ½µÄ»Ãæ¶¼ÊÇÕýµÄ¡£µ«ÔÚ²ÉÓÃSurfaceTextureģʽºó£¬ÓÉÓÚϵͳֱ½ÓÏòÊý¾ÝÁ÷Ë͸øÁËSurfaceTexture£¬Òò´ËÔÚÎÒÃÇ×Ô¼º»æÖÆÒÔ¼°ÈËÁ³Ê¶±ðʱ¾ÍÐèÒªÖªµÀÉ豸µÄÔ¤ÀÀ·½Ïò£¬À´±£Ö¤»æÖƵĽǶÈÕýÈ·ÒÔ¼°ÈËÁ³Ê¶±ðµÄ³É¹¦ÂÊ¡£
ÔÚAndroidÉÏÎÒÃÇ¿ÉÒÔͨ¹ýOrientationEventListenerÀ´ÊµÏÖʵʱÆÁÄ»·½ÏòµÄ¼àÌý¡£

¾ßÌåµÄʵÏÖ´úÂëÒ²ºÜ¼òµ¥£¬Ö»ÐèҪʵÏÖOrientationEventListenerÖеÄonOrientationChanged·½·¨¾Í¿ÉÒÔʵʱ»ñÈ¡µ½ÆÁÄ»·½ÏòÁË¡£

ÈËÁ³Ê¶±ð Androidϵͳ±¾Éí¾Í¾ßÓÐÈËÁ³Ê¶±ð¹¦ÄÜ£¬ÆäÖаüÀ¨¾²Ì¬ÈËÁ³¼ì²âºÍ¶¯Ì¬ÈËÁ³¼ì²â¡£ËùνµÄ¾²Ì¬¼ì²â¼´Í¨¹ýandroid.media.FaceDetector
Õâ¸öÀà¶Ôµ¥ÕÅͼƬ½øÐÐʶ±ð£¬È»ºóʶ±ð³öͼƬÖеÄÈËÁ³Î»Öá£

ÔÚAndroid 4.0ÒÔǰÐèҪʵÏÖÏà»úʵʱµÄÈËÁ³Ê¶±ð£¬Ö»ÄÜͨ¹ý»ñÈ¡Camera²É¼¯»Øµ÷onPreviewFrame½«Camera²É¼¯µÄÖ¡Êý¾Ýת»¯ÎªbitmapË͸øFaceDetector½øÐмì²â¡£ÍøÉÏÓÐÈËҲʵÏÖ¹ýÕâÖÖ·½Ê½¡£


µ«ÕâÖÖ·½Ê½ÊµÏÖЧÂÊÌ«µÍ£¬ÔÚÖ±²¥ÕâÖÖ³¡¾°Ï»ù±¾Ã»ÈËÕâô×ö¡£ ÔÚAndroid 4.0Ö®ºó£¬CameraÐÂÔöÁËFaceDetectionListener½Ó¿Ú

ÎÒÃÇ¿ÉÒÔͨ¹ýÔÚ¿ªÆôCameraʱÉèÖÃFaceDetectionListener£¬À´ÈÃϵͳ°ïÎÒÃǽøÐÐʵʱµÄÏà»úÈËÁ³¼ì²â¡£FaceDetectionListener¿ÉÒÔ¼ì²â³öÈËÁ³µÄ´óС¿òÒÔ¼°ÑÛ¾¦ºÍ×ì°ÍµÄλÖá£ÕâÀïÓÐÒ»¸öÐèҪעÒâµÄÊǼì²âµ½ÈËÁ³rectĬÈÏÊÇÒÔÔ¤ÀÀ½çÃæÎª×ø±êϵ£¬Õâ¸ö×ø±êϵÊǾ¹ý±ä»»µÄ£¬ÖÐÐĵãΪ(0,
0),×óÉ϶¥µã×ø±êÊÇ(-1000, -1000)£¬ÓÒ϶¥µãÊÇ(1000, 1000).Ò²¾ÍÊÇ˵²»¹ÜÔ¤ÀÀÔ¤ÀÀSurfaceview¶à´ó£¬¼ì²â³öÀ´µÄrectµÄ×ø±êʼÖÕ¶ÔÓ¦µÄÊÇÔÚÕâ¸ö±ä»»×ø±êϵ¡£¶øAndroidÀïĬÈϵÄviewµÄ×ø±êϵÊÇ£¬×óÉ϶¥µãΪ(0,
0)£¬ºáΪxÖᣬÊúΪyÖá¡£Õâ¾ÍÐèÒª°Ñrect×ø±ê±ä»»Ï¡£

»ù±¾Éϼòµ¥µÄÐèÇóFaceDetectionListener¾Í¿ÉÒÔÂú×ãÁË¡£µ«¸´ÔÓµÄÐèÇó£¬Èç¼ì²â±Ç×Ó£¬Ã¼Ã«ÒÔ¼°Æ½Ì¨Í¨¹ýÐԺͶÔÐÔÄÜÒªÇ󼫸ߵij¡¾°ÏÂFaceDetectionListenerÒ²ÓеãÁ¦²»´ÓÐÄÁË¡£
ĿǰÊÐÃæÉϺܶàµÄÈËÁ³Ê¶±ð¶¼ÊÇ»ùÓÚ¿ªÔ´ÏîÄ¿OpenCVʵÏֵģ¬OpenCVÒ²ÓÐAndroidƽ̨µÄʵÏÖ¡£¶ÔÓÚÈçºÎÔÚAndroidÉϼ¯³ÉOpenCVµÄ·½Ê½£¬ÓÐÐËȤµÄͬѧ¿ÉÒԲο¼ÏÂ
OpenGL»æÖÆÓë±àÂë SurfaceTextureÊÇGPUÎÆÀí£¬ÌìÉúÓëopenGLÇ×½ü¡£Òò´ËCamera²ÉÓÃSurfaceTexture·½Ê½»ù±¾É϶¼ÊÇͨ¹ýGLSurfaceViewµÄRenderÉú³ÉSurfaceTextureÎÆÀíÈ»ºó°ó¶¨Camera½øÐлæÖÆ£¬Í¬Ê±¿ÉÒÔ½«SurfaceTextureÉÏCamera²É¼¯µÄÊý¾ÝÖ±½Ó½øÐÐÓ²¼þ±àÂ룬Ìṩ±àÂëЧÂÊ¡£
SurfaceTexture·½Ê½ÓÉÓÚÐèÒªOpenGL»ù´¡ÒÔ¼°Ó²¼þ±àÂëÏà¹ØÖªÊ¶£¬Òò´Ë±¾ÎÄÖоÍÔݲ»½éÉÜÁË£¬µÈÏÈÆÕ¼°¹ýOpenGLÏà¹ØÖªÊ¶ºóÔÙ½øÐн²½â¡£
|