物联网浏览器(IoTBrowser)-人脸快速搜索
2026/7/17 7:26:12 网站建设 项目流程

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

实现思路:

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

2.开发人脸搜索工具

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

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

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

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

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

屏幕录制 2025-10-30 102642

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

屏幕录制 2025-10-30 103845

核心代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

<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.多文件夹快速搜索,搜索一张还是全部

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询