基于OpenCV的PHP图像人脸识别技术

今天无意中发现用OpenCV可以实现人脸识别。找个时间研究下用来识别验证码看可行不?呵呵。。

  1. 安装测试了一下,如果越是高清的大图,效果越明显,感觉不错
  2.  
  3. 一 安装
  4. 1 安装opencv
  5. http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16948
  6. 下载opencv-1.1pre1.tar.gz(1.0版本没有安装成功)
  7. #tar zxvf opencv-1.1pre1.tar.gz
  8. # cd opencv-1.1.0/
  9. # /.configure
  10. #make
  11. #make install
  12.  
  13. 2 安装facedetect
  14. #wget http://www.xarg.org/download/facedetect-1.0.0.tar.gz
  15. #tar xzvf facedetect-1.0.0.tar.gz
  16. #cd facedetect-1.0.0
  17. #/usr/local/php/bin/phpize
  18. #./configure –with-php-config=/usr/local/php/bin/php-config
  19. #make
  20. #make install
  21.  
  22. #vi /usr/local/php/etc/php.ini
  23. // 增加extension=facedetect.so
  24.  
  25. 3 重启web服务器,在phpinfo()里查看是否有facedetect这个模块
  26.  
  27. 二 简单测试
  28. 从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下
  29.  
  30. //检查有多少个脸型
  31. var_dump(face_count(’test.jpg’, ‘haarcascade_frontalface_alt.xml’));
  32.  
  33. //返回脸型在图片中的位置参数,多个则返回数组
  34. $arr = face_detect(’test.jpg’, ‘haarcascade_frontalface_alt2.xml’);
  35.  
  36. print_r($arr);
  37.  
  38. 三 测试代码
  39. <?
  40. if(empty($_POST)) {
  41. ?>
  42. <form name=”form” id=”form” method=”POST” enctype=”multipart/form-data” action=”">
  43. 上传图片:<input type=”file” name=”pic” size=”20″><input type=”submit” name=”submit” value=”上传”>
  44. </form>
  45. <?
  46. } else {
  47. $img = $_FILES['pic']['tmp_name'];
  48.  
  49. $arr = face_detect($img, ‘haarcascade_frontalface_alt2.xml’);
  50.  
  51. if(is_array($arr1)) {
  52. $all = array_merge($arr,$arr1);
  53. } else {
  54. $all = $arr;
  55. }
  56. $allowtype = 1;
  57. switch($_FILES['pic']['type']){
  58. case ‘image/pjpeg’: $fix_pic.= “.jpg”; break;
  59. case ‘image/jpeg’: $fix_pic.= “.jpg”; break;
  60. case ‘image/x-png’: $fix_pic.= “.png”; break;
  61. case ‘image/png’: $fix_pic.= “.png”; break;
  62. default: $allowtype = 0; break;
  63. }
  64.  
  65. if($allowtype == 0) {
  66. echo “文件格式错误:只运行jpg或png图片”;exit;
  67. }
  68.  
  69. $tmp_name = time();
  70. $src_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name.$fix_pic;
  71. move_uploaded_file($_FILES['pic']['tmp_name'], $src_pic);
  72.  
  73. $pic_src = $pic_dst = array();
  74. if(is_array($all)){
  75. foreach ($all as $k => $v){
  76. $tmp_name_new = $tmp_name.”_”.$k;
  77. $x = $v['x'];
  78. $y = $v['y'];
  79. $w = $v['w'];
  80. $h = $v['h'];
  81. $dst_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name_new.$fix_pic;
  82. // echo $src_pic.”<br>”;
  83. // echo $dst_pic.”<br>”;
  84. $cmd = “/usr/bin/convert -crop “.$w.”x”.$h.”+”.$x.”+”.$y.” “.$src_pic.” “.$dst_pic;
  85. // echo $cmd.”<br>”;
  86. echo `$cmd`;
  87. $pic_src[] = “upload/”.$tmp_name.$fix_pic;
  88. $pic_dst[] = “upload/”.$tmp_name_new.$fix_pic;
  89. }
  90. }
  91.  
  92. foreach($pic_src as $key => $value) {
  93. echo “<img src=’”.$value.”‘> => <img src=’”.$pic_dst[$key].”‘><br>”;
  94. }
  95. }
  96. ?>

3 条评论 »

  1. catch said,

    二月 9, 2009 at 10:30 上午

    http://security.ctocio.com.cn/securitycomment/290/8182290_3.shtml 在网上看到一个介绍破解验证码资料的网站

  2. catch said,

    二月 9, 2009 at 10:37 上午

    http://code.google.com/p/tesseract-ocr/ 一个不错的ocr

  3. billleo said,

    二月 9, 2009 at 1:57 下午

    good!!
    不错,有空试试。哈哈

RSS feed for comments on this post · TrackBack URL

发表评论

You must be logged in to post a comment.