黑灯瞎火自己摸了一个web+人脸识别项目,终于有了一点成果,web界面不怎么绚丽,记录一下.png
- 先look-one-look识别后的效果:
- 还是先贴上项目的网址:
- 先把项目从Github上clone下来–>然后按照里面的requirement.txt的框架要求安装了3个依赖框架–>在当前用户下配置好环境变量[配置时注意要引用原PATH:
FACED_HOME=/faced PATH=$FACED_HOME/bin:$PATH export FACED_HOME PATH
],否则Linux的其他命令都会失效[若不小心操作失效,通过/usr/bin vim /etc/profile
改回来就OK],然后source /etc/profile
让配置立即生效. - 进入faced目录就可以执行faced命令啦~eg:
faced --input xxx.png --save
后就会生成一个output.png
文件,xdg-open output.png
查看人脸识别后的图片 - 想借助前台web界面上传一张图片,后台识别完返回给web显示出来,这时候想到了脚本的方式,看我的另一篇博文:脚本 查看怎么使用脚本
- web端借助了struts框架来处理web提交的action事件(调用Linux系统脚本),贴上核心代码:
//文件中转完成,开始执行脚本[若出错显示权限不足,先执行chmod 777 my.sh]
String shpath="sh "+"/home/lhx/my.sh";
Process ps = Runtime.getRuntime().exec(shpath);
try {
//执行脚本子进程
ps.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
- 脚本执行结束后cp执行后的图片到关联的web项目就可以,贴上web的显示图片代码+脚本cp:
#!/usr/bin/expect
expect -c "
spawn su -
expect \":\"
send \"你的su密码\r\"
send \"cd /faced\r\"
send \"cp /home/lhx/Pictures/input.png /home/lhx/Workspaces/MyEclipse_2017_CI/Face/WebRoot/input.png\r\"
send \"faced --input /home/lhx/Pictures/input.png --save\r\"
send \"cp output.png /home/lhx/Workspaces/MyEclipse_2017_CI/Face/WebRoot/output.png\r\"
send \"xdg-open output.png\r\"
expect eof
"
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<title>Face Recognize</title>
<!-- 图片预览的script -->
<script type="text/javascript">
function imgPreview(fileDom){
//判断是否支持FileReader
if (window.FileReader) {
var reader = new FileReader();
} else {
alert("您的设备不支持图片预览功能,如需该功能请升级您的设备!");
}
//获取文件
var file = fileDom.files[0];
var imageType = /^image\//;
//是否是图片
if (!imageType.test(file.type)) {
alert("请选择图片!");
return;
}
//读取完成
reader.onload = function(e) {
//获取图片dom
var img = document.getElementById("preview");
//图片路径设置为读取的图片
img.src = e.target.result;
};
reader.readAsDataURL(file);
}
</script>
</head>
<body>
<div class="div_input" style="float:left">
<img id="preview" src="/Face/input.png"/>
</div>
<div class="div_button" style="float:left">
<s:form action="face.action" method="post" enctype="multipart/form-data">
<s:file name="file" onchange="imgPreview(this)" />
<s:submit value="开始识别" />
</s:form>
</div>
<div class="div_output" >
<img src="/Face/output.png" alt="Picture Not Found"/>
</div>
</body>
</html>
- org…初成的效果就这么多,再来一张效果图:
- 遇到的问题:action中调用脚本,脚本没有执行;web项目中图片的路径不对导致图片无法显示(没有修改Tomcat中的xml时是不能用绝对路径的,web识别不了绝对路径);8080/8005/8009端口被占用,那就kill他们.
- 后期再把整个项目放到Github上,欢迎学习交流~~~