第一步肯定是去http://ai.baidu.com 注册账号,登陆并注册创建应用。

http://ai.baidu.com/docs#/Begin/top 具体操作就看百度给出的文档即可很详细的哦。图文说明的

第二步https://mp.weixin.qq.com/cgi-bin/wx注册个微信小程序(作者不会移动端开发所以选择了微信小程序)

微信小程序需要注意事项:1.必须有一个具有公网IP的服务器。且需要HTTPS协议(这样很好,可以直接跳转域名备案的问题) 2.选择BCC(百度云服务器)是一个不错的选择。当然别家的也是可以的

第三步就是熟悉百度AI文档,并进行测试接口,以备后续使用

http://ai.baidu.com/docs#/ImageClassify-API/top 图像识别的文档。包含了示例代码根据自己所学语言查看即可。(最好会一门后端开发语言 作者使用Java)

图像识别模块截图示意                                                                                                            小程序专属码(微信扫一扫即可体验查看)

官网给出的Java代码示例:大家可以直接复制替换参数使用即可

package com.baidu.ai.aip;

import com.baidu.ai.aip.utils.Base64Util;

import com.baidu.ai.aip.utils.FileUtil;

import com.baidu.ai.aip.utils.HttpUtil;

import java.net.URLEncoder;

/**

* 菜品识别

*/

public class Dish {

/**

* 重要提示代码中所需工具类

* FileUtil,Base64Util,HttpUtil,GsonUtils请从

* https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72

* https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2

* https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3

* https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3

* 下载

*/

public static String dish() {

// 请求url

String url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/dish";

try {

// 本地文件路径

String filePath = "[本地文件路径]";

byte[] imgData = FileUtil.readFileByBytes(filePath);

String imgStr = Base64Util.encode(imgData);

String imgParam = URLEncoder.encode(imgStr, "UTF-8");

String param = "image=" + imgParam + "&top_num=" + 5;

// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。

String accessToken = "[调用鉴权接口获取的token]";

String result = HttpUtil.post(url, accessToken, param);

System.out.println(result);

return result;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static void main(String[] args) {

Dish.dish();

}

}

作者本人的微信小程序展示分2大部分

Java后端实现:使用SpringMVC实现上传图片并进行读取图片的本地路径转base64请求百度AI接口实现。由于后台具体功能尚未完善就不公开源码了。示例代码如下:

/**

* 上传文件方法 植物识别

* @param request

* @param response

* @throws Exception

*/

@RequestMapping(value="/uploadBDPLANT",method=RequestMethod.POST)

public void UploadBDPLANT()throws Exception{

String result = "";

MultipartHttpServletRequest mpRequest = (MultipartHttpServletRequest)this.request;

int sizeThreshold = 6144;

String respath = "/uploads";

String despath = "/uploads/";

String baseResPath = getRealPath(respath);

String baseDespath = getRealPath(despath);

File repository = new File(baseResPath);

long sizeMax = 8388608L;

DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();

diskFileItemFactory.setRepository(repository);

diskFileItemFactory.setSizeThreshold(sizeThreshold);

ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);

servletFileUpload.setSizeMax(sizeMax);

Iterator iter = mpRequest.getFileNames();

MultipartFile file = null;

while (iter.hasNext()) {

file = mpRequest.getFile((String)iter.next());

if ((file != null) && (file.getSize() != 0L))

{

byte[] b = file.getBytes();

String filename = "BDPLANT" + new Date().getTime() / 1000L + file.getOriginalFilename();

String allfilename = filename.substring(0, filename.lastIndexOf("."));

String ext = filename.substring(filename.lastIndexOf(".") + 1);

if (!ext.toLowerCase().equals("amr")) {

logger.info("==============非音频文件==============");

File targetDir = new File(baseDespath);

System.out.println("非音频文件 目录是否存在 是否是目录" + targetDir.exists() + "-" + targetDir.isDirectory());

try {

boolean a = targetDir.mkdirs();

System.out.println(a + "目录已经创建");

} catch (Exception e) {

logger.error("目录创建失败:" + e.getMessage(), e);

}

String path = baseDespath + File.separator + filename;

File target = new File(path);

System.out.println("target path=" + path);

if (!target.exists())

try {

boolean a = target.createNewFile();

System.out.println(a + "文件夹创建");

} catch (Exception e) {

logger.error("文件夹创建失败" + e.getMessage(), e);

}

try

{

FileUtil.saveFile(b, path);

String token = getBDTokenParam();

String url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant";

byte[] imgData = FileUtil.readFileByBytes(path);

String imgStr = com.bdxc.util.Base64Util.encode(imgData);

String params = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(imgStr, "UTF-8")+"&top_num=1";

String responseBD = HttpUtils.post(url, token, params);

net.sf.json.JSONObject object = net.sf.json.JSONObject.fromObject(responseBD);

Map classMap = new HashMap();

classMap.put("result",com.bdxc.vo.baiduVO.BDPlantAnimal.Result.class);

BDPlantAnimal bdPlant = (BDPlantAnimal) JSONObject.toBean(object,BDPlantAnimal.class,classMap);

if (bdPlant != null) {

double returnscore = bdPlant.getResult().get(0).getScore();

if (returnscore<0.001) {

result = "{\"result\":\"fail\",\"words\":\"未能识别出植物或可信度过低 Sorry\"}";

PrintUtil.printJson(this.response, result);

continue;

}

logger.info("百度植物返回的信息" + object.toString());

String name = bdPlant.getResult().get(0).getName().toString();

String score = Double.toString(bdPlant.getResult().get(0).getScore()*100).substring(0, 5);

result = "{\"result\":\"ok\",\"words\":\"success\",\"name\":\"" +name + "\",\"score\":\""+score+"%\"}";

logger.info("===========百度植物输出为" + result);

PrintUtil.printJson(this.response, result);

continue;

}

}catch (Exception e){

logger.error("非音频文件上传失败" + e.getMessage(), e);

result = "{\"result\":\"fail\",\"words\":\"植物识别失败\"}";

PrintUtil.printJson(this.response, result);

}

}

else {

File targetDir = new File(baseDespath);

System.out.println("音频文件 目录是否存在 是否是目录" + targetDir.exists() + "-" + targetDir.isDirectory());

try {

boolean a = targetDir.mkdirs();

System.out.println("音频文件目录不存在 创建成功" + a);

} catch (Exception e) {

logger.error("音频文件目录创建失败" + e.getMessage(), e);

}

String path = baseDespath + File.separator + filename;

File target = new File(path);

System.out.println("音频文件存放目录" + path);

if (!target.exists())

try {

boolean a = target.createNewFile();

System.out.println("音频文件夹创建成功" + a);

} catch (Exception e) {

logger.error("音频文件夹创建失败" + e.getMessage(), e);

}

try

{

FileUtil.saveFile(b, path);

System.out.println("====音频文件=====" + filename);

result = "{\"result\", \"OK\"}";

PrintUtil.printJson(this.response, result);

} catch (Exception e) {

logger.error("音频文件上传失败 或者 转换失败" + e.getMessage(), e);

result = "{\"result\", \"FAIL\"}";

PrintUtil.printJson(this.response, result);

}

}

} else {

logger.error("请检查上传文件是否正确");

result = "{\"result\", \"FAIL\"}";

PrintUtil.printJson(this.response, result);

}

}

}

微信小程序前端实现页面(源代码地址如下):

https://gitee.com/xshuai/weixinxiaochengxu

微信小程序调用python分析图片_小帅丶干货之图像识别在微信小程序展示相关推荐

  1. Android Studio调用python读取图片(使用服务器paddlehub处理图片)

    Android Studio调用python读取图片 一.主要任务 二.环境配置 1.创建一个android studio项目 2.配置项目gradle 3.配置app下的gradle 三.demo测 ...

  2. python脚本编程实例_C程序调用Python脚本的例子

    下面我们一起来看看关于C程序调用Python脚本的例子,如果你对此有兴趣的希望此教程对各位同学会有所帮助. 代码如下 复制代码 #include int main(){ PyObject * g_pM ...

  3. NORDIC Thingy:52 蓝牙 BLE 服务 SoC 程序调用流程分析之八, 网盘分享 PPT

    NORDIC Thingy:52 蓝牙 BLE 服务 SoC 程序调用流程分析之八 网盘分享 PPT https://pan.baidu.com/s/1BuhqsBwQIz0Zlwzy7u7SQw

  4. python爬虫好友图片_用itchat库爬取你所有微信好友的头像,并合成一张大图

    几年前,我们给爸妈手机上下载了一款神奇的软件,他的名字叫微信.几年后,爸妈就开始吐槽我们的微信头像了. 爸妈对我们微信头像的关注程度远胜过我们的衣食住行,我在新浪微博上看到了这张统计图. 图片来源:新 ...

  5. 小心Python爬取了你的微信隐私!用Python分析了数千个微信昵称后,发现了这些秘密!

    01 Let's get it 1. 基本信息获取 访问 英文取名 的用户基本信接口,获取 英文取名 用户微信名(NickName).访问次数(Count).总数据集(ResponseData),并将 ...

  6. python 存储图片_使用python存储网页上的图片实例

    使用python存储网页上的图片实例 本文介绍在已知网络图片的地址下,存储图片到本地 本文例子随便选择LOFTER上一张图片,复制图片的地址,如下图所示 在Python中输入代码 import req ...

  7. python xlsx 图片_实例11:用Python给Excel所有工作表添加图片

    我们在实例9里面展示了如何批量填写每日出货清单,每一天的清单都是直接复制"出货单模板",然后在其中填入出货产品信息的.openpyxl有一个问题,就是在复制工作表的时候,无法跟着复 ...

  8. 学python分析双色球_我通过使用Python分析了80多个工作拒绝而学到的东西

    学python分析双色球 by Conor Dewey 由Conor Dewey 我通过使用Python分析了80多个工作拒绝而学到的东西 (What I learned from analyzing ...

  9. java 调用python脚本过程_通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

最新文章

  1. 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据 SPS PPS )
  2. 《Dreamweaver CS6完美网页制作——基础、实例与技巧从入门到精通》——1.3 常用网页设计软件...
  3. 使用Golang flag包解析字符串
  4. Scikit-learn 数据预处理之鲁棒缩放RobustScaler
  5. JavaFX官方教程(十五)之A Xylophone.java
  6. Unity3d 札记-Let's try shooting 知识点汇总
  7. c# 算式 计算器_C#实现的简单整数四则运算计算器功能示例
  8. 基于Angular5和WebAPI的增删改查(一)
  9. Android 动态改变布局属性RelativeLayout.LayoutParams.addRule()
  10. RTL8762DK UART(二)
  11. XPS文件怎么打开?可以转成PDF格式吗?
  12. 视觉测试_5分钟即可开始视觉测试
  13. png格式图片 转 icns格式图标
  14. Android之单元测试
  15. 由旋转矩阵求旋转中心
  16. socket服务器区分各个客户端信息,socket服务器如何区分哪个客户端
  17. 适用于渗透测试不同阶段的工具收集整理
  18. JS 删除字符串中所有的数字
  19. 数据结构与算法—堆(heap)
  20. python爬虫获取豆瓣TOP25电影名称和评分

热门文章

  1. Opencv之边缘检测卷积算子(roberts与prewitt)
  2. WIN7远程桌面连接方法!远程控制教程!XP远程桌面连接教程!如何设置远程桌面连接?远程桌面连接设置!
  3. 微知识|人工智能 第一期
  4. mysql建表 括号_MySQL建表的问题,关于索引
  5. 方舟编译器的构建(笔记)
  6. AVFrame相关api内存管理
  7. C之父-Dennis M Ritchie
  8. Elasticsearch压测工具esrally使用笔记
  9. JS引入方式有哪些?
  10. UEditor编辑器修改ueditor.all.js后压缩的问题