基于OpenCV的PHP图像人脸识别技术
今天无意中发现用OpenCV可以实现人脸识别。找个时间研究下用来识别验证码看可行不?呵呵。。
- 安装测试了一下,如果越是高清的大图,效果越明显,感觉不错
- 一 安装
- 1 安装opencv
- http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16948
- 下载opencv-1.1pre1.tar.gz(1.0版本没有安装成功)
- #tar zxvf opencv-1.1pre1.tar.gz
- # cd opencv-1.1.0/
- # /.configure
- #make
- #make install
- 2 安装facedetect
- #wget http://www.xarg.org/download/facedetect-1.0.0.tar.gz
- #tar xzvf facedetect-1.0.0.tar.gz
- #cd facedetect-1.0.0
- #/usr/local/php/bin/phpize
- #./configure –with-php-config=/usr/local/php/bin/php-config
- #make
- #make install
- #vi /usr/local/php/etc/php.ini
- // 增加extension=facedetect.so
- 3 重启web服务器,在phpinfo()里查看是否有facedetect这个模块
- 二 简单测试
- 从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下
- //检查有多少个脸型
- var_dump(face_count(’test.jpg’, ‘haarcascade_frontalface_alt.xml’));
- //返回脸型在图片中的位置参数,多个则返回数组
- $arr = face_detect(’test.jpg’, ‘haarcascade_frontalface_alt2.xml’);
- print_r($arr);
- 三 测试代码
- <?
- if(empty($_POST)) {
- ?>
- <form name=”form” id=”form” method=”POST” enctype=”multipart/form-data” action=”">
- 上传图片:<input type=”file” name=”pic” size=”20″><input type=”submit” name=”submit” value=”上传”>
- </form>
- <?
- } else {
- $img = $_FILES['pic']['tmp_name'];
- $arr = face_detect($img, ‘haarcascade_frontalface_alt2.xml’);
- if(is_array($arr1)) {
- $all = array_merge($arr,$arr1);
- } else {
- $all = $arr;
- }
- $allowtype = 1;
- switch($_FILES['pic']['type']){
- case ‘image/pjpeg’: $fix_pic.= “.jpg”; break;
- case ‘image/jpeg’: $fix_pic.= “.jpg”; break;
- case ‘image/x-png’: $fix_pic.= “.png”; break;
- case ‘image/png’: $fix_pic.= “.png”; break;
- default: $allowtype = 0; break;
- }
- if($allowtype == 0) {
- echo “文件格式错误:只运行jpg或png图片”;exit;
- }
- $tmp_name = time();
- $src_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name.$fix_pic;
- move_uploaded_file($_FILES['pic']['tmp_name'], $src_pic);
- $pic_src = $pic_dst = array();
- if(is_array($all)){
- foreach ($all as $k => $v){
- $tmp_name_new = $tmp_name.”_”.$k;
- $x = $v['x'];
- $y = $v['y'];
- $w = $v['w'];
- $h = $v['h'];
- $dst_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name_new.$fix_pic;
- // echo $src_pic.”<br>”;
- // echo $dst_pic.”<br>”;
- $cmd = “/usr/bin/convert -crop “.$w.”x”.$h.”+”.$x.”+”.$y.” “.$src_pic.” “.$dst_pic;
- // echo $cmd.”<br>”;
- echo `$cmd`;
- $pic_src[] = “upload/”.$tmp_name.$fix_pic;
- $pic_dst[] = “upload/”.$tmp_name_new.$fix_pic;
- }
- }
- foreach($pic_src as $key => $value) {
- echo “<img src=’”.$value.”‘> => <img src=’”.$pic_dst[$key].”‘><br>”;
- }
- }
- ?>
catch said,
二月 9, 2009 at 10:30 上午
http://security.ctocio.com.cn/securitycomment/290/8182290_3.shtml 在网上看到一个介绍破解验证码资料的网站
catch said,
二月 9, 2009 at 10:37 上午
http://code.google.com/p/tesseract-ocr/ 一个不错的ocr
billleo said,
二月 9, 2009 at 1:57 下午
good!!
不错,有空试试。哈哈