博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaWeb开发实现多图上传和调用C++Deeplearning算法进行图片对比检测
阅读量:6079 次
发布时间:2019-06-20

本文共 6227 字,大约阅读时间需要 20 分钟。

首先实现前台界面,上传图片并保存到指定路径,然后java制作dll,利用jni调用C++代码,将保存的图片路径传给dll处理,并返回一个处理结果。

整个环境如下:

window10 x64
jdk1.7 x86,tomcat7.0 x86
myeclipse 2014 32位
struts-2.3.16.3

第一步:利用struts2实现多图片上传,界面如下:

clipboard.png

项目的目录结构如下:

clipboard.png

首先下载struts2,并在struts-2.3.16.3apps找到struts2-blank.war,将其解压,然后把WEB-INF目录下的所有jar包复制到这,如下图:

clipboard.png

在src文件夹右键,新建立一个struts.xml(这里用直接复制struts目录下的struts.xml到项目下,编译器会报错,具体原因我也没弄清楚),具体步骤如图:

clipboard.png

clipboard.png

struts.xml内容:

/image
index.jsp

在WEB-INF目录下新建web.xml如下图:

clipboard.png

clipboard.png

web.xml内容:

Test
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp

然后在WebRoot目录下新建一个image(文件夹的名称不同的话,需要在struts.xml进行同步修改)文件夹备用:

接下来新建com.action包,在此包下新建upLoadAction.java,(如何要修改名称的话,也需要在struts.xml中修改一下配置信息),代码:

package com.action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 使用数组上传多个文件 *  * @author ljq * */@SuppressWarnings("serial")public class upLoadAction extends ActionSupport{    public native int Contrast(String path1,String path2);    private File[] image; //上传的文件    private String[] imageFileName; //文件名称    private String[] imageContentType; //文件类型    private String savePath;    @Override    public String execute() throws Exception {        ServletActionContext.getRequest().setCharacterEncoding("UTF-8");        //取得需要上传的文件数组        File[] files = getImage();        String []str=new String[2];        if (files !=null && files.length > 0) {            for (int i = 0; i < files.length; i++) {                //建立上传文件的输出流, getImageFileName()[i]                str[i]=getSavePath() + "\\" + getImageFileName()[i];                System.out.println(getSavePath() + "\\" + getImageFileName()[i]);                FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getImageFileName()[i]);                //建立上传文件的输入流                FileInputStream fis = new FileInputStream(files[i]);                byte[] buffer = new byte[1024];                int len = 0;                while ((len=fis.read(buffer))>0) {                    fos.write(buffer, 0, len);                }                fos.close();                fis.close();            }        }        //这一段代码是用来调用dll,进行图片对比的        try{            upLoadAction t=new upLoadAction();            System.loadLibrary("Test4");            int a=3;            a=t.Contrast(str[0],str[1]);            System.out.println("**************"+a);        }catch(Exception exp){            System.out.println("处理图片出错!");        }                        return SUCCESS;    }    public File[] getImage() {        return image;    }    public void setImage(File[] image) {        this.image = image;    }    public String[] getImageFileName() {        return imageFileName;    }    public void setImageFileName(String[] imageFileName) {        this.imageFileName = imageFileName;    }    public String[] getImageContentType() {        return imageContentType;    }    public void setImageContentType(String[] imageContentType) {        this.imageContentType = imageContentType;    }    /**     * 返回上传文件保存的位置     *      * @return     * @throws Exception     */    public String getSavePath() throws Exception {        return ServletActionContext.getServletContext().getRealPath(savePath);    }    public void setSavePath(String savePath) {        this.savePath = savePath;    }        }

在WebRoot下新建upload.jsp,代码如下:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'upLoad.jsp' starting page        
文件1:
文件2:

index.jsp代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%>          My JSP 'message.jsp' starting page        
上传成功

到此为止,图片就可上传成功了

其中还有就是要注意tomcat,jdk版本要一致,我都是用的1.7对应7.0,然后myeclipse2014 32位,而且要在myeclipse中将自己的jdk1.7和tomcat配置进去,而不能用myeclipse自带的
具体配置可以参考我的另一篇文章:

第二步,制作dll,并调用,制作dll的过程在我的另一篇文章里面有:

我这里只贴出程序入口处的代码:

#include "Test.h"#include "main.h"JNIEXPORT jint JNICALL Java_com_action_upLoadAction_Contrast(JNIEnv *env, jobject obj, jstring path1, jstring path2){    //将java字符串类型转化为char* 型    const char* str1 = env->GetStringUTFChars(path1, 0);    const char* str2 = env->GetStringUTFChars(path2, 0);    //不能直接把const char*型作为imread()的实参,因此将char *str1复制到cap1中    char cap1[128];    char cap2[128];    strcpy(cap1, str1);    strcpy(cap2, str2);    //printf(cap1);    //printf(cap2);    cv::Mat im1 = cv::imread(cap1);    cv::Mat im2 = cv::imread(cap2);    int predictout = image(im1, im2);    return predictout;}

头文件的代码:

/* DO NOT EDIT THIS FILE - it is machine generated */#include 
/* Header for class com_action_upLoadAction */#ifndef _Included_com_action_upLoadAction#define _Included_com_action_upLoadAction#ifdef __cplusplusextern "C" {#endif /* * Class: com_action_upLoadAction * Method: Contrast * Signature: (Ljava/lang/String;Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_com_action_upLoadAction_Contrast (JNIEnv *env, jobject obj, jstring path1, jstring path2);#ifdef __cplusplus}#endif#endif

制作好的dll要放在tomcat的E:\tom1\apache-tomcat-7.0.78_x86\bin

目录下还有这几个数据文本也是

clipboard.png

转载地址:http://pfagx.baihongyu.com/

你可能感兴趣的文章
带空格文件名的处理(find xargs grep ..etc)
查看>>
华为Access、Hybrid和Trunk的区别和设置
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
第六周
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>