物联网浏览器(IoTBrowser)-人脸快速搜索

起因

最近遇到一个人脸搜索的需求,驿站的快递被人误领,拿走几天还没有送回来,所以想从出库仪中找历史出库记录的想法。

实现思路:

1.从雷现出库仪上拷贝文件下来。(拷贝几十万张人脸数据花了不少时间)

2.开发人脸搜索工具

3.搜索比对(如果能找到历史数据,就能找到人)

这里主要是开发人脸搜索工具,需要实现识别图片里面是否包含人脸、人脸匹配检测等功能,网速找了一款工具,但是需要改造3点

1.支持并发搜索,充分利用多核CPU,从几十万张图片中快速检索到想要找的人。

2.支持参数配置,支持指定图片和查找目录、搜索第一张还是全部、找到后是否打开等参数。

3.开发UI配置界面,由于工具是控制台应用,使用起来不方便,所以需要一个UI界面。

物联网浏览器(IoTBrowser)-人脸快速搜索

使用IoTBrowser做为UI前端,使用少量的代码既可实现。

物联网浏览器(IoTBrowser)-人脸快速搜索

 

核心代码:

    <div id="vue_root" class="fun_bd" style="padding:10px;">         <form class="am-form">             <fieldset>                 <div class="am-form-group">                     <label for="doc-ipt-email-1" class="am-u-sm-1">原始文件</label>                     <div class="am-u-sm-3">                         <input  type="text" v-model="config.ImagePath" style="width: 75%;display: inline;" />                         <input type="button" @click="selectFile()" value="选择" />                     </div>                     <label for="doc-ipt-email-1" class="am-u-sm-1">查找目录</label>                     <div class="am-u-sm-3">                         <input type="text" v-model="config.FindDir" style="width: 75%;display: inline;" />                         <input type="button" value="选择" @click="selectSaveDir()" />                     </div>                     <label for="doc-ipt-email-1" class="am-u-sm-1">历史文件</label>                     <div class="am-u-sm-3">                         <input type="text" v-model="config.HistoryFileName" style="width: 75%;display: inline;" />                     </div>                 </div>                 <div class="am-form-group">                     <div class="am-u-sm-3">                         <input id="ClearHistory" type="checkbox" v-model="config.ClearHistory" />                         <label for="ClearHistory" class="">清理历史数据</label>                     </div>                     <div class="am-u-sm-3">                         <input id="FindFirstStop" type="checkbox" v-model="config.FindFirstStop" />                         <label for="FindFirstStop" class="">找到第一张停止</label>                     </div>                     <div class="am-u-sm-3">                         <input id="FindOpen" type="checkbox" v-model="config.FindOpen" />                         <label for="FindOpen" class="">找到后立即打开</label>                     </div>                     <div class="am-u-sm-3">                          <!--<button onclick="startFace()" class="am-btn-primary" type="button">打开连接</button>-->                         <button @click="find()" v-if="!isFind" class="am-btn-primary" type="button">开始查询</button>                         <button @click="stop()" v-if="isFind" class="am-btn-primary" type="button">停止服务</button>                     </div>                 </div>                 <div class="am-form-group">                     <textarea id="txtInfo" rows="40">{{msg}}</textarea>                 </div>              </fieldset>                      </form>     </div>     <script>          var hostid;// 主机id          function startFace() {             dds.iot.com.open({                 type: 'FaceCom',//人脸识别插件                 port: 1,                 baudRate: 1,                 onReceive: function (res) {                     if ($vue.isFind) {                          if (res.data.indexOf('已找到:') == 0) {                             alert(res.data)                         }                         addMsg(res.data)                     }                     //console.log('host', res.data)                 },                 onOpen: function (ar) {                     if (ar.Success) {                         hostid = ar.Data;                         addMsg('连接成功!')                     } else {                         alert(ar.Message)                     }                 }             })         }          var $msg;         function addMsg(msg) {             var m = $vue.msg + "n" + msg;             if ($vue.msg.length > 10000) {                 $vue.msg = (msg);             } else {                 $vue.msg = (m);             }         }         // 窗口初始化事件(操作窗口大小、标题)         $(document).bind('dds.window.init', function (e, win) {             $msg = $('#txtInfo')             startFace();             initVue();         })         var $vue;         function initVue() {              $vue = new Vue({                 el: '#vue_root',                 data: {                     advanceSetting: false,                     msg: "",                     isFind:false,                     config: {                         ImagePath: "",                         FindDir: "D:\image",                         HistoryFileName: "",                         ClearHistory: true,                         FindOpen: true,                         FindFirstStop: true,                     },                 },                 mounted() {                     if (localStorage._faceConfig) {                         this.config=JSON.parse(localStorage._faceConfig);                     }                 },                 methods: {                     selectFile() {                         this.config.ImagePath = _host.selectFile();                     },                     find() {                         var config = this.config                         if (!config.ImagePath) {                             alert('请选择原始文件')                             return;                         }                         this.msg = ''                         if (!config.FindDir) {                             alert('请选择查找目录')                             return;                         }                         this.isFind = true;                         dds.iot.com.exeCommand({ id: hostid, name: "Find", data: { timeout1: 30000, config } }, function (ar) {                             if (ar.Success) {                             } else {                                 addMsg('操作失败:' + ar.Message)                             }                         })                         localStorage._faceConfig = JSON.stringify(config);                     },                     stop() {                         this.isFind = false;                         dds.iot.com.exeCommand({ id: hostid, name: "Stop", data: { } }, function (ar) {                             if (ar.Success) {                             } else {                                 addMsg('操作失败:' + ar.Message)                             }                         })                     },                      clearLog() {                         this.msg=''                     },selectSaveDir() {                          var dir = dds.file.openFolderDialog();                          this.config.FindDir=(dir)                     }                 }             })         }     </script> 

  

系统支持:

1.人脸数量检测、人脸匹配、人脸定位

2.多文件夹快速搜索,搜索一张还是全部

3.多线程并发搜索,快速查找人脸数据

 

使用简单的HTMl+WebAPI就可以实现人脸识别,将控制台的输出内容通过WebSocket实时推送到前端界面。

 

发表评论

评论已关闭。

相关文章