<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
0 前言
?? 這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天要分享的是
?? 基于Stm32的家庭智能監(jiān)控系統(tǒng)
??學(xué)長這里給一個題目綜合評分(每項滿分5分)
- 難度系數(shù):3分
- 工作量:4分
- 創(chuàng)新點:4分
1 簡介
結(jié)合低功耗AI芯片以及移動網(wǎng)絡(luò),將人員/物體檢測模型部署到設(shè)備端,達(dá)到較低功耗、實時響應(yīng)、節(jié)省流量的效果。
2 主要器件
- 主控芯片使用勘智K210
- 攝像頭 OV7740
- 數(shù)據(jù)傳輸使用 4G模塊 EC20 或者 2G模塊 SIM800C;
3 實現(xiàn)效果
4 設(shè)計原理
主模塊原理圖
設(shè)備端運行 FreeRTOS + LWIP
LWIP協(xié)議棧支持的主要功能如下所示,本文將具體介紹各個協(xié)議的具體功能。
部分移植過程
修改修改cc.h文件
修改sys_arch.c文件
通過PPPOS驅(qū)動4G模塊
LTE Standard EC20 R2.1是移遠(yuǎn)通信推出的 LTE Cat 4 無線通信模塊,采用 LTE 3GPP Rel.11 技術(shù),支持最大下行速率 150Mbps 和最大上行速率 50Mbps,使用LCC封裝。
系統(tǒng)啟動后會加載 yolov2-tiny 模型
yolov2網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLOv2相對v1版本,在繼續(xù)保持處理速度的基礎(chǔ)上,從預(yù)測更準(zhǔn)確(Better),速度更快(Faster),識別對象更多(Stronger)這三個方面進(jìn)行了改進(jìn)。其中識別更多對象也就是擴(kuò)展到能夠檢測9000種不同對象,稱之為YOLO9000。
#部分代碼
def test_net(net, imdb, max_per_image=300, thresh=0.5, vis=False):
num_images = imdb.num_images
# all detections are collected into:
# all_boxes[cls][image] = N x 5 array of detections in
# (x1, y1, x2, y2, score)
all_boxes = [[[] for _ in range(num_images)]
for _ in range(imdb.num_classes)]
# timers
_t = {'im_detect': Timer(), 'misc': Timer()}
det_file = os.path.join(output_dir, 'detections.pkl')
size_index = args.image_size_index
for i in range(num_images):
batch = imdb.next_batch(size_index=size_index)
ori_im = batch['origin_im'][0]
im_data = net_utils.np_to_variable(batch['images'], is_cuda=True,
volatile=True).permute(0, 3, 1, 2)
_t['im_detect'].tic()
bbox_pred, iou_pred, prob_pred = net(im_data)
# to numpy
bbox_pred = bbox_pred.data.cpu().numpy()
iou_pred = iou_pred.data.cpu().numpy()
prob_pred = prob_pred.data.cpu().numpy()
并且通過 MQTT 協(xié)議接入后端服務(wù)器; 攝像頭線程讀取圖像信息,處理后發(fā)送到K210內(nèi)置的卷積神經(jīng)網(wǎng)絡(luò)加速器,得出 yolov2-tiny 的預(yù)測結(jié)果,如果存在超過預(yù)定分類閾值的結(jié)果,則通過 MQTT 協(xié)議發(fā)送到后端。
后端Thingsboard
后端服務(wù)器基于 Thingsboard 進(jìn)行開發(fā),實現(xiàn)圖像信息展示以及設(shè)備固件OTA功能。
ThingsBoard 是一個基于Java的開源的物聯(lián)網(wǎng)平臺,用于數(shù)據(jù)收集、處理、可視化和設(shè)備管理。它使用物聯(lián)網(wǎng)行業(yè)的標(biāo)準(zhǔn)協(xié)議(MQTT、CoAP和HTTP)實現(xiàn)設(shè)備連接,并支持云和本地部署。 ThingsBoard 具有可擴(kuò)展性、容錯性和高性能,因此永遠(yuǎn)不會丟失數(shù)據(jù)。
Thingsboard 基本特點文章來源:http://www.zghlxwxcb.cn/news/detail-794495.html
- 提供設(shè)備、資產(chǎn)和客戶,并定義它們之間的關(guān)系。
- 警報管理:分析傳入的遙測數(shù)據(jù)并通過復(fù)雜的事件處理觸發(fā)警報。
- 設(shè)備管理:使用遠(yuǎn)程過程調(diào)用(RPC)控制設(shè)備。根據(jù)設(shè)備生命周期事件,REST API 事件,RPC 請- 求等構(gòu)建工作流
- 可擴(kuò)展性:可水平擴(kuò)展的平臺,使用領(lǐng)先的開源技術(shù)進(jìn)行構(gòu)建。
- 數(shù)據(jù)可視化: 從設(shè)備和資產(chǎn)收集并可視化數(shù)據(jù)。提供了現(xiàn)成的30個可配置小部件,并能夠使用內(nèi)置編輯器創(chuàng)建自己的小部件。內(nèi)置線圖,數(shù)字和模擬儀表,地圖等等。
- 容錯:沒有單點故障,集群中的每個節(jié)點都是相同的。沒有主人工人或熱備用人員。自動檢測到節(jié)點故障??梢栽诓煌C(jī)的情況下更換故障節(jié)點。使用可靠的 NoSQL 數(shù)據(jù)庫復(fù)制持久數(shù)據(jù)。
- 強(qiáng)大而高效:單個服務(wù)器節(jié)點可以處理成千上萬個設(shè)備,具體取決于用例。ThingsBoard 集群可以處理數(shù)百萬個設(shè)備。
- 可自定義的:通過可自定義的小部件和規(guī)則引擎節(jié)點,輕松添加新功能。使用可自定義的規(guī)則鏈,窗口小部件和傳輸實現(xiàn)來擴(kuò)展默認(rèn)平臺功能。除了MQTT,CoAP和HTTP支持之外,ThingsBoard用戶還可以使用自己的傳輸實現(xiàn)或自定義現(xiàn)有協(xié)議的行為。
- 持久:永遠(yuǎn)不會丟失您的數(shù)據(jù)。
- 遙測數(shù)據(jù)收集功能: 設(shè)計動態(tài)且響應(yīng)迅速的儀表板,并向您的客戶提供設(shè)備或資產(chǎn)遙測和見解??梢钥煽康厥占痛鎯b測數(shù)據(jù),以應(yīng)對網(wǎng)絡(luò)和硬件故障。使用可自定義的Web儀表板或服務(wù)器端API訪問收集的數(shù)據(jù)。
部分相關(guān)代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-794495.html
public class MqttTransportService {
.....
@Autowired
private MqttTransportContext context;
@PostConstruct
public void init() throws Exception {
log.info("Setting resource leak detector level to {}", );
ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.valueOf(leakDetectorLevel.toUpperCase()));
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new MqttTransportServerInitializer(context))
.childOption(ChannelOption.SO_KEEPALIVE, keepAlive);
}
.....
}
private void processDevicePublish(ChannelHandlerContext ctx, MqttPublishMessage mqttMsg, String topicName, int msgId) {
try {
if (topicName.equals(MqttTopics.DEVICE_TELEMETRY_TOPIC)) {
TransportProtos.PostTelemetryMsg postTelemetryMsg = adaptor.convertToPostTelemetry(deviceSessionCtx, mqttMsg);
transportService.process(sessionInfo, postTelemetryMsg, getPubAckCallback(ctx, msgId, postTelemetryMsg));
} else if (topicName.equals(MqttTopics.DEVICE_ATTRIBUTES_TOPIC)) {
TransportProtos.PostAttributeMsg postAttributeMsg = adaptor.convertToPostAttributes(deviceSessionCtx, mqttMsg);
transportService.process(sessionInfo, postAttributeMsg, getPubAckCallback(ctx, msgId, postAttributeMsg));
}
...
} else {
transportService.reportActivity(sessionInfo);
}
} catch (AdaptorException e) {
log.warn("[{}] Failed to process publish msg [{}][{}]", sessionId, topicName, msgId, e);
log.info("[{}] Closing current session due to invalid publish msg [{}][{}]", sessionId, topicName, msgId);
ctx.close();
}
}
5 最后
到了這里,關(guān)于單片機(jī)項目分享 基于Stm32的家庭智能監(jiān)控系統(tǒng) - 單片機(jī) 圖像識別 人體檢測 AI的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!