当前位置:   article > 正文

调用百度识图api实现识图vue+springboot_百度菜品识别接口前端

百度菜品识别接口前端

1.通过网址识别在线图片

前端代码:

  1. 点击检测按钮,调用相应的方法,然后简单的发起个axios网络请求
  2. axios({
  3. url: 'http://localhost:8080/distinguish/url?params='+网络图片网址,
  4. methods: "post",
  5. }).then(function (response) {
  6. console.log(response);
  7. /* 返回成功后将结果渲染在页面 */
  8. },function(err){
  9. console.log(err);
  10. })

后端代码:

百度识图提供的源码模板,我们要做的就是将前端传来的值拼接,然后调用api

  1. @RequestMapping("distinguish")
  2. @RestController
  3. @CrossOrigin
  4. public class UserController {
  5. @RequestMapping(value = "url")
  6. public String test1(String params){
  7. String path = "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant";
  8. ApiExplorerRequest request = new ApiExplorerRequest(HttpMethodName.POST, path);
  9. System.out.println("params"+params);
  10. // 设置header参数
  11. request.addHeaderParameter("Content-Type", "application/json;charset=UTF-8");
  12. // 设置query参数
  13. request.addQueryParameter("access_token", "自己的access_token");
  14. // 设置jsonBody参数
  15. // 百度识图提供的源码模板,我们要做的就是将前端传来的值拼接,然后调用api
  16. String jsonBody = "url="+params;
  17. request.setJsonBody(jsonBody);
  18. ApiExplorerClient client = new ApiExplorerClient();
  19. try {
  20. ApiExplorerResponse response = client.sendRequest(request);
  21. // 返回结果格式为Json字符串
  22. System.out.println(response.getResult());
  23. return response.getResult();
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. return null;
  28. }
  29. }

后端返回结果:

 

 2.通过本地上传文件识图

 前端代码:

  1. 页面按钮:
  2. <div>
  3. <!-- 按钮标签遮盖input自带的本地上传文件的样式,并调起文件类型的input的事件 -->
  4. <button onclick="upload.click()" class="SecondBtn" style="color: white;">
  5. 本地上传
  6. </button>
  7. <!-- 这里的ref在vue中当标签id用,调用loadUrl方法,只接受图片类型的文件 -->
  8. <input ref="inputFile" @change="loadUrl()" accept="image/png,image/gif,image/jpeg"
  9. type="file" name="upload" id="upload" method="post" enctype="multipart/form-data"
  10. style="display: none;" />
  11. </div>
  12. vue代码:
  13. loadUrl(){
  14. let myHeaders = new Headers();
  15. //用User-Agent来发送头请求
  16. myHeaders.append("User-Agent", "apifox/1.0.0 (https://www.apifox.cn)");
  17. let formdata = new FormData();
  18. //console.log输出formdata,游览器控制台输出为空,正常现象
  19. formdata.append("file", this.$refs.inputFile.files[0]);
  20. let requestOptions = {
  21. method: 'POST',
  22. headers: myHeaders,
  23. body: formdata,
  24. redirect: 'follow'
  25. };
  26. fetch("http://localhost:8080/distinguish/urlPath", requestOptions)
  27. .then(response => response.json())
  28. .then(test => {
  29. console.log('result',test.result[0].name)
  30. /* 将返回结果渲染页面 */
  31. })
  32. .catch(error => {
  33. console.log('error', error)
  34. });
  35. 将图片背景变为用户上传的图片
  36. let uurl = new Image()
  37. if (window.createObjectURL != undefined) { // basic
  38. uurl.src = window.createObjectURL(this.$refs.inputFile.files[0])
  39. } else if (window.URL != undefined) { // mozilla(firefox)
  40. uurl.src = window.URL.createObjectURL(this.$refs.inputFile.files[0])
  41. } else if (window.webkitURL != undefined) { // webkit or chrome
  42. uurl.src =
  43. window.webkitURL.createObjectURL(this.$refs.inputFile.files[0])
  44. }
  45. console.log('uurl',uurl.src)
  46. // Url为图片背景
  47. // <div :style="{backgroundImage: 'url(' + Url+ ')'}"></div>
  48. this.Url=uurl.src
  49. },

 后端配置以及相关代码:

  1. application.properties中的配置
  2. spring.servlet.multipart.max-file-size=3MB
  3. #这条路径是自己自定义的,用来存放上传后加工的图片文件
  4. file.upload.path=D:/Program Files (x86)/Project/BackendPart/testImg/

 

  1. @RequestMapping("distinguish")
  2. @RestController
  3. @CrossOrigin
  4. public class UserController {
  5. @Value("${file.upload.path}")
  6. private String path;
  7. //创建日期函数,用来区分图片上传日期
  8. Date currentTime = new Date();
  9. SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd HHmm");
  10. String dateString = format.format(currentTime);
  11. @RequestMapping(value = "urlPath",method = RequestMethod.POST)
  12. @ResponseBody
  13. //用MultipartFile 类型来接收文件
  14. public String test2(@RequestPart MultipartFile file) throws IOException{
  15. //获取文件路径
  16. String fileName = file.getOriginalFilename();
  17. //避免文件名相同,在文件后拼接个随机数
  18. int random_number = (int)(Math.random() * (1000 - 1 + 1) + 1);
  19. String filePath = path + dateString + random_number + fileName ;
  20. //插件文件对象,将路径存放,没有文件就创建文件
  21. File dest = new File(filePath);
  22. //将源文件copy到目标文件file.getInputStream()->dest.toPath(),将上传的文件写到指定目录
  23. Files.copy(file.getInputStream(),dest.toPath());
  24. //以下为百度识图官方提供的代码模板
  25. String url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant";
  26. System.out.println("filePath:"+dest.getAbsolutePath());
  27. try{
  28. String imgUrl = dest.getAbsolutePath();
  29. //转码
  30. //FileUtil、Base64Util、URLEncoder等工具类下载
  31. //https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
  32. //https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
  33. //https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
  34. //https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
  35. byte[] imgData = FileUtil.readFileByBytes(imgUrl);
  36. String imgStr = Base64Util.encode(imgData);
  37. String imgParam = URLEncoder.encode(imgStr,"UTF-8");
  38. String param = "image=" + imgParam;
  39. String accessToken="自己的access_token";
  40. // 设置jsonBody参数
  41. String result = HttpUtil.post(url, accessToken, param);
  42. return result;
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. }
  46. return null;
  47. }

 

 

 到此,一个识图的小项目就这样完成了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/701568
推荐阅读
相关标签
  

闽ICP备14008679号