• OpenCV和PHP的人脸识别技术


    Php代码  收藏代码
    1. OpenCV安装之前必须依赖的包:(请先安装好)  
    2. pkgconfig  
    3. libpng  
    4. zlib  
    5. libjpeg  
    6. libtiff  
    7. python  
    8.   
    9. [OpenCV安装] www.opencv.org.  
    10. tar xvzf OpenCV-1.0.0.tar.gz  
    11. cd opencv-1.0.0  
    12. ./configure  
    13. make  
    14. make install  
    15. make check (检查是否安装全部正确)  
    16.   
    17. [facedetect] http://www.xarg.org/download/facedetect-1.0.0.tar.gz  
    18. tar xzvf facedetect-1.0.0.tar.gz  
    19. cd facedetect-1.0.0  
    20. /usr/local/php/bin/phpize  
    21. ./configure --with-php-config=/usr/local/php/bin/php-config  
    22. make  
    23. make test  
    24. make install  
    25.   
    26. [ImageMagick] http://www.imagemagick.org/  
    27. tar jxvf ImageMagick-6.5.0-0.tar.bz2  
    28. cd ImageMagick-6.5.0-0  
    29. ./configure  
    30. make  
    31. make install  
    32.   
    33. [imagick] http://pecl.php.net/imagick  
    34. tar zxvf imagick-2.3.0b1.tgz  
    35. imagick-2.3.0b1  
    36. /usr/local/php/bin/phpize  
    37. ./configure --with-php-config=/usr/local/php/bin/php-config  
    38. make  
    39. make test  
    40. make install  
    41.   
    42.   
    43. [配置]  
    44. ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/  
    45. 看看有没有 facedetect.so 和 imagick.so  
    46. vi /usr/local/php/lib/php.ini  
    47. 在[PHP]模块下增加:  
    48. extension = facedetect.so  
    49. extension = imagick.so  
    50. 重启apache  
    51.   
    52.   
    53. [测试代码]  
    54.   
    55.   
    56. 从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下  
    57.   
    58.   
    59.   
    60.   
    61.   
    62. //------------------  
    63.   
    64.   
    65. // 监测有几个人脸  
    66.   
    67.   
    68. //------------------  
    69.   
    70.   
    71. //检查有多少个脸型  
    72.   
    73.   
    74. var_dump(face_count('party.jpeg', haarcascade_frontalface_alt.xml'));  
    75.   
    76.   
    77. //返回脸型在图片中的位置参数,多个则返回数组  
    78.   
    79.   
    80. $arr = face_detect('party.jpeg', haarcascade_frontalface_alt2.xml');  
    81.   
    82.   
    83. print_r($arr);  
    84.   
    85.   
    86.   
    87.   
    88.   
    89. //------------------  
    90.   
    91.   
    92. // 人脸扭曲  
    93.   
    94.   
    95. //------------------  
    96.   
    97.   
    98. <?php  
    99.   
    100.   
    101. if($_FILES){  
    102.   
    103.   
    104. $img = $_FILES['pic']['tmp_name'];  
    105.   
    106.   
    107. $arr = face_detect($img'haarcascade_frontalface_alt2.xml');  
    108.   
    109.   
    110. //$arr1 = face_detect($img, 'haarcascade_frontalface_alt_tree.xml');  
    111.   
    112.   
    113. if(is_array($arr1)) $all =array_merge($arr,$arr1);  
    114.   
    115.   
    116. else $all = $arr;  
    117.   
    118.   
    119. $im = new Imagick($img);  
    120.   
    121.   
    122. //$draw =new ImagickDraw();  
    123.   
    124.   
    125. //$borderColor = new ImagickPixel('red');  
    126.   
    127.   
    128. //$draw->setFillAlpha(0.0);  
    129.   
    130.   
    131. //$draw->setStrokeColor ($borderColor);  
    132.   
    133.   
    134. //$draw->setStrokeWidth (1);  
    135.   
    136.   
    137. if(is_array($all)){  
    138.   
    139.   
    140. foreach ($all as $v){  
    141.   
    142.   
    143.     $im_cl = $im->clone();  
    144.   
    145.   
    146.     $im_cl->cropImage($v['w'],$v['h'],$v['x'],$v['y']);  
    147.   
    148.   
    149.       
    150.   
    151.   
    152.     $im_cl->swirlImage(60);  
    153.   
    154.   
    155.     $im->compositeImage( $im_cl, Imagick::COMPOSITE_OVER , $v['x'], $v['y'] );  
    156.   
    157.   
    158.       
    159.   
    160.   
    161.     //$draw->rectangle($v['x'],$v['y'],$v['x']+$v['w'],$v['y']+$v['h']);  
    162.   
    163.   
    164.     //$im->drawimage($draw);  
    165.   
    166.   
    167.       
    168.   
    169.   
    170.       
    171.   
    172.   
    173. }  
    174.   
    175.   
    176. }  
    177.   
    178.   
    179. header( "Content-Type: image/png" );  
    180.   
    181.   
    182. echo $im;  
    183.   
    184.   
    185. }else{  
    186.   
    187.   
    188. ?>  
    189.   
    190.   
    191. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    192.   
    193.   
    194. <form method="POST" enctype="multipart/form-data">  
    195.   
    196.   
    197. 人脸识别试验:只支持jpg,png<br>  
    198.   
    199.   
    200. 上传一张图片 <input type="file" name="pic">  
    201.   
    202.   
    203. <input type="submit" value="upload">  
    204.   
    205.   
    206. </form>  
    207.   
    208.   
    209. <?  
    210.   
    211.   
    212. }  
    213.   
    214.   
    215. ?>  
    216.   
    217.   
    218.   
    219.   
    220.   
    221.   
    222.   
    223.   
    224. //------------------  
    225.   
    226.   
    227. // 人脸识别  
    228.   
    229.   
    230. //------------------  
    231.   
    232.   
    233. <?php  
    234.   
    235.   
    236. header("Content-Type:text/html; charset:utf-8");  
    237.   
    238.   
    239. if(emptyempty($_POST)) {  
    240.   
    241.   
    242. ?>  
    243.   
    244.   
    245. <html>  
    246.   
    247.   
    248. <head>  
    249.   
    250.   
    251. <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">  
    252.   
    253.   
    254. <title>人脸识别</title>  
    255.   
    256.   
    257. </head>  
    258.   
    259.   
    260. <body>  
    261.   
    262.   
    263. <h2>人脸识别</h2>  
    264.   
    265.   
    266. PS: 请上传一张带有人脸的图片<br />  
    267.   
    268.   
    269. <form name="form" id="form" method="POST" enctype="multipart/form-data" action="">  
    270.   
    271.   
    272. 上传图片:<input type="file" name="pic" size="20″">  
    273.   
    274.   
    275. <input type="submit" name="submit" value="上传">  
    276.   
    277.   
    278. </form>  
    279.   
    280.   
    281. </body>  
    282.   
    283.   
    284. </html>  
    285.   
    286.   
    287. <?php  
    288.   
    289.   
    290. else {  
    291.   
    292.   
    293. $img = $_FILES['pic']['tmp_name'];  
    294.   
    295.   
    296.   
    297.   
    298.   
    299. $arr = face_detect($img'haarcascade_frontalface_alt2.xml');  
    300.   
    301.   
    302.   
    303.   
    304.   
    305. if(is_array($arr1)) {  
    306.   
    307.   
    308. $all = array_merge($arr,$arr1);  
    309.   
    310.   
    311. else {  
    312.   
    313.   
    314. $all = $arr;  
    315.   
    316.   
    317. }  
    318.   
    319.   
    320. $allowtype = 1;  
    321.   
    322.   
    323. switch($_FILES['pic']['type']){  
    324.   
    325.   
    326. case 'image/pjpeg'$fix_pic.= ".jpg"break;  
    327.   
    328.   
    329. case 'image/jpeg'$fix_pic.= ".jpg"break;  
    330.   
    331.   
    332. case 'image/x-png'$fix_pic.= ".png"break;  
    333.   
    334.   
    335. case 'image/png'$fix_pic.= ".png"break;  
    336.   
    337.   
    338. default$allowtype = 0; break;  
    339.   
    340.   
    341. }  
    342.   
    343.   
    344.   
    345.   
    346.   
    347. if($allowtype == 0) {  
    348.   
    349.   
    350. echo "文件格式错误:只运行jpg或png图片";exit;  
    351.   
    352.   
    353. }  
    354.   
    355.   
    356.   
    357.   
    358.   
    359. $tmp_name = time();  
    360.   
    361.   
    362. $src_pic = "./".$tmp_name.$fix_pic;  
    363.   
    364.   
    365. move_uploaded_file($_FILES['pic']['tmp_name'], $src_pic);  
    366.   
    367.   
    368.   
    369.   
    370.   
    371. $pic_src = $pic_dst = array();  
    372.   
    373.   
    374. if(is_array($all)){  
    375.   
    376.   
    377. foreach ($all as $k => $v){  
    378.   
    379.   
    380. $tmp_name_new = $tmp_name."_".$k;  
    381.   
    382.   
    383. $x = $v['x'];  
    384.   
    385.   
    386. $y = $v['y'];  
    387.   
    388.   
    389. $w = $v['w'];  
    390.   
    391.   
    392. $h = $v['h'];  
    393.   
    394.   
    395. $dst_pic = "./".$tmp_name_new.$fix_pic;  
    396.   
    397.   
    398. // echo $src_pic."<br>";  
    399.   
    400.   
    401. // echo $dst_pic."<br>";  
    402.   
    403.   
    404. $cmd = "/usr/local/bin/convert -crop ".$w."x".$h."+".$x."+".$y." ".$src_pic." ".$dst_pic;  
    405.   
    406.   
    407. // echo $cmd."<br>";  
    408.   
    409.   
    410. echo `$cmd`;  
    411.   
    412.   
    413. $pic_src[] = "./".$tmp_name.$fix_pic;  
    414.   
    415.   
    416. $pic_dst[] = "./".$tmp_name_new.$fix_pic;  
    417.   
    418.   
    419. }  
    420.   
    421.   
    422. }  
    423.   
    424.   
    425.   
    426.   
    427.   
    428. foreach($pic_src as $key => $value) {  
    429.   
    430.   
    431. echo "<img src='".$value."'> => <img src='".$pic_dst[$key]."'><br>";  
    432.   
    433.   
    434. }  
    435.   
    436.   
    437. }  
    438.   
    439.   
    440. ?>  

     

     在测试。。。。

  • 相关阅读:
    Java线程中带有返回值的线程Callable
    Android 子线程测试
    JAVA下的Thread.sleep方法一定要try
    解决Android Studio 和 Android SDK Manager 无法在线更新的问题.
    asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案
    git 使用2
    前端vue组件传参
    微信小程序 路由跳转 异步请求 存储数据,微信登录接口
    微信小程序 基本介绍及组件
    安装虚拟机
  • 原文地址:https://www.cnblogs.com/buffer/p/2117940.html
Copyright © 2020-2023  润新知