Commit a4d362c5 by 侯昆

Merge branch 'master' of http://gitlab.coralcodes.com:30000/shil0009/cihai

# Conflicts:
#	serverside/cihai-core/src/main/java/com/dookay/cihai/core/aip/AipImageClassifyClient.java
2 parents caf9335b 6d444bb4
Showing 18 changed files with 575 additions and 49 deletions
/*****************************************
* *
* @dookay.com Internet make it happen *
* ----------- ----------------------- *
* dddd ddddd Internet make it happen *
* o o o Internet make it happen *
* k k k Internet make it happen *
* a a a Internet make it happen *
* yyyy yyyyy Internet make it happen *
* ----------- ----------------------- *
* Code is far away from bug with the *
* animal protecting *
* 神兽保佑,代码无bug  *
* *
****************************************/
package com.dookay.cihai.core.aip;
import com.dookay.cihai.core.aip.enums.ImageInputTypeEnum;
import com.dookay.cihai.core.aip.enums.ScanResultTypeEnum;
import com.dookay.cihai.core.aip.model.GeneralRecognitionResult;
import com.dookay.cihai.core.aip.model.ImageResult;
import com.dookay.cihai.core.aip.model.ScanResult;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Collections;
/**
*
* @author Luxor
* @version v0.0.1
* @since 2017/12/7
*/
@Component
@Slf4j
public class AipDefaultClient {
@Autowired
private AipImageClassifyClient aipImageClassifyClient;
@Autowired
private AipOcrClient aipOcrClient;
/**
* 图片扫描
* @param
* @author luxor
* @date 2017/12/7
*/
public ScanResult scan(String imageBase64) throws JSONException {
ScanResult result = new ScanResult();
GeneralRecognitionResult generalRecognitionResult = aipOcrClient.generalRecognition(imageBase64, ImageInputTypeEnum.BASE64);
if(generalRecognitionResult.getWordsResultNum()>0){
result.setType(ScanResultTypeEnum.WORDS.getValue());
result.setWordsList(generalRecognitionResult.getWordsResult());
}else{
result.setType(ScanResultTypeEnum.PICTURE.getValue());
ImageResult imageResult = aipImageClassifyClient.getImageResult(imageBase64);
result.setWordsList(Collections.singletonList(imageResult.getName()));
}
return result;
}
}
...@@ -18,7 +18,6 @@ package com.dookay.cihai.core.aip; ...@@ -18,7 +18,6 @@ package com.dookay.cihai.core.aip;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baidu.aip.imageclassify.AipImageClassify; import com.baidu.aip.imageclassify.AipImageClassify;
import com.baidu.aip.util.Base64Util;
import com.dookay.cihai.core.aip.enums.ImageInputTypeEnum; import com.dookay.cihai.core.aip.enums.ImageInputTypeEnum;
import com.dookay.cihai.core.aip.model.ImageResult; import com.dookay.cihai.core.aip.model.ImageResult;
import com.dookay.coral.common.core.exception.ServiceException; import com.dookay.coral.common.core.exception.ServiceException;
...@@ -27,14 +26,10 @@ import org.codehaus.plexus.util.StringUtils; ...@@ -27,14 +26,10 @@ import org.codehaus.plexus.util.StringUtils;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.Base64Utils; import org.springframework.util.Base64Utils;
import java.util.ArrayList; import java.util.*;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
/** /**
* 图片识别客户端 * 图片识别客户端
...@@ -52,7 +47,7 @@ public class AipImageClassifyClient { ...@@ -52,7 +47,7 @@ public class AipImageClassifyClient {
public static final String SECRET_KEY = "YUGcqkGioxrceK4CgD3wB90vmmG7KzRf"; public static final String SECRET_KEY = "YUGcqkGioxrceK4CgD3wB90vmmG7KzRf";
/** /**
* 获取动物图片识别结果列表,可能会有多个结果 * 获取动物图片识别结果列表,会有多个结果
* @param * @param
* @author luxor * @author luxor
* @date 2017/12/7 * @date 2017/12/7
...@@ -71,12 +66,11 @@ public class AipImageClassifyClient { ...@@ -71,12 +66,11 @@ public class AipImageClassifyClient {
log.info(image); log.info(image);
} }
// 调用接口
return parseResult(res); return parseResult(res);
} }
/** /**
* 获取动物图片识别结果列表,可能会有多个结果 * 获取植物图片识别结果列表,会有多个结果
* @param * @param
* @author luxor * @author luxor
* @date 2017/12/7 * @date 2017/12/7
...@@ -95,7 +89,6 @@ public class AipImageClassifyClient { ...@@ -95,7 +89,6 @@ public class AipImageClassifyClient {
log.info(image); log.info(image);
} }
// 调用接口
return parseResult(res); return parseResult(res);
} }
...@@ -134,15 +127,13 @@ public class AipImageClassifyClient { ...@@ -134,15 +127,13 @@ public class AipImageClassifyClient {
if(StringUtils.isBlank(imageBase64)){ if(StringUtils.isBlank(imageBase64)){
return new ImageResult(); return new ImageResult();
} }
String image = imageBase64.replace("data:image/png;base64,","") String image = AipUtils.fixImage(imageBase64);
.replace("data:image/jpg;base64,","")
.replace("data:image/jpeg;base64,","");
log.info("image:"+image); log.info("image:"+image);
List<ImageResult> imageResultList = this.getAnimalDetect(image,ImageInputTypeEnum.BASE64); List<ImageResult> imageResultList = this.getAnimalDetect(image,ImageInputTypeEnum.BASE64);
List<ImageResult> imageResultList2 = this.getPlantDetect(image,ImageInputTypeEnum.BASE64); List<ImageResult> imageResultList2 = this.getPlantDetect(image,ImageInputTypeEnum.BASE64);
imageResultList.addAll(imageResultList2); imageResultList.addAll(imageResultList2);
log.info(JSON.toJSONString(imageResultList)); log.info(JSON.toJSONString(imageResultList));
return imageResultList.stream().filter(x->x.getScore()<0.99).sorted(Comparator.comparing(ImageResult::getScore).reversed()).findFirst().orElse(new ImageResult()); return imageResultList.stream().filter(x-> !Objects.equals(x.getName(), "非动物")).sorted(Comparator.comparing(ImageResult::getScore).reversed()).findFirst().orElse(new ImageResult());
} }
} }
/*****************************************
* *
* @dookay.com Internet make it happen *
* ----------- ----------------------- *
* dddd ddddd Internet make it happen *
* o o o Internet make it happen *
* k k k Internet make it happen *
* a a a Internet make it happen *
* yyyy yyyyy Internet make it happen *
* ----------- ----------------------- *
* Code is far away from bug with the *
* animal protecting *
* 神兽保佑,代码无bug  *
* *
****************************************/
package com.dookay.cihai.core.aip;
import com.baidu.aip.ocr.AipOcr;
import com.dookay.cihai.core.aip.enums.ImageInputTypeEnum;
import com.dookay.cihai.core.aip.model.GeneralRecognitionResult;
import com.dookay.cihai.core.aip.model.ImageResult;
import com.dookay.coral.common.core.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.stereotype.Component;
import org.springframework.util.Base64Utils;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* 图文文字识别客户端
* @author Luxor
* @version v0.0.1
* @since 2017/12/7
*/
@Component
@Slf4j
public class AipOcrClient {
//设置APPID/AK/SK
public static final String APP_ID = "10492789";
public static final String API_KEY = "MfnPaNqkmPyyU6GecceDmkFt";
public static final String SECRET_KEY = "f7saVfLEXKC6AG6TU3CEfG0iUCXXY2kn";
/**
* 通用文字识别
* @param
* @param image
* @author luxor
* @date 2017/12/7
*/
public GeneralRecognitionResult generalRecognition(String image, ImageInputTypeEnum typeEnum) throws JSONException {
// 初始化一个AipOcr
AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
// 自定义参数定义
HashMap<String, String> options = new HashMap<String, String>();
options.put("detect_direction", "true");
options.put("language_type", "CHN_ENG");
//调用接口
JSONObject res;
// 参数为本地图片路径
if(typeEnum == ImageInputTypeEnum.PATH){
res = client.basicGeneral(image, options);
}else{
image = AipUtils.fixImage(image);
byte[] file = Base64Utils.decodeFromString(image);
res = client.basicGeneral(file, options);
log.info(image);
}
return parseResult(res);
}
/**
* 解析结果
* @param
* @author luxor
* @date 2017/12/7
*/
private GeneralRecognitionResult parseResult(JSONObject res) throws JSONException {
if(res.has("error_code")){
log.info("图像识别错误:"+res.toString(2));
throw new ServiceException("图像识别错误:"+res.toString(2));
}else{
GeneralRecognitionResult result = new GeneralRecognitionResult();
result.setWordsResultNum(res.getInt("words_result_num"));
List<String> wordsList = new ArrayList<>();
JSONArray jsonArray = res.getJSONArray("words_result");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
wordsList.add(jsonObject.getString("words"));
}
result.setWordsResult(wordsList);
return result;
}
}
}
/*****************************************
* *
* @dookay.com Internet make it happen *
* ----------- ----------------------- *
* dddd ddddd Internet make it happen *
* o o o Internet make it happen *
* k k k Internet make it happen *
* a a a Internet make it happen *
* yyyy yyyyy Internet make it happen *
* ----------- ----------------------- *
* Code is far away from bug with the *
* animal protecting *
* 神兽保佑,代码无bug  *
* *
****************************************/
package com.dookay.cihai.core.aip;
import java.io.*;
import java.util.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* @author Luxor
* @version v0.0.1
* @since 2017/12/7
*/
public class AipUtils {
/**
* 读取txt文件的内容
* @param file 想要读取的文件对象
* @return 返回文件内容
* @author luxor
* @date 2017/12/7
*/
public static String txt2String(File file){
StringBuilder result = new StringBuilder();
try{
BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
result.append(s);
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result.toString();
}
/**
* @param
* @author luxor
* @date 2017/12/7
*/
public static String fixImage(String imageBase64){
return imageBase64.replace("data:image/png;base64,","")
.replace("data:image/jpg;base64,","")
.replace("data:image/jpeg;base64,","");
}
/**
* 文件转base64字符串
* @param file
* @return
* @author luxor
* @date 2017/12/7
*/
public static String encodeBase64File( File file) throws Exception {
FileInputStream inputFile = new FileInputStream(file);
byte[] buffer = new byte[(int) file.length()];
inputFile.read(buffer);
inputFile.close();
return new BASE64Encoder().encode(buffer);
}
}
...@@ -250,7 +250,7 @@ public final class AipWordUtilBean { ...@@ -250,7 +250,7 @@ public final class AipWordUtilBean {
* @author houkun * @author houkun
* @date 2017/12/6 * @date 2017/12/6
*/ */
private List<LexerItem> getLexerItems(String document) throws JSONException { public List<LexerItem> getLexerItems(String document) throws JSONException {
List<String> documents = splitDocument(document, 10000); List<String> documents = splitDocument(document, 10000);
List<LexerItem> lexerItems = new ArrayList<>(); List<LexerItem> lexerItems = new ArrayList<>();
for (String s : documents) { for (String s : documents) {
......
/*****************************************
* *
* @dookay.com Internet make it happen *
* ----------- ----------------------- *
* dddd ddddd Internet make it happen *
* o o o Internet make it happen *
* k k k Internet make it happen *
* a a a Internet make it happen *
* yyyy yyyyy Internet make it happen *
* ----------- ----------------------- *
* Code is far away from bug with the *
* animal protecting *
* 神兽保佑,代码无bug  *
* *
****************************************/
package com.dookay.cihai.core.aip.enums;
import com.dookay.coral.common.core.enums.IEnum;
/**
* @author Luxor
* @version v0.0.1
* @since 2017/12/7
*/
public enum ScanResultTypeEnum implements IEnum {
PICTURE(1, "图片"),
WORDS(2,"文字");
private int value;
private String description;
ScanResultTypeEnum(int value, String description) {
this.value = value;
this.description = description;
}
@Override
public int getValue() {
return value;
}
@Override
public String getDescription() {
return description;
}
public static ScanResultTypeEnum valueOf(Integer value) {
ScanResultTypeEnum[] values = ScanResultTypeEnum.values();
for (ScanResultTypeEnum item : values) {
if (item.value == value) {
return item;
}
}
return null;
}
}
/*****************************************
* *
* @dookay.com Internet make it happen *
* ----------- ----------------------- *
* dddd ddddd Internet make it happen *
* o o o Internet make it happen *
* k k k Internet make it happen *
* a a a Internet make it happen *
* yyyy yyyyy Internet make it happen *
* ----------- ----------------------- *
* Code is far away from bug with the *
* animal protecting *
* 神兽保佑,代码无bug  *
* *
****************************************/
package com.dookay.cihai.core.aip.model;
import lombok.Data;
import java.util.List;
/**
* @author Luxor
* @version v0.0.1
* @since 2017/12/7
*/
@Data
public class GeneralRecognitionResult {
/*识别结果数,表示words_result的元素个数*/
private Integer wordsResultNum;
/*识别结果字符串数字*/
private List<String> wordsResult;
}
/*****************************************
* *
* @dookay.com Internet make it happen *
* ----------- ----------------------- *
* dddd ddddd Internet make it happen *
* o o o Internet make it happen *
* k k k Internet make it happen *
* a a a Internet make it happen *
* yyyy yyyyy Internet make it happen *
* ----------- ----------------------- *
* Code is far away from bug with the *
* animal protecting *
* 神兽保佑,代码无bug  *
* *
****************************************/
package com.dookay.cihai.core.aip.model;
import lombok.Data;
import java.util.List;
/**
* 图像扫描结果
* @author Luxor
* @version v0.0.1
* @since 2017/12/7
*/
@Data
public class ScanResult {
/*图像、文字*/
private Integer type;
/*结果文字列表*/
private List<String> wordsList;
}
...@@ -82,5 +82,7 @@ public class WordDomain implements Serializable { ...@@ -82,5 +82,7 @@ public class WordDomain implements Serializable {
private String category; private String category;
private String wordAlias;
} }
...@@ -6,6 +6,8 @@ import tk.mybatis.mapper.entity.Example; ...@@ -6,6 +6,8 @@ import tk.mybatis.mapper.entity.Example;
import com.dookay.coral.common.core.persistence.criteria.QueryCriteria; import com.dookay.coral.common.core.persistence.criteria.QueryCriteria;
import com.dookay.cihai.core.word.domain.WordDomain; import com.dookay.cihai.core.word.domain.WordDomain;
import java.util.List;
/** /**
* 词条 * 词条
* *
...@@ -18,12 +20,27 @@ public class WordQuery extends Query { ...@@ -18,12 +20,27 @@ public class WordQuery extends Query {
private String keyword; private String keyword;
private List<String> keywordList;
@Override @Override
public QueryCriteria toCriteria() { public QueryCriteria toCriteria() {
QueryCriteria queryCriteria = new QueryCriteria(WordDomain.class); QueryCriteria queryCriteria = new QueryCriteria(WordDomain.class);
Example.Criteria criteria = queryCriteria.createCriteria(); Example.Criteria criteria = queryCriteria.createCriteria();
if (valid(keyword)) { if (valid(keyword)) {
String str = "%" + keyword + "%";
criteria.andCondition(String.format("(word like '%s' or word_alias like '%s')", str, str));
}
if (valid(keywordList)) {
String sql = "";
for (int i = 0; i < keywordList.size(); i++) {
if (i == 0) {
sql += " word like '%" + keywordList.get(i) + "%'";
} else {
sql += " or word like '%" + keywordList.get(i) + "%'";
}
}
System.out.println(sql);
criteria.andCondition(sql);
} }
//todo 写查询逻辑 //todo 写查询逻辑
return queryCriteria; return queryCriteria;
......
package com.dookay.cihai.core.aip;
import com.alibaba.fastjson.JSON;
import com.dookay.cihai.core.CihaiCoreApplicationTests;
import com.dookay.cihai.core.aip.model.ScanResult;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import java.io.File;
/**
* @author Luxor
* @version v0.0.1
* @since 2017/12/7
*/
@Slf4j
public class AipDefaultClientTest extends CihaiCoreApplicationTests {
@Autowired
private AipDefaultClient aipDefaultClient;
@Test
public void scan() throws Exception {
File file = ResourceUtils.getFile("classpath:daxiang.txt");
String image = AipUtils.txt2String(file);
ScanResult result = aipDefaultClient.scan(image);
log.info(JSON.toJSONString(result));
}
}
\ No newline at end of file \ No newline at end of file
...@@ -8,11 +8,7 @@ import org.junit.Test; ...@@ -8,11 +8,7 @@ import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils; import org.springframework.util.ResourceUtils;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader;
import static org.junit.Assert.*;
/** /**
* @author Luxor * @author Luxor
...@@ -26,32 +22,13 @@ public class AipImageClassifyClientTest extends CihaiCoreApplicationTests { ...@@ -26,32 +22,13 @@ public class AipImageClassifyClientTest extends CihaiCoreApplicationTests {
@Test @Test
public void getImageResult() throws Exception { public void getImageResult() throws Exception {
File file = ResourceUtils.getFile("classpath:daxiang.txt"); File file = ResourceUtils.getFile("classpath:mudan.txt");
System.out.println(txt2String(file)); System.out.println(AipUtils.txt2String(file));
String image = txt2String(file); String image = AipUtils.txt2String(file);
log.info(image); log.info(image);
ImageResult imageResult = aipImageClassifyClient.getImageResult(image); ImageResult imageResult = aipImageClassifyClient.getImageResult(image);
Boolean flag = imageResult.getScore()<0.99;
log.info(JSON.toJSONString(imageResult)); log.info(JSON.toJSONString(imageResult));
} }
/**
* 读取txt文件的内容
* @param file 想要读取的文件对象
* @return 返回文件内容
*/
public static String txt2String(File file){
StringBuilder result = new StringBuilder();
try{
BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
result.append(s);
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result.toString();
}
} }
\ No newline at end of file \ No newline at end of file
package com.dookay.cihai.core.aip;
import com.alibaba.fastjson.JSON;
import com.dookay.cihai.core.CihaiCoreApplicationTests;
import com.dookay.cihai.core.aip.enums.ImageInputTypeEnum;
import com.dookay.cihai.core.aip.model.GeneralRecognitionResult;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import java.io.*;
import static org.junit.Assert.*;
/**
* @author Luxor
* @version v0.0.1
* @since 2017/12/7
*/
@Slf4j
public class AipOcrClientTest extends CihaiCoreApplicationTests {
@Autowired
private AipOcrClient aipOcrClient;
@Test
public void generalRecognition() throws Exception {
File file = ResourceUtils.getFile("classpath:wenzi.txt");
String image = AipUtils.txt2String(file);
GeneralRecognitionResult result = aipOcrClient.generalRecognition(image, ImageInputTypeEnum.BASE64);
log.info(JSON.toJSONString(result));
}
@Test
public void generalRecognition2() throws Exception {
File file = ResourceUtils.getFile("classpath:daxiang.txt");
String image = AipUtils.txt2String(file);
GeneralRecognitionResult result = aipOcrClient.generalRecognition(image, ImageInputTypeEnum.BASE64);
log.info(JSON.toJSONString(result));
}
/**
* 读取txt文件的内容
* @param file 想要读取的文件对象
* @return 返回文件内容
*/
public static String txt2String(File file){
StringBuilder result = new StringBuilder();
try{
BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
result.append(s);
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result.toString();
}
}
\ No newline at end of file \ No newline at end of file
...@@ -14,16 +14,23 @@ ...@@ -14,16 +14,23 @@
package com.dookay.cihai.wechat.controller; package com.dookay.cihai.wechat.controller;
import com.dookay.cihai.core.aip.AipImageClassifyClient;
import com.dookay.cihai.core.aip.AipWordUtilBean; import com.dookay.cihai.core.aip.AipWordUtilBean;
import com.dookay.cihai.core.aip.model.ImageResult;
import com.dookay.cihai.core.aip.model.LexerItem;
import com.dookay.cihai.core.theme.domain.ThemeDomain; import com.dookay.cihai.core.theme.domain.ThemeDomain;
import com.dookay.cihai.core.theme.query.ThemeQuery; import com.dookay.cihai.core.theme.query.ThemeQuery;
import com.dookay.cihai.core.theme.service.IThemeService; import com.dookay.cihai.core.theme.service.IThemeService;
import com.dookay.cihai.core.word.domain.WordDomain;
import com.dookay.cihai.core.word.domain.CustomDictionaryDomain; import com.dookay.cihai.core.word.domain.CustomDictionaryDomain;
import com.dookay.cihai.core.word.query.CustomDictionaryQuery; import com.dookay.cihai.core.word.query.CustomDictionaryQuery;
import com.dookay.cihai.core.word.query.WordQuery;
import com.dookay.cihai.core.word.service.ICustomDictionaryService; import com.dookay.cihai.core.word.service.ICustomDictionaryService;
import com.dookay.cihai.core.word.service.IWordService; import com.dookay.cihai.core.word.service.IWordService;
import com.dookay.coral.common.web.constant.MediaTypes;
import com.dookay.coral.common.web.controller.BaseController; import com.dookay.coral.common.web.controller.BaseController;
import com.dookay.coral.common.web.response.JsonResult; import com.dookay.coral.common.web.response.JsonResult;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -32,6 +39,7 @@ import org.springframework.web.bind.annotation.ResponseBody; ...@@ -32,6 +39,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author 石磊 * @author 石磊
...@@ -52,6 +60,9 @@ public class HomeController extends BaseController { ...@@ -52,6 +60,9 @@ public class HomeController extends BaseController {
@Autowired @Autowired
private AipWordUtilBean aipWordUtilBean; private AipWordUtilBean aipWordUtilBean;
@Autowired
private AipImageClassifyClient aipImageClassifyClient;
/** /**
* @author 石磊 * @author 石磊
* @date 2017/12/6 * @date 2017/12/6
...@@ -71,7 +82,10 @@ public class HomeController extends BaseController { ...@@ -71,7 +82,10 @@ public class HomeController extends BaseController {
@RequestMapping(value = "/home/search", method = RequestMethod.GET) @RequestMapping(value = "/home/search", method = RequestMethod.GET)
@ResponseBody @ResponseBody
public JsonResult search(String keyword) { public JsonResult search(String keyword) {
System.out.println("进入搜索"); System.out.println("进入搜索:" + keyword);
if (StringUtils.isBlank(keyword)) {
return errorResult("搜索内容不能为空");
}
String result = null; String result = null;
boolean inDic = false; boolean inDic = false;
List<CustomDictionaryDomain> dictionaryDomainList = customDictionaryService.getList(new CustomDictionaryQuery()); List<CustomDictionaryDomain> dictionaryDomainList = customDictionaryService.getList(new CustomDictionaryQuery());
...@@ -88,7 +102,19 @@ public class HomeController extends BaseController { ...@@ -88,7 +102,19 @@ public class HomeController extends BaseController {
ThemeQuery query = new ThemeQuery(); ThemeQuery query = new ThemeQuery();
query.setKeyword(result); query.setKeyword(result);
ThemeDomain themeDomain = themeService.getFirst(query); ThemeDomain themeDomain = themeService.getFirst(query);
if (themeDomain == null) return errorResult(String.format("暂无\"%s\"检索结果", keyword)); if (themeDomain == null) {
WordQuery wordQuery = new WordQuery();
wordQuery.setKeyword(result);
WordDomain wordDomain = wordService.getFirst(wordQuery);
if (wordDomain == null) {
List<LexerItem> items = aipWordUtilBean.getLexerItems(result);
wordQuery.setKeywordList(items.stream().map(n -> n.getItem()).collect(Collectors.toList()));
wordQuery.setKeyword(null);
wordDomain = wordService.getFirst(wordQuery);
if (wordDomain == null) return errorResult(String.format("暂无\"%s\"检索结果", keyword));
}
return successResult("success", "/word/baike/" + wordDomain.getId());
}
System.out.println(themeDomain); System.out.println(themeDomain);
return successResult("success", "/theme/detail/" + themeDomain.getId()); return successResult("success", "/theme/detail/" + themeDomain.getId());
} catch (Exception ex) { } catch (Exception ex) {
...@@ -96,4 +122,33 @@ public class HomeController extends BaseController { ...@@ -96,4 +122,33 @@ public class HomeController extends BaseController {
} }
} }
/**
* @author 石磊
* @date 2017/12/7
* @description 图片搜索
*/
@RequestMapping(value = "/image/search", method = RequestMethod.POST, produces = MediaTypes.JSON_UTF_8)
@ResponseBody
public JsonResult imageSearch(String image) {
System.out.println("进入图片检索");
try {
ImageResult imageResult = aipImageClassifyClient.getImageResult(image);
String name = imageResult.getName();
System.out.println(name);
WordQuery wordQuery = new WordQuery();
wordQuery.setKeyword(name);
WordDomain wordDomain = wordService.getFirst(wordQuery);
if (wordDomain == null) {
List<LexerItem> items = aipWordUtilBean.getLexerItems(name);
wordQuery.setKeywordList(items.stream().map(n -> n.getItem()).collect(Collectors.toList()));
wordQuery.setKeyword(null);
wordDomain = wordService.getFirst(wordQuery);
if (wordDomain == null) return errorResult("暂无检索结果");
}
return successResult("success", "/word/baike/" + wordDomain.getId());
} catch (Exception ex) {
return errorResult("暂无检索结果");
}
}
} }
...@@ -57,7 +57,6 @@ ...@@ -57,7 +57,6 @@
wx.stopRecord({ wx.stopRecord({
success: function (res) { success: function (res) {
myApp.dialog.preloader(); myApp.dialog.preloader();
var localId = res.localId; var localId = res.localId;
wx.translateVoice({ wx.translateVoice({
localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得 localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得
...@@ -105,9 +104,19 @@ ...@@ -105,9 +104,19 @@
localId: localIds[0], // 图片的localID localId: localIds[0], // 图片的localID
success: function (res) { success: function (res) {
myApp.dialog.preloader();
var localData = res.localData; // localData是图片的base64数据,可以用img标签显示 var localData = res.localData; // localData是图片的base64数据,可以用img标签显示
alert(localData); jQuery.post("/image/search",{image:localData},function (data) {
myApp.dialog.close();
if (data.code == "OK") {
// myApp.view.main.router.load({
// url:data.data
// });
location.href = data.data;
} else {
myApp.dialog.alert(data.message);
}
})
} }
}); });
......
...@@ -290,7 +290,7 @@ ...@@ -290,7 +290,7 @@
<div class="navbar"> <div class="navbar">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="left"> <div class="left">
<a class="link back" href="/"> <a class="link back js-jump-page" href="/">
<i class="iconfont icon-jiantou"></i> <i class="iconfont icon-jiantou"></i>
<span class="ios-only">返回</span> <span class="ios-only">返回</span>
</a> </a>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!