基于微信的人脸识别(简单地画出人脸大概区域)和车牌识别,后台用Java Web

人脸识别:openCV,Harris特征,直接用openCV自带的训练好的xml文件,发送图片到测试公众号,后台接收图片,检测人脸,画出区域,返回给用户

车牌识别:easyPR,识别出车牌后返回给用户


最开始做之前感觉很简单,比较基本上都是用第三方工具,而之前微信也看过点视频,后面却遇到各种问题,蛋疼不已。

最开始用MyEclipse6.5(版本比较老) + Servlet搭建后台,因为用的openCV3,而opencv3需要JDK8,MyEclipse6.5又不支持JDK8

那就换Eclipse Kepler吧,人脸识别基本上OK了(有时候计算时间太长也会没有响应,而且有时候会接收图片好几次,应该是Servlet并发的问题,多次响应,最后也没怎么管这个,反正大多数情况下可以返回),但是弄easyPR检测车牌就遇到问题,

easyPR是自己把Eclipse工程导入的,其中有个根目录下的res文件,里面存放了一些训练好的model,但是部署到Tomcat的时候老是不能把这个文件部署上去,重新换回MyEclipse单独测试这个车牌检测的代码也是不行,想到若干种办法:(1)手动复制res文件,(2)把easyPR打包成Jar加到之前的人人脸识别工程中,(3)更改res文件为resource file,(4)打包成war包,手动部署到Tomcat

最后都是不行,加GitHub上的那个QQ群问,也没个人回,最后就想:只能是一点点看代码,看能不能找到load训练好的模型是怎么用res路径的,

但是又想到了SpringBoot,它内置了Tomcat服务器,免去了部署,说不定就不会有这个问题,最后终于OK了,Springboot大法好啊。。。。GitHub大法好啊,之前还准备自己写车牌识别,分割提取之类的,没想到GitHub上就有类似的轮子,Issue里面还可以讨论问题,真的不错


记录一下问题:

1. Java 8 Compiler要1.7以上
2. eclipse默认不是部署到Tomcat的webapps,Myeclipse是,但部署都不会吧工程的所有文件部署进去,
部署到wenapps下就不需要启动eclipse来运行app了,直接开启tomcat就ok,没有部署可以显得登录tomcat在部署一下
3. 部署的时候会把resource folder展开,自己把资源文件复制到webapps会有问题
4. 直接打包Jar也会出现资源文件路径的问题
5. eclipse部署JAr可能也没有部署进去,通过Properties的Deploy选项可以设置,或者自己手动复制Jar到webapps相应目录下
6. OpenCV3 的Jar包先build到maven仓库,然后在POM文件中引用就OK


虽然比较简单,还是贴一下核心代码,有时间把一些结果图片也弄一下,以后可以多在GitHub上面逛

@RestController
@EnableAutoConfiguration
//@SpringBootApplication
public class Example  {public boolean flag = true;public boolean isFaceDete = true;@AutowiredHttpServletRequest request;@AutowiredHttpServletResponse response;@RequestMapping("/weixin_test/wx.do")void home() throws Exception {System.out.println("hello");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");// 通过PrintWriter返回数据PrintWriter out = response.getWriter(); // 通过集合接收消息try {Map<String,String> map = MessageUtil.xmlToMap(request);String fromUserName = map.get("FromUserName");String ToUserName = map.get("ToUserName");String MsgType = map.get("MsgType");String Content = map.get("Content");String message = null;if(MessageUtil.MESSAGE_TEXT.equals(MsgType)){if("1".equals(Content)) {message = MessageUtil.initText(ToUserName, fromUserName, MessageUtil.secondMenu());} else if("2".equals(Content)) {message = MessageUtil.initNewsMessage(ToUserName, fromUserName);} else if("3".equals(Content)) {// change modeif(isFaceDete) {message = MessageUtil.initText(ToUserName, fromUserName, "change to pr");isFaceDete=false;}else {message = MessageUtil.initText(ToUserName, fromUserName, "change to face detection");isFaceDete = true;}} out.print(message);System.out.println(message);} else if(MessageUtil.MESSAGE_IMAGE.equals(MsgType)) {//                 if(!flag)   return;flag = false;String PicUrl = map.get("PicUrl");System.out.println(PicUrl);PicDownloadUtil.download(PicUrl);AccessToken token = WeixinUtil.getAccessToken();System.out.println("凭据:" + token.getToken());System.out.println("有效时间:" + token.getExpiresIn());if(isFaceDete) {FaceDetection.detect();String mediaId = WeixinUtil.upload("E:/data/weixin/FaceDetect.jpg", token.getToken(), "image");message = MessageUtil.initImageMessage(ToUserName, fromUserName, mediaId, PicUrl);out.print(message);    // 好像一直在输出,是不是并发的问题??还是计算的时间太长了?System.out.println("****************************");System.out.println(message);out.print(message);} else {String imgPath = "E:/data/weixin/down.jpg";
//                      File f = new File(imgPath);
//                      System.out.println(f.exists());
//                      System.out.println("**************");
//                      String result = "detecting nothing";
//                      Mat src = imread(imgPath);PlateDetect plateDetect = new PlateDetect();plateDetect.setPDLifemode(true);Vector<Mat> matVector = new Vector<Mat>();if (0 == plateDetect.plateDetect(src, matVector)) {CharsRecognise cr = new CharsRecognise();for (int i = 0; i < matVector.size(); ++i) {String tmp = cr.charsRecognise(matVector.get(i));if(tmp.length() > 2)result = tmp;System.out.println("Chars Recognised: " + result);}}System.out.println("detect finished .... ");message = MessageUtil.initText(ToUserName, fromUserName, result);out.print(message);//                     Main.run();}}} catch (Exception e) {e.printStackTrace();} finally {out.close();flag = true;}}public static void main(String[] args) throws Exception{SpringApplication.run(Example.class, args);}}


Feature added:语言识别功能,通过语音切换模式

刚开始想用讯飞开放平台,但是好像他们对语音文件的格式要求比较严格,16K采样,pcm格式等等,反正自己录音只能是借助于特定录音软件,本来也想用ffepg对录音进行格式转换,但是不清楚ffepg的命令,转换出来也识别不了,后来发现微信直接内置了语言识别的功能,只需要从接收消息中取出来就好了


微信开发——人脸识别 车牌识别 语言识别相关推荐

  1. RTSP/GB28181/SDK/Ehome协议人脸识别/车牌识别视频智能分析系统EasyCVR获取播放地址和流地址方法介绍

    视频联网共享服务EasyCVR人脸识别/车牌识别智能分析系统是一个集视频联网共享.存储.流媒体转发.视频转码.视频上云.智能分析等多种功能为一体的流媒体视频服务融合型平台.目前EasyCVR还可以集成 ...

  2. 【操作教程】RTSP/GB28181/SDK/Ehome协议人脸识别/车牌识别视频智能分析系统EasyCVR如何获取播放地址和流地址?

    视频联网共享服务EasyCVR人脸识别/车牌识别智能分析系统是一个集视频联网共享.存储.流媒体转发.视频转码.视频上云.智能分析等多种功能为一体的流媒体视频服务融合型平台.目前EasyCVR还可以集成 ...

  3. http协议之https协议, libcurl实现人脸识别, 车牌识别

    原创: 冬冬他哥哥 链接: https://www.cnblogs.com/xietianjiao/p/13260021.html. http协议之https http协议详解 一.http协议的特性 ...

  4. 证件识别,银行卡识别,车牌识别等

    证件识别,银行卡识别,车牌识别等  根据上传的图片文件和证件类型,进行证件识别结果返回,证件越清晰,识别准确率越高,请上传清晰证件. 详情:http://www.haoservice.com/docs ...

  5. 人脸识别/车牌识别视频智能分析系统EasyCVR通过接口GetApiV1Devices调用获取设备信息不成功原因分析

    EasyCVR视频智能分析平台支持人脸识别和车牌识别,已经在很多项目中落地.同时,EasyCVR支持很多不同协议的设备接入,包括RTSP.GB28181.Ehome.海康SDK.大华SDK等协议. 用 ...

  6. 【方案】人脸识别/车牌识别RTSP/GB28181协议视频平台EasyCVR搭建美丽乡村方案

    目前我国农村人口还占全国总人口的51%,且农村地域广阔.村落分布不规则.随着城市化进程的加快,农村大批青壮年外出务工,农村出现"留守老人.妇女和儿童"现象,给农村的治安也带来巨大压 ...

  7. 人脸识别/车牌识别系统视频智能分析平台EasyCVR如何配置在按需模式下只拉取子码流?

    一般高清摄像头产品编码器可同时产生两个不同的编码格式,统称主码流和子码流,双码流技术兼顾了高质量图像传输和窄带宽传输(监控视频中的主码流和子码流是什么意思). TSINGSEE青犀视频云边端架构视频平 ...

  8. 人脸识别/车牌识别系统视频智能分析平台EasyCVR如何配置开启HTTPS协议?

    EasyCVR视频平台是TSINGSEE青犀视频研发的视频融合共享平台,支持RTSP.Onvif.GB28181等主流协议,同时也支持HIKSDK.Ehome等私有协议,其他主流厂家的私有协议也在不断 ...

  9. bp神经网络实现人脸识别,车牌识别深度神经网络

    1.您好,请问您有基于BP神经网络算法的车牌识别的程序代码吗?用matlab可以运行的那种. 1.对样本集进行归一化 2.创建BP神经网络 3.设置网络的训练参数 4.把样本输入BP网络进行训练 5. ...

最新文章

  1. 使用Docx4j操作PPT指南系列(附一)
  2. ICCV2019最佳论文SinGAN全面解读,看这一篇就懂了
  3. 4.1.2 OS之文件逻辑结构(顺序文件、索引文件、索引顺序文件、多级索引顺序文件)关于数据库的索引如聚簇索引可以看一下索引文件例题的解析,感觉还是可以收获到东西的
  4. leetcode 67. 二进制求和(C语言)
  5. 2016.9.24 の 測試
  6. 使用Visual Studio 创建新的Web Part项目
  7. 《零基础看得懂的C++入门教程 》——(4)条件判断原来如此
  8. web流程设计器 工作流的 整合视频教程 activiti画图 SSM和独立部署
  9. C2597 LNK2001 C++静态成员函数、变量理解
  10. 笔记本 续航测试软件,续航能力测试
  11. STM32单片机驱动L298N
  12. 利用HbuilderX制作简单网页
  13. retina屏 适配问题
  14. python tensorflow学习笔记(六)最小二乘法
  15. 2019年下半年教师资格幼儿园《保教知识与能力》真题与参考答案
  16. 理想的清理软件——CCleaner
  17. Python实现寻找完美数问题
  18. 软件工程之工程网络例题详解
  19. java 下载zip文件_Java以压缩包方式下载文件
  20. 2的N次方的和|运算

热门文章

  1. 如何提高英阅读英文技术资料
  2. java 时间判断_java怎样判断日期的先后?
  3. Scala面向对象详解
  4. python内置函数用法,超级详细
  5. 华为OD机试题 - 剩余可用字符集(JavaScript)| 含思路
  6. 对讲机模块场景分析之二:适配对讲机PTT
  7. 通达信行情接口抽象方法
  8. LoRaWAN介绍3 优点
  9. 计算机编程STATA,Stata软件编程与Mata运算高级应用教程
  10. QLocale::Language相关枚举结果