合理使用百度开放平台(一)---动物识别

动物识别

本文介绍如何接入百度图像识别
例子为动物识别

创建项目

首先创建好一个vue项目,或者H5普通项目都可以

百度AI开放平台申请应用

百度AI开放平台

在这里插入图片描述进入控制台

没有注册的需要注册认证

在这里插入图片描述
在这里插入图片描述

记得看手册哦
手册入口:入口

在这里插入图片描述

获取 Access Token

可以在浏览器输入
https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=API KEY&client_secret=Secret Key
在这里插入图片描述我用的火狐浏览器
在这里插入图片描述

这里拿到Access Token

发送POST请求可以
效果如下
在这里插入图片描述

发送请求

用POSTMAN或者别的调试软件发送POST请求,也可以用页面直接请求
在VUE中 我们使用AXIOS

此处不封装axios

import axios from "axios";

方便讲解直接引入使用,实际使用要封装
官方文档这样说明
在这里插入图片描述

<div>
    <input
      type="file"
      accept="image/*"
      @change="toGOs($event)"
      id="file"
    /><br />
    <canvas  id="canvas"></canvas>
    <p>{
   
   { name }}</p>
  </div>

页面代码
图片需要转base64且去掉编码头后再进行urlencode后上传
图片尺寸过大也不行
我们将图片压缩
压缩原理 大图片画到小画布 成小图片
推荐:测试时可以调用
站长工具在线图片转base64
站长工具urlencode编码

第一步先上传图片文件

 let file = event.target.files[0];
 let reader = new FileReader();
 reader.readAsDataURL(file);

压缩图片

压缩原理 大图片画到小画布 成小图片
异步加载在reader.onload中

  let canvas = document.getElementById("canvas");
  let context = canvas.getContext("2d");
  canvas.width = 100;
  canvas.height = (100 * image.height) / image.width ;
  context.drawImage(image, 0, 0, 100, (100 * image.height) / image.width);

大的图片按比例压缩成宽100,高*比例,没超过限制的可以不压缩,加个图片宽高判断即可,本次统一压缩

图片转base64,去头,编码

  let d = canvas.toDataURL();//base64
let urlcode = d.substring(reader.result.indexOf(","));//去头
let encodeurl =  encodeURIComponent(this.urlcode);//编码

提交数据处理数据

提交数据

 axios
      .post(
       "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal?access_token=你的Access Token" + encodeurl
          )

提交并处理数据
收到的数据是这样的
在这里插入图片描述

我们只显示第一个,想多显示就多提取数据就行

 axios
      .post(
       "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal?access_token=你的Access Token" + encodeurl
          ).then(res => {
            this.name = res.data.result[0].name;
          });

测试写的完整代码

<template>
  <div>
    <input
      type="file"
      accept="image/*"
      @change="toBase64s($event)"
      id="file"
    /><br />
    <canvas  id="canvas"></canvas>
    <p>{
   
   { name }}</p>
  </div>
</template>

<script>
import axios from "axios";
export default {
     
     
  name: "ind",
  data() {
     
     
    return {
     
     
      srcs: "",
      urlcode: "",
      name: ""
    };
  },
  methods: {
     
     
    toBase64s(event) {
     
     
      // console.log(event.target.files)
      let file = event.target.files[0];
      let reader = new FileReader();
      reader.readAsDataURL(file);
      reader.onload = () => {
     
     
        this.srcs = reader.result;
        let image = new Image();
        image.src = this.srcs;
        let canvas = document.getElementById("canvas");
        let context = canvas.getContext("2d");
        canvas.width = 100;
        canvas.height = (100 * image.height) / image.width ;
        context.drawImage(image, 0, 0, 100, (100 * image.height) / image.width);
        let d = canvas.toDataURL();
        this.urlcode = d.substring(reader.result.indexOf(","));
        axios
          .post(
            "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal?access_token=xxxxxx&image=" +
			                encodeURIComponent(urlcode)
          )
          .then(res => {
     
     
            this.name = res.data.result[0].name;
          });
      };
    }
  },
  mounted() {
     
     }
};
</script>

<style scoped></style>

在这里插入图片描述
可能有点不准,毕竟用的免费版的,其实我拍的是鸭子和鹅的混合图片

HTML版本

思理和vue一样
效果
在这里插入图片描述
代码如下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
	</head>
	<body>
		  <div>
		    <input
		      type="file"
		      accept="image/*"
		      onchange="toBase64s()"
		      id="file"
		    /><br />
		    <canvas  id="canvas"></canvas>
		    <p id="names"></p>
		  </div>
		  <script type="text/javascript">
			  
			  function toBase64s() {
     
     
			        // console.log(event.target.files)
			        let file = document.getElementById("file").files[0];
			        let reader = new FileReader();
			        reader.readAsDataURL(file);
			        reader.onload = () => {
     
     
			          let srcs = reader.result;
			          let image = new Image();
			          image.src = srcs;
			          // console.log(image.style.height+"+"+image.width)
			          let canvas = document.getElementById("canvas");
			          let context = canvas.getContext("2d");
			          canvas.width = 100;
			          canvas.height = (100 * image.height) / image.width ;
			          context.drawImage(image, 0, 0, 100, (100 * image.height) / image.width);
			          let d = canvas.toDataURL();
			          console.log(d);
			          let urlcode = d.substring(reader.result.indexOf(","));
			          axios
			            .post(
			              "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal?access_token=xxxxxx&image=" +
			                encodeURIComponent(urlcode)
			            )
			            .then(res => {
     
     
			              document.getElementById("names").innerText = res.data.result[0].name;
			            });
			        };
			      }
		  </script>
	</body>
</html>







  大家好,我是代码哈士奇,是一名软件学院网络工程的学生,因为我是“狗”,狗走千里吃肉。想把大学期间学的东西和大家分享,和大家一起进步。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://blog.csdn.net/qq_42027681

未经本人允许,禁止转载

在这里插入图片描述


后续会推出

前端:vue入门 vue开发小程序 等
后端: java入门 springboot入门等
服务器:mysql入门 服务器简单指令 云服务器运行项目
python:推荐不温卜火 一定要看哦
一些插件的使用等

大学之道亦在自身,努力学习,热血青春
如果对编程感兴趣可以加入我们的qq群一起交流:974178910
在这里插入图片描述

有问题可以下方留言,看到了会回复哦

猜你喜欢

转载自blog.csdn.net/qq_42027681/article/details/109787372