我想在页面实现人脸识别,成功后登陆
这是我jsp中的代码
<iframe width=0 height=0 frameborder=0 id="myiframe" name="myiframe"></iframe>
<a href="${pageContext.request.contextPath}/user/checkface"> <button id="camera">人脸登录</button></a>
<button class="sui-btn btn-block btn-xlarge btn-danger">摄像头</button>
这是我controller中的代码
@ResponseBody
@RequestMapping("/checkface")
public String checkface1() {
Integer count = userService.checkface();
if (count > 0) {
return"redirect:/admin/main.jsp";
} else {
return "redirect:/admin/main.jsp";
}
}
这是我service中的代码
@Override
public Integer checkface() {
com.itheima.controller.test.face();
String m= com.itheima.controller.test.txt2String1();
return userMapper.checkface(m);
}
这是操作数据库的代码
@Select("select count(user_facename) from user where user_facename=#{facename}")
Integer checkface(String m);
其中test中的代码是这个
package com.itheima.controller;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class test {
public static void main(String[] args) {
face();
System.out.println(txt2String1());
}
public static String txt2String1(){ //输出检测出来的人脸名字的缩写
File file = new File("D:\\FaceRecognition\\InsightFacePytorch\\data\\facebank\\number.npy");
StringBuilder result = new StringBuilder();
try{
// 构造一个BufferedReader类来读取文件
BufferedReader br = new BufferedReader(new FileReader(file));
String s = null;
int i=0;
// 使用readLine方法,一次读一行
while((s = br.readLine())!=null){
if(i==1){
System.out.println(s);
}
i++;
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result.toString();
}
public static void face(){
Process proc;
String compiler = "python ";
String rootPath = "D:\\FaceRecognition\\InsightFacePytorch\\"; //人脸识别的python代码
String program = "face_verify.py";
try{
String commond = "cmd /c "+compiler+" "+rootPath+program;
proc = Runtime.getRuntime().exec(commond);
proc.waitFor();
}
catch(Exception e){
e.printStackTrace();
}
}
}
单独测试test是可以成功的
但是我在页面点击人脸登录按钮时会出现上面截图的样子,不会报错但是也不会执行
想问问怎么样才能让它成功实现人脸识别登录
debug调试看看或者加点日志方便排查问题
接口上加@ResponseBody注解,方法返回的是json字符串,需要返回视图的话,就不用加这个注解。
@RequestMapping("/checkface")
public String checkface1() {
Integer count = userService.checkface();
if (count > 0) {
return"redirect:/admin/main.jsp";
} else {
return "redirect:/admin/main.jsp";
}
}
想问问现在我的按钮中加的有这个
@ResponseBody 注解是用于将Controller方法返回的对象,通过适当的转换器转换为指定格式后,写入到Response对象的body区,通常用于返回JSON格式的数据。因此,使用@ResponseBody注解返回的是数据,而不是页面。如果需要返回页面,应该使用其他注解或方法来实现,例如使用@Controller注解并返回视图名,或使用重定向等方式跳转到指定页面。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据你提供的信息,可能存在以下几个问题:
在checkface1()
方法中,你使用了@ResponseBody
注解,但是却返回了一个重定向的地址,这可能导致前端页面无法正常跳转。如果你想要进行页面跳转,应该去掉@ResponseBody
注解,并直接返回重定向的地址,例如:
@RequestMapping("/checkface")
public String checkface1() {
Integer count = userService.checkface();
if (count > 0) {
return "redirect:/admin/main.jsp";
} else {
return "redirect:/admin/main.jsp";
}
}
在checkface1()
方法中,你调用了userService.checkface()
方法,该方法内部又调用了com.itheima.controller.test.face()
和com.itheima.controller.test.txt2String1()
方法,这两个方法都是静态方法,可能会导致并发问题。建议将这两个方法改为非静态方法,并将它们放到一个类中,然后在userService.checkface()
方法中创建该类的对象,再调用其中的方法,例如:
public class FaceRecognition {
public void face() {
// ...
}
public String txt2String1() {
// ...
}
}
public class UserServiceImpl implements UserService {
@Override
public Integer checkface() {
FaceRecognition fr = new FaceRecognition();
fr.face();
String m = fr.txt2String1();
return userMapper.checkface(m);
}
}
这样可以避免可能存在的并发问题。
在checkface1()
方法中,你调用了userService.checkface()
方法,该方法内部会进行数据库操作。建议在数据库操作前,先确认数据库连接是否正常,以及SQL语句是否正确,如果存在问题,需要对其进行修复。另外,如果数据库操作失败,应该抛出异常并进行相应的处理,以便及时发现和解决问题。
希望以上建议能对你有所帮助。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
根据您提供的代码和描述,可能存在以下问题导致人脸识别登录无法成功实现:
checkface1()
方法中使用了 @ResponseBody
注解,该注解通常用于返回 JSON 或 XML 数据,而不是重定向页面。考虑将返回类型改为 String
并使用 return "admin/main.jsp"
来实现重定向。userService.checkface()
方法中调用了 com.itheima.controller.test.face()
和 com.itheima.controller.test.txt2String1()
方法,但没有提供这两个方法的实现代码。请确保这两个方法能够正常执行,并且返回预期的结果。txt2String1()
方法中,检查 D:\\FaceRecognition\\InsightFacePytorch\\data\\facebank\\number.npy
文件是否存在,并且具有正确的读取权限。请检查以上几点,并确保代码中的所有依赖关系和配置项都正确设置。如果问题仍然存在,请尝试调试代码,检查日志输出或添加调试语句以进一步定位问题所在。
可以远程吗?