0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用FOMO物體檢測(cè)算法實(shí)現(xiàn)無(wú)人機(jī)野生動(dòng)物計(jì)數(shù)系統(tǒng)的設(shè)計(jì)

科技觀察員 ? 來(lái)源:Jallson Suryo ? 作者:Jallson Suryo ? 2022-08-22 14:56 ? 次閱讀

人工智能在牲畜和野生動(dòng)物監(jiān)測(cè)中的作用預(yù)計(jì)將顯著增長(zhǎng)。這個(gè)項(xiàng)目就是一個(gè)例子,展示了人工智能如何使用嵌入式機(jī)器學(xué)習(xí)以快速有效的方式跟蹤和計(jì)數(shù)對(duì)象(動(dòng)物或農(nóng)作物)。該跟蹤系統(tǒng)使用無(wú)人機(jī)飛越場(chǎng)地(向下掃描表面)的計(jì)算機(jī)視覺(jué),攝像頭朝下。ML 模型將能夠檢測(cè)和區(qū)分動(dòng)物或作物的類(lèi)型,并可以實(shí)時(shí)計(jì)算每種對(duì)象(動(dòng)物/作物)的累積數(shù)量。這使野生動(dòng)物救援隊(duì)能夠監(jiān)測(cè)動(dòng)物/作物的數(shù)量,也可以用于企業(yè)計(jì)算畜牧和農(nóng)業(yè)市場(chǎng)的潛在收入。

本項(xiàng)目使用 Edge Impulse 的 FOMO(Faster Objects, More Objects)物體檢測(cè)算法。野生動(dòng)物/牲畜/資產(chǎn)跟蹤環(huán)境可以通過(guò)選擇灰度圖像塊和具有 2 個(gè)輸出類(lèi)(例如烏龜和鴨子)的 FOMO 對(duì)象檢測(cè)來(lái)模擬和執(zhí)行。該項(xiàng)目利用 FOMO 快速高效的算法對(duì)對(duì)象進(jìn)行計(jì)數(shù),同時(shí)使用受限微控制器或單板基于 Linux 的計(jì)算機(jī)(如 Raspberry Pi)。

pYYBAGMDJ8aAUTAHAAEQqdXrvD4355.png

Edge Impulse 模型也在我們的 Python 代碼中實(shí)現(xiàn),以便它可以累積計(jì)算對(duì)象。該算法將當(dāng)前幀的坐標(biāo)與之前的幀進(jìn)行比較;查看相機(jī)上是否有新對(duì)象,或者該對(duì)象之前是否已計(jì)數(shù)。在我們的測(cè)試中,有時(shí)計(jì)算的對(duì)象數(shù)量仍然不準(zhǔn)確,因?yàn)樵撃P腿蕴幱诟拍铗?yàn)證階段。不過(guò)我們相信這個(gè)概念可以進(jìn)一步發(fā)展到現(xiàn)實(shí)世界的應(yīng)用中。

該項(xiàng)目共包括 5 個(gè)步驟:

準(zhǔn)備

數(shù)據(jù)采集??和標(biāo)記

使用 FOMO 對(duì)象檢測(cè)訓(xùn)練和構(gòu)建模型

在 Raspberry Pi 上部署和測(cè)試對(duì)象檢測(cè)

構(gòu)建 Python 應(yīng)用程序以檢測(cè)和計(jì)數(shù)(累積)

第 1 步:準(zhǔn)備

poYBAGMDJ8yAJxPuAALRo4wuStU795.png

使用更新的 Raspberry Pi OS(Buster 或 Bullseye)準(zhǔn)備您的 Raspberry Pi。然后打開(kāi)您的終端應(yīng)用程序并ssh到您的 Pi。

從上方拍攝不同位置的物體(例如鴨子和烏龜),背景不同的照明條件,以確保模型可以在不同的條件下工作(防止過(guò)度擬合)。在這個(gè)項(xiàng)目中,我使用智能手機(jī)攝像頭捕捉圖像以進(jìn)行數(shù)據(jù)收集,以方便使用。

注意:盡量保持圖片中物體大小相似,物體大小的顯著差異會(huì)混淆 FOMO 算法。

poYBAGMDJ9GAEbe6AAS8uAfdB9Q409.png

項(xiàng)目使用 Edge Impulse 作為機(jī)器學(xué)習(xí)平臺(tái),所以我們需要登錄(首先創(chuàng)建一個(gè)帳戶),然后轉(zhuǎn)到Edge Impulse并創(chuàng)建新項(xiàng)目。

poYBAGMDJ9eALkK8AACNEPnMPEs709.png

第 2 步:數(shù)據(jù)采集和標(biāo)記

選擇圖像項(xiàng)目選項(xiàng),然后分類(lèi)多個(gè)對(duì)象。

pYYBAGMDJ9yAK3MaAAJRP1wP2IM072.png

在 Dashboard 》 Project Info 中,選擇 Bounding Boxes 進(jìn)行標(biāo)記方法,選擇 Raspberry Pi 4 進(jìn)行延遲計(jì)算。

pYYBAGMDJ-GAKkdKAAHyYjTWbkY941.png

然后在數(shù)據(jù)采集中,單擊上傳數(shù)據(jù)選項(xiàng)卡,選擇您的文件,選擇自動(dòng)拆分,然后單擊開(kāi)始上傳。

poYBAGMDJ-aAQxY1AAEtKB0R-QY449.png

現(xiàn)在,是時(shí)候貼標(biāo)簽了。單擊標(biāo)簽隊(duì)列選項(xiàng)卡,然后開(kāi)始在對(duì)象周?chē)蟿?dòng)一個(gè)框并標(biāo)記它(鴨或?yàn)觚敚┎⒈4?。重?fù)直到標(biāo)記所有圖像。確保訓(xùn)練和測(cè)試數(shù)據(jù)之間的比率是理想的,大約為 80/20。

poYBAGMDJ-qAAIqQAAKAjXjmrVI662.png

第 3 步:使用 FOMO 對(duì)象檢測(cè)訓(xùn)練和構(gòu)建模型

準(zhǔn)備好數(shù)據(jù)集后,轉(zhuǎn)到 Create Impulse 并將 96 x 96 設(shè)置為圖像寬度 - 高度(這有助于使模型的內(nèi)存大小保持較?。H缓筮x擇擬合最短軸,并選擇圖像和對(duì)象檢測(cè)作為學(xué)習(xí)塊。

pYYBAGMDJ_CABT7-AAFcdATcLhY661.png

轉(zhuǎn)到圖像參數(shù)部分,選擇顏色深度作為灰度,然后按保存參數(shù)。

poYBAGMDJ_SAbQEtAAEcNkEbGnw102.png

最后,單擊 Generate features 按鈕,您應(yīng)該會(huì)得到如下圖所示的結(jié)果。

pYYBAGMDJ_mAWdwHAAD-V7ArCwQ581.png

然后,導(dǎo)航到目標(biāo)檢測(cè)部分,并保持神經(jīng)網(wǎng)絡(luò)的訓(xùn)練設(shè)置不變——在我們的例子中是非常平衡的預(yù)訓(xùn)練模型,然后我們選擇 FOMO (MobileNet V2 0.35)。通過(guò)按開(kāi)始訓(xùn)練來(lái)訓(xùn)練模型,您可以看到進(jìn)度。如果一切正常,您應(yīng)該會(huì)看到如下內(nèi)容:

poYBAGMDJ_-ADe5qAAF8MD9LSWA267.png

之后我們可以測(cè)試模型,進(jìn)入模型測(cè)試部分并單擊全部分類(lèi)。如果準(zhǔn)確率結(jié)果超過(guò) 80%,那么我們可以進(jìn)行下一步——部署。注意:如果準(zhǔn)確率結(jié)果不如預(yù)期,請(qǐng)重新開(kāi)始使用質(zhì)量數(shù)據(jù)、標(biāo)簽,或者只是通過(guò)訓(xùn)練周期和學(xué)習(xí)率設(shè)置更改重新訓(xùn)練模型。

pYYBAGMDKAWAXKiGAAEL0vlga3U969.png

第 4 步:部署訓(xùn)練好的模型并在 Raspberry Pi 上進(jìn)行測(cè)試

現(xiàn)在,我們可以切換到 Raspberry Pi。確保您的 Pi 已安裝所有依賴項(xiàng)和 Edge Impulse for Linux CLI (如步驟 1 所示)并連接您的 Pi 攝像頭(或 USB 網(wǎng)絡(luò)攝像頭)。然后,通過(guò)終端ssh你的 Pi 并輸入:

$ edge-impulse-linux-runner

(如果您有多個(gè)項(xiàng)目,請(qǐng)?zhí)砑? - clean )在此過(guò)程中,您將被要求登錄您的 Edge Impulse 帳戶。

這將自動(dòng)下載您的模型并將其編譯到您的 Pi,然后開(kāi)始分類(lèi)。結(jié)果將顯示在終端窗口中。

您還可以在瀏覽器上啟動(dòng)視頻流:http:// 你的樹(shù)莓派 IP 地址:4912

Turtle 和 Duck 已通過(guò) x、y 坐標(biāo)實(shí)時(shí)成功識(shí)別(每次推理時(shí)間非常短)。

在這一步之前,我們已經(jīng)取出數(shù)據(jù)并在 Edge Impulse 平臺(tái)上訓(xùn)練了一個(gè)對(duì)象檢測(cè)模型,并在我們的 Raspberry Pi 板上本地運(yùn)行該模型。因此,可以得出結(jié)論,它已成功部署。

第 5 步:構(gòu)建 Python 程序進(jìn)行檢測(cè)和計(jì)數(shù)

為了使該項(xiàng)目對(duì)特定用例更有意義,我們希望它計(jì)算從移動(dòng)相機(jī)(通過(guò)無(wú)人機(jī))拍攝的每種類(lèi)型對(duì)象的累積計(jì)數(shù)。我們采用 Edge Impulse 的示例對(duì)象檢測(cè)程序,并通過(guò)解決加權(quán)二分匹配問(wèn)題將其轉(zhuǎn)變?yōu)閷?duì)象跟蹤程序,以便可以跨不同幀跟蹤同一對(duì)象。有關(guān)更多詳細(xì)信息,您可以在下面的代碼中查看。

因?yàn)槲覀兪褂?Python,所以我們需要安裝 Python 3 Edge Impulse SDK 并從之前的 Edge Impulse 示例中克隆存儲(chǔ)庫(kù)。

您還需要下載經(jīng)過(guò)訓(xùn)練的模型文件,以便我們正在運(yùn)行的程序可以訪問(wèn)它。輸入這個(gè)來(lái)下載它:

$ edge-impulse-linux-runner --download modelfile.eim

確保您/我們的程序 《count_moving_ducks》 放置在正確的目錄中,例如:

$ cd linux-sdk-python/examples/image

然后,使用以下命令運(yùn)行程序:

$ python3 count_moving_ducks.py ~/modelfile.eim

最后,我們成功實(shí)現(xiàn)了 Edge Impulse FOMO 對(duì)象檢測(cè)模型,并在樹(shù)莓派本地運(yùn)行累積計(jì)數(shù)程序。以我們獲得的速度和精度水平,我們有信心這個(gè)項(xiàng)目也可以用于微控制器,如 Arduino 的 Nicla Vision 或 ESP32 CAM,因此更容易安裝到無(wú)人機(jī)上。

count_moving_ducks.py:

'''
Author: Jallson Suryo & Nicholas Patrick
Date: 2022-07-25
License: CC0
Source: Edge Impulse python SDK example file (classify.py) -- modified
Description: Program to count livestock or wildlife from a drone (moving camera) using
Edge Impulse FOMO trained model.
'''
#!/usr/bin/env python

import device_patches # Device specific patches for Jetson Nano (needs to be before importing cv2)

from math import inf, sqrt
from queue import Queue
import cv2
import os
import sys, getopt
import signal
import time
from edge_impulse_linux.image import ImageImpulseRunner

runner = None
# if you don't want to see a camera preview, set this to False
show_camera = True
if (sys.platform == 'linux' and not os.environ.get('DISPLAY')):
show_camera = False

def now():
return round(time.time() * 1000)

def get_webcams():
port_ids = []
for port in range(5):
print("Looking for a camera in port %s:" %port)
camera = cv2.VideoCapture(port)
if camera.isOpened():
ret = camera.read()[0]
if ret:
backendName =camera.getBackendName()
w = camera.get(3)
h = camera.get(4)
print("Camera %s (%s x %s) found in port %s " %(backendName,h,w, port))
port_ids.append(port)
camera.release()
return port_ids

def sigint_handler(sig, frame):
print('Interrupted')
if (runner):
runner.stop()
sys.exit(0)

signal.signal(signal.SIGINT, sigint_handler)

def help():
print('python classify.py ')

def main(argv):
try:
opts, args = getopt.getopt(argv, "h", ["--help"])
except getopt.GetoptError:
help()
sys.exit(2)

for opt, arg in opts:
if opt in ('-h', '--help'):
help()
sys.exit()

if len(args) == 0:
help()
sys.exit(2)

model = args[0]

dir_path = os.path.dirname(os.path.realpath(__file__))
modelfile = os.path.join(dir_path, model)

print('MODEL: ' + modelfile)

with ImageImpulseRunner(modelfile) as runner:
try:
model_info = runner.init()
print('Loaded runner for "' + model_info['project']['owner'] + ' / ' + model_info['project']['name'] + '"')
labels = model_info['model_parameters']['labels']
if len(args)>= 2:
videoCaptureDeviceId = int(args[1])
else:
port_ids = get_webcams()
if len(port_ids) == 0:
raise Exception('Cannot find any webcams')
if len(args)<= 1 and len(port_ids)> 1:
raise Exception("Multiple cameras found. Add the camera port ID as a second argument to use to this script")
videoCaptureDeviceId = int(port_ids[0])

camera = cv2.VideoCapture(videoCaptureDeviceId)
ret = camera.read()[0]
if ret:
backendName = camera.getBackendName()
w = camera.get(3)
h = camera.get(4)
print("Camera %s (%s x %s) in port %s selected." %(backendName,h,w, videoCaptureDeviceId))
camera.release()
else:
raise Exception("Couldn't initialize selected camera.")

HEIGHT = 96
WIDTH = 96

next_frame_start_time = 0
prev_frame_objects = []
cumulative_counts = {'duck' : 0, 'turtle' : 0}

# iterate through frames
for res, img in runner.classifier(videoCaptureDeviceId):
# print('classification runner response', res)

if "classification" in res["result"].keys():
print('Result (%d ms.) ' % (res['timing']['dsp'] + res['timing']['classification']), end='')
for label in labels:
score = res['result']['classification'][label]
print('%s: %.2f\t' % (label, score), end='')
print('', flush=True)

elif "bounding_boxes" in res["result"].keys():
curr_frame_objects = res["result"]["bounding_boxes"]
m, n = len(prev_frame_objects), len(curr_frame_objects)
print('Found %d bounding boxes (%d ms.)' % (n, res['timing']['dsp'] + res['timing']['classification']))
# iterate through identified objects
for bb in curr_frame_objects:
print('\t%s (%.2f): x=%d y=%d w=%d h=%d' % (bb['label'], bb['value'], bb['x'], bb['y'], bb['width'], bb['height']))
img = cv2.rectangle(img, (bb['x'], bb['y']), (bb['x'] + bb['width'], bb['y'] + bb['height']), (255, 0, 0), 1)

# Pairs objects seen in both the previous frame and the current frame.
# To get a good pairing, each potential pair is given a cost. The problem
# then transforms into minimum cost maximum cardinality bipartite matching.

# populate table
def get_c(a0, a1):
# computes cost of pairs. A cost of inf implies no edge.
A, B = sqrt(HEIGHT ** 2 + WIDTH ** 2) / 8, 5
if a0['label'] != a1['label']: return inf
d2 = (a0['x'] - a1['x']) ** 2 + (a0['x'] - a1['x']) ** 2
dn4 = d2 ** -2 if d2 else 10**20
val = a0['value'] * a1['value'] * (((1 + B) * dn4) / (dn4 + A ** -4) - B)
return inf if val <= 0 else 1 - val
match_c = [[get_c(i, j) for j in curr_frame_objects] for i in prev_frame_objects]

# solves the matching problem in O(V^2E) by repeatedly finding augmenting paths
# using shortest path faster algorithm (SPFA).
# A modified Hungarian algorithm could also have been used.
# 0..m-1: prev, left
# m..m+n-1: this, right
# m+n: source
# m+n+1: sink
source, sink, V = m + n, m + n + 1, m + n + 2
matched = [-1] * (m + n + 2)
adjLis = [[] for i in range(m)] + [[(sink, 0)] for _ in range(n)] + [[(i, 0) for i in range(m)], []]
# left right source sink
for i in range(m):
for j in range(n):
if match_c[i][j] != inf:
adjLis[i].append((j + m, match_c[i][j]))

# finds augmenting paths until no more are found.
while True:
# SPFA
distance = [inf] * V
distance[source] = 0
parent = [-1] * V
Q, inQ = Queue(), [False] * V
Q.put(source); inQ[source] = True
while not Q.empty():
u = Q.get(); inQ[u] = False
for v, w in adjLis[u]:
if u < m and matched[u] == v: continue
if u == source and matched[v] != -1: continue
if distance[u] + w < distance[v]:
distance[v] = distance[u] + w
parent[v] = u
if not inQ[v]: Q.put(v); inQ[v] = True
aug = parent[sink]
if aug == -1: break
# augment the shortest path
while aug != source:
v = aug
aug = parent[aug]
u = aug
aug = parent[aug]
adjLis[v] = [(u, -match_c[u][v - m])]
matched[u], matched[v] = v, u

# updating cumulative_counts by the unmatched new objects
for i in range(n):
if matched[m + i] == -1:
cumulative_counts[curr_frame_objects[i]['label']] += 1

# preparing prev_frame_objects for the next frame
next_prev_frame_objects = curr_frame_objects
# considering objects that became invisible (false negative) for a few frames.
for i in range(m):
if matched[i] != -1: continue
prev_frame_objects[i]['value'] *= 0.7
if prev_frame_objects[i]['value'] >= 0.35:
next_prev_frame_objects.append(prev_frame_objects[i])
prev_frame_objects = next_prev_frame_objects

print("current cumulative_counts:\n %d ducks, %d turtles" % (cumulative_counts['duck'], cumulative_counts['turtle']))

if (show_camera):
cv2.imshow('edgeimpulse', cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
if cv2.waitKey(1) == ord('q'):
break

if (next_frame_start_time > now()):
time.sleep((next_frame_start_time - now()) / 1000)
# operates at a maximum of 5fps
next_frame_start_time = now() + 200
finally:
if (runner):
runner.stop()

if __name__ == "__main__":
main(sys.argv[1:])

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    科學(xué)家呼吁避免無(wú)人機(jī)打擾動(dòng)物

    `目前,無(wú)人機(jī)被越來(lái)越廣泛用于監(jiān)控和保護(hù)野生生物。但研究人員近日在《當(dāng)代生物學(xué)》期刊上撰文稱,應(yīng)制定策略,確保無(wú)人機(jī)不會(huì)對(duì)動(dòng)物造成過(guò)度壓力。“即便動(dòng)
    發(fā)表于 06-12 13:39

    無(wú)人機(jī)飛控系統(tǒng)

    不再只是簡(jiǎn)單的靶機(jī),也不僅僅只是“會(huì)飛的照相機(jī)”,它現(xiàn)在在廣泛的場(chǎng)景中發(fā)揮著作用。無(wú)人機(jī)不僅在軍事中作用巨大,還在航拍、農(nóng)業(yè)、植保、微型自拍、快遞運(yùn)輸、災(zāi)難救援、觀察野生動(dòng)物、監(jiān)控傳染病、測(cè)繪、新聞報(bào)道
    發(fā)表于 07-21 08:03

    基于GPRS的野生動(dòng)物遠(yuǎn)程監(jiān)測(cè)系統(tǒng)設(shè)計(jì)

    筆者從實(shí)際應(yīng)用出發(fā),以GPRS模塊為核心,設(shè)計(jì)一種無(wú)線遠(yuǎn)程監(jiān)測(cè)系統(tǒng),用以檢測(cè)野生動(dòng)物的體溫、運(yùn)動(dòng)量和環(huán)境溫度,采集導(dǎo)數(shù)據(jù)經(jīng)數(shù)據(jù)處理模塊處理后,通過(guò)GPRS接入Internet進(jìn)行遠(yuǎn)程傳
    發(fā)表于 06-19 11:22 ?1933次閱讀
    基于GPRS的<b class='flag-5'>野生動(dòng)物</b>遠(yuǎn)程監(jiān)測(cè)<b class='flag-5'>系統(tǒng)</b>設(shè)計(jì)

    物聯(lián)網(wǎng)和人工智能如何保護(hù)野生動(dòng)物

    由于偷獵活動(dòng)的增加,野生動(dòng)物瀕臨滅絕。世界各國(guó)政府正在通過(guò)使用物聯(lián)網(wǎng)(IOT)和人工智能來(lái)保護(hù)瀕臨滅絕的野生動(dòng)物,旨在解決這一嚴(yán)重問(wèn)題。
    的頭像 發(fā)表于 02-12 17:22 ?5176次閱讀

    AI助力野生動(dòng)物保護(hù)行動(dòng) 或?qū)⑴まD(zhuǎn)物種數(shù)量持續(xù)減少的惡性趨勢(shì)

    為了更有效地保護(hù)野生動(dòng)物,谷歌與七家國(guó)際動(dòng)物保護(hù)組織聯(lián)合起來(lái),憑借運(yùn)動(dòng)相機(jī)拍攝的照片,繪制了450多萬(wàn)只野生動(dòng)物的行動(dòng)地圖。這些照片都發(fā)布在了野生動(dòng)物觀察平臺(tái)(Wildlife Ins
    發(fā)表于 03-18 10:44 ?622次閱讀

    VR野生動(dòng)物系統(tǒng),拉近了人們與野生動(dòng)物之間的距離

    實(shí)現(xiàn)參與者與設(shè)備不用產(chǎn)生實(shí)際接觸的交互式科普體驗(yàn)。 VR野生動(dòng)物與傳染病科普是一款致力于幫助人們走進(jìn)動(dòng)物的VR應(yīng)用,它提供的互動(dòng)體驗(yàn)可以讓體驗(yàn)者與地球上的瀕危動(dòng)物面對(duì)面交流。 此外,在
    發(fā)表于 08-05 15:55 ?2009次閱讀

    使用無(wú)人機(jī)、熱成像儀和人工智能幫助野生動(dòng)物和土地的保護(hù)

    國(guó)外Tech Republic網(wǎng)站12月23日?qǐng)?bào)道稱,許多研究人員正在利用大量技術(shù)手段來(lái)幫助野生動(dòng)物和土地的保護(hù),包括用面部識(shí)別跟蹤加拿大西部的熊、通過(guò)深度學(xué)習(xí)預(yù)測(cè)美國(guó)的野火……而在澳大利亞,昆士蘭科技大學(xué)(QUT)的研究小組正在利用人工智能(AI)、無(wú)人機(jī)、熱成像和機(jī)器
    發(fā)表于 12-24 16:54 ?1041次閱讀

    智能野生動(dòng)物追蹤和監(jiān)測(cè)系統(tǒng)的6大好處

    導(dǎo)讀 :野生動(dòng)物保護(hù)面臨著越來(lái)越多的挑戰(zhàn),這使得物聯(lián)網(wǎng)智能野生動(dòng)物跟蹤和監(jiān)測(cè)系統(tǒng)的出現(xiàn)成為自然資源保護(hù)者、研究人員和反偷獵團(tuán)隊(duì)的分水嶺。讓我們探索一些挑戰(zhàn)和好處。 有效的野生動(dòng)物保護(hù)是
    的頭像 發(fā)表于 04-15 15:46 ?5396次閱讀

    555定時(shí)器構(gòu)成的野生動(dòng)物驅(qū)避傳感器

    電子發(fā)燒友網(wǎng)站提供《555定時(shí)器構(gòu)成的野生動(dòng)物驅(qū)避傳感器.zip》資料免費(fèi)下載
    發(fā)表于 08-11 10:33 ?3次下載
    555定時(shí)器構(gòu)成的<b class='flag-5'>野生動(dòng)物</b>驅(qū)避傳感器

    WAiT:野生動(dòng)物追蹤器

    電子發(fā)燒友網(wǎng)站提供《WAiT:野生動(dòng)物追蹤器.zip》資料免費(fèi)下載
    發(fā)表于 10-31 09:38 ?3次下載
    WAiT:<b class='flag-5'>野生動(dòng)物</b>追蹤器

    野生動(dòng)物探測(cè)器開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《野生動(dòng)物探測(cè)器開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 10-31 09:36 ?0次下載
    <b class='flag-5'>野生動(dòng)物</b>探測(cè)器開(kāi)源分享

    紅外夜視技術(shù)在野生動(dòng)物保護(hù)中的重要作用

    隨著人類(lèi)社會(huì)的發(fā)展,我們?cè)絹?lái)越意識(shí)到保護(hù)野生動(dòng)物的重要性。在這個(gè)過(guò)程中,紅外夜視技術(shù)為我們提供了一個(gè)強(qiáng)大的工具,讓我們能夠更好地保護(hù)這些珍貴的生物資源。本文將介紹紅外夜視技術(shù)在野生動(dòng)物保護(hù)中的應(yīng)用和優(yōu)勢(shì)。
    的頭像 發(fā)表于 04-25 09:40 ?600次閱讀
    紅外夜視技術(shù)在<b class='flag-5'>野生動(dòng)物</b>保護(hù)中的重要作用

    基于單片機(jī)開(kāi)發(fā)的GPS野生動(dòng)物追蹤系統(tǒng)

    在研究野生動(dòng)物的生活習(xí)性和活動(dòng)范圍上,包括鳥(niǎo)類(lèi)的遷徙,經(jīng)常會(huì)用到GPS定位系統(tǒng)來(lái)進(jìn)行跟蹤。單片機(jī)開(kāi)發(fā)人員分享了一個(gè)基于單片機(jī)開(kāi)發(fā)的GPS野生動(dòng)物追蹤系統(tǒng)方案。使用該方案,可以跟蹤
    的頭像 發(fā)表于 07-11 09:21 ?960次閱讀
    基于單片機(jī)開(kāi)發(fā)的GPS<b class='flag-5'>野生動(dòng)物</b>追蹤<b class='flag-5'>系統(tǒng)</b>

    無(wú)人機(jī)搭載紅外熱成像助力野生動(dòng)物保護(hù)

    由于地理環(huán)境的復(fù)雜性,野生動(dòng)物的調(diào)查和保護(hù)工作充滿了挑戰(zhàn)。"無(wú)人機(jī)+紅外熱成像"技術(shù)的出現(xiàn),為野生動(dòng)物保護(hù)帶來(lái)了新的希望。這種技術(shù)結(jié)合了無(wú)人機(jī)的靈活機(jī)動(dòng)性和熱成像的高靈敏度
    的頭像 發(fā)表于 04-25 12:10 ?369次閱讀
    <b class='flag-5'>無(wú)人機(jī)</b>搭載紅外熱成像助力<b class='flag-5'>野生動(dòng)物</b>保護(hù)

    湖南環(huán)球信使科技發(fā)布超輕野生動(dòng)物追蹤器HQBG1202

    2024年9月23日,湖南環(huán)球信使科技有限公司(簡(jiǎn)稱“Global Messenger”)正式推出了其最新研發(fā)成果——一款專(zhuān)為全球科研機(jī)構(gòu)及國(guó)家公園設(shè)計(jì)的超輕型野生動(dòng)物追蹤器HQBG1202。這款追蹤器的問(wèn)世,標(biāo)志著野生動(dòng)物監(jiān)測(cè)技術(shù)邁入了新的紀(jì)元。
    的頭像 發(fā)表于 09-24 14:39 ?336次閱讀